Oracle adviser,Oracle10g SQL tune adviser

Oracle10g SQL tune adviser簡單介紹

本文簡單介紹下SQL Tuning Adviser的配置使用方法和一些相關知識點,如果了解SQL Tuning Adviser詳細信息,參看Oracle聯機文檔。本文對分析結果沒有詳細分析。

一、自動SQL Tuning簡單介紹:

1、優化模式:

10G增強的優化模式有兩種:

a、Normal mode

在普通優化模式下,優化器編譯sql然后產生執行計劃。普通優化模式下優化器能夠快速的為sql語句產生可行的執行計劃。

b、Tuning mode

在tuning mode模式下,優化器將花費額外的時間檢查一個普通模式下產生的執行計劃是否可以優化。優化器的輸出結果將不僅僅是產生一個執行計劃,

而將執行一系列的動作,在該模式下優化器也許化肥幾分鐘去調整一個語句。每次一個sql語句被硬解析后將在自動調整優化上花費更多的時間和資源。

sql自動調整優化更適用于有復雜sql或者high-load sql的系統(例如addm中標記為高負載的sql就非常適合作為sql自動調整的目標)。

2、? ? ? ? SQL Tuning類型

Automatic SQL Tuning包含四種類型的分析:

a、Statistics Analysis

b、SQL Profiling

c、Access Path Analysis

d、SQL Structure Analysis

二、SQL Tuning Adviser:

1、授予用戶相應權限:

CONN sys/password AS SYSDBA

GRANT ADVISOR TO TEST;

CONN TEST/TEST

2、創建Tuning任務:

可以通過以下方式創建Tuning任務:

a、Automatic Workload Repository (AWR)

b、the cursor cache

c、SQL tuning set

d、specified manually

SET SERVEROUTPUT ON

--a、通過AWR設置Tuning任務.

SQL> conn /as sysdba

已連接。

--查看AWR的SNAPSHOT信息:

SQL> SELECT max(snap_id) FROM WRM$_SNAPSHOT;

MAX(SNAP_ID)

------------

201

--查看SNAP間隔:

SQL> select snap_interval, retention from dba_hist_wr_control;

SNAP_INTERVAL? ?? ?? ?? ?? ?? ?RETENTION

------------------------------ ------------------------------

+00000 01:00:00.0? ?? ?? ?? ???+00007 00:00:00.0

--我們可以手工縮短AWR采樣時間間隔(加快測試速度,本利采用手工執行創建SNAPSHOT的方法):

begin

dbms_workload_repository.modify_snapshot_settings (

interval => 10,

retention => 10*24*60

);

end;

SQL> conn test/test

已連接。

--執行目標SQL:

SQL> select /*We will trace this sql*/ name,addr,insertdata from (select name,ad

dr,insertdata,rank() over(partition by name,addr order by insertdata desc) rn fr

om t ) where rn = 1;

NAME? ?? ? ADDR? ?? ?? ?? ?? ???INSERTDATA

---------- -------------------- -------------------

王? ?? ?? ?上海? ?? ?? ?? ?? ???19-12-2006 10:09:33

王1? ?? ???上海? ?? ?? ?? ?? ???16-12-2006 10:11:15

王2? ?? ???上海? ?? ?? ?? ?? ???16-12-2006 10:11:15

張? ?? ?? ?北京? ?? ?? ?? ?? ???19-12-2006 10:08:42

--查找SQL_ID:

SQL> select sql_id,executions from v$sqlarea where lower(sql_text) like '%we wil

l trace this sql%';

SQL_ID? ?? ???EXECUTIONS

------------- ----------

8zu31x4adn76f? ?? ?? ? 1

1k659753fzcxn? ?? ?? ? 1

SQL> /

SQL_ID? ?? ???EXECUTIONS

------------- ----------

8zu31x4adn76f? ?? ?? ? 2

1k659753fzcxn? ?? ?? ? 1? ?--我們將分析該SQL

SQL> select sql_id from DBA_HIST_SQLSTAT where sql_id='1k659753fzcxn';

未選定行

--手工創建新的AWR SNAPSHOT:

SQL> execute dbms_workload_repository.create_snapshot;

PL/SQL 過程已成功完成。

SQL> select sql_id from DBA_HIST_SQLSTAT where sql_id='1k659753fzcxn';

SQL_ID

-------------

1k659753fzcxn

--創建Tuning task:

SQL> DECLARE

2? ?? ?? ?? ?? ?l_sql_tune_task_id??VARCHAR2(100);

3? ?? ?? ?? ? BEGIN

4? ?? ?? ?? ?? ?l_sql_tune_task_id := DBMS_SQLTUNE.create_tuning_task (

5? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?begin_snap??=> 201,

6? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?end_snap? ? => 202,

7? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?sql_id? ?? ?=> '1k659753fzcxn',

8? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?scope? ?? ? => DBMS_SQLTUNE.scope_comprehensive,

9? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?time_limit??=> 60,

10? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?task_name? ?=> '1k659753fzcxn_awr_tuning_task',

11? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?description => 'Tuning task for statement 1k659753fzcxn in AWR.');

12? ?? ?? ?? ?? ?DBMS_OUTPUT.put_line('l_sql_tune_task_id: ' || l_sql_tune_task_id);

13? ?? ?? ?? ? END;

14??/

PL/SQL 過程已成功完成。

SQL> SELECT task_name, status FROM dba_advisor_log WHERE owner = 'TEST';

TASK_NAME? ?? ?? ?? ?? ?? ?? ? STATUS

------------------------------ -----------

ADDM:1184202927_1_201? ?? ?? ? COMPLETED

ADDM:1184202927_1_202? ?? ?? ? COMPLETED

1k659753fzcxn_awr_tuning_task??INITIAL

--執行Tuning task:

SQL> EXEC DBMS_SQLTUNE.execute_tuning_task(task_name => '1k659753fzcxn_awr_tuning_task');

PL/SQL 過程已成功完成。

SQL> SET LONG 999999;

SQL> SET PAGESIZE 1000

SQL> SET LINESIZE 200

--查看Tuning advice:

SQL> SELECT DBMS_SQLTUNE.report_tuning_task('1k659753fzcxn_awr_tuning_task') AS recommendations FROM dual;

RECOMMENDATIONS

--------------------------------------------------------------------------------

GENERAL INFORMATION SECTION

-------------------------------------------------------------------------------

Tuning Task Name? ?? ?? ?? ?? ?? ?: 1k659753fzcxn_awr_tuning_task

Tuning Task Owner? ?? ?? ?? ?? ???: TEST

Scope? ?? ?? ?? ?? ?? ?? ?? ?? ???: COMPREHENSIVE

Time Limit(seconds)? ?? ?? ?? ?? ?: 60

Completion Status? ?? ?? ?? ?? ???: COMPLETED

Started at? ?? ?? ?? ?? ?? ?? ?? ?: 07/09/2008 22:40:27

Completed at? ?? ?? ?? ?? ?? ?? ? : 07/09/2008 22:40:28

-------------------------------------------------------------------------------

Schema Name: TEST

SQL ID? ???: 1k659753fzcxn

SQL Text? ?: select /*We will trace this sql*/ name,addr,insertdata from

(select name,addr,insertdata,rank() over(partition by name,addr

order by insertdata desc) rn from t ) where rn = 1

-------------------------------------------------------------------------------

ADDITIONAL INFORMATION SECTION

-------------------------------------------------------------------------------

-優化程序不能合并位于執行計劃的行 ID 1 處的視圖。.

-------------------------------------------------------------------------------

EXPLAIN PLANS SECTION

-------------------------------------------------------------------------------

1- Original

-----------

Plan hash value: 3047187157

--------------------------------------------------------------------------------

-

| Id??| Operation? ?? ?? ?? ?? ? | Name | Rows??| Bytes | Cost (%CPU)| Time

|

--------------------------------------------------------------------------------

-

|? ?0 | SELECT STATEMENT? ?? ?? ?|? ?? ?|? ???8 |? ?368 |? ???4??(25)| 00:00:01

|

|*??1 |??VIEW? ?? ?? ?? ?? ?? ???|? ?? ?|? ???8 |? ?368 |? ???4??(25)| 00:00:01

|

|*??2 |? ?WINDOW SORT PUSHED RANK|? ?? ?|? ???8 |? ?136 |? ???4??(25)| 00:00:01

|

|? ?3 |? ? TABLE ACCESS FULL? ???| T? ? |? ???8 |? ?136 |? ???3? ?(0)| 00:00:01

|

--------------------------------------------------------------------------------

-

Predicate Information (identified by operation id):

---------------------------------------------------

1 - filter("RN"=1)

2 - filter(RANK() OVER ( PARTITION BY "NAME","ADDR" ORDER BY

INTERNAL_FUNCTION("INSERTDATA") DESC )<=1)

-------------------------------------------------------------------------------

--中斷Tuning task:

EXEC DBMS_SQLTUNE.interrupt_tuning_task (task_name => '1k659753fzcxn_awr_tuning_task');

--繼續Tuning task:

EXEC DBMS_SQLTUNE.resume_tuning_task (task_name => '1k659753fzcxn_awr_tuning_task');

--取消Tuning task:

EXEC DBMS_SQLTUNE.cancel_tuning_task (task_name => '1k659753fzcxn_awr_tuning_task');

--重置Tuning task:

SQL> SELECT task_name, status FROM dba_advisor_log WHERE owner = 'TEST';

TASK_NAME? ?? ?? ?? ?? ?? ?? ? STATUS

------------------------------ -----------

ADDM:1184202927_1_201? ?? ?? ? COMPLETED

ADDM:1184202927_1_202? ?? ?? ? COMPLETED

1k659753fzcxn_awr_tuning_task??COMPLETED

SQL> EXEC DBMS_SQLTUNE.reset_tuning_task (task_name => '1k659753fzcxn_awr_tuning_task');

PL/SQL 過程已成功完成。

SQL> SELECT task_name, status FROM dba_advisor_log WHERE owner = 'TEST';

TASK_NAME? ?? ?? ?? ?? ?? ?? ? STATUS

------------------------------ -----------

ADDM:1184202927_1_201? ?? ?? ? COMPLETED

ADDM:1184202927_1_202? ?? ?? ? COMPLETED

1k659753fzcxn_awr_tuning_task??INITIAL

--刪除Tuning task:

SQL> BEGIN

2? ? DBMS_SQLTUNE.drop_tuning_task (task_name => '1k659753fzcxn_awr_tuning_task');

3??END;

4??/

PL/SQL 過程已成功完成。

SQL> SELECT task_name, status FROM dba_advisor_log WHERE owner = 'TEST';

TASK_NAME? ?? ?? ?? ?? ?? ?? ? STATUS

------------------------------ -----------

ADDM:1184202927_1_201? ?? ?? ? COMPLETED

ADDM:1184202927_1_202? ?? ?? ? COMPLETED

--b、通過cursor cache設置Tuning任務.

--方法大致如下,這里我們就不再另外舉例了。

DECLARE

l_sql_tune_task_id??VARCHAR2(100);

BEGIN

l_sql_tune_task_id := DBMS_SQLTUNE.create_tuning_task (

sql_id? ?? ?=> '1k659753fzcxn',

scope? ?? ? => DBMS_SQLTUNE.scope_comprehensive,

time_limit??=> 60,

task_name? ?=> '1k659753fzcxn_tuning_task',

description => 'Tuning task for statement 1k659753fzcxn.');

DBMS_OUTPUT.put_line('l_sql_tune_task_id: ' || l_sql_tune_task_id);

END;

/

--c、通過SQL tuning set設置Tuning任務.

我們可以創建調整SQL的集合:

SQL> CONN /AS SYSDBA

已連接。

SQL> GRANT ADMINISTER ANY SQL TUNING SET TO TEST;

授權成功。

SQL> CONN TEST/TEST

已連接。

SQL> BEGIN

2? ? DBMS_SQLTUNE.create_sqlset (

3? ?? ?sqlset_name??=> 'test_sql_tuning_set',

4? ?? ?description??=> 'A test SQL tuning set.');

5??END;

6??/

PL/SQL 過程已成功完成。

SQL> SELECT OWNER,NAME FROM DBA_SQLSET;

OWNER? ?? ?? ?? ?? ?? ?? ?? ???NAME

------------------------------ ------------------------------

TEST? ?? ?? ?? ?? ?? ?? ?? ?? ?test_sql_tuning_set

SQL> declare

2? ???cur dbms_sqltune.sqlset_cursor;

3??begin

4? ???open cur for select value(p) from table(dbms_sqltune.select_cursor_cache('parsing_schema_name = ''TEST'' ',null,null,null,null,1,null,'ALL')) P;

5? ???dbms_sqltune.load_sqlset(sqlset_name=>'test_sql_tuning_set',populate_cursor=>cur);

6??end;

7??/

PL/SQL 過程已成功完成。

SQL> select count(*) from table(dbms_sqltune.select_sqlset('test_sql_tuning_set'

, 'parsing_schema_name = ''TEST'' '));

COUNT(*)

----------

17

SQL> declare

2? ???my_task_name varchar2(30);

3??begin

4? ???my_task_name := dbms_sqltune.create_tuning_task(sqlset_name=>'test_sql_tuning_set',

5? ???time_limit=>600,

6? ???scope=>'COMPREHENSIVE',

7? ???task_name=>'test_tuning_task',

8? ???description=>'test tuning task');

9??end;

10??/

PL/SQL 過程已成功完成。

SQL> begin

2? ???dbms_sqltune.set_tuning_task_parameter(

3? ???task_name=> 'test_tuning_task',

4? ???parameter => 'TIME_LIMIT',

5? ???value=>800);

6??end;

7??/

PL/SQL 過程已成功完成。

SQL> exec dbms_sqltune.execute_tuning_task(task_name => 'test_tuning_task');

PL/SQL 過程已成功完成。

SQL> set long 999999

SQL> set longchunksize 1000

SQL> set linesize 200

SQL> select dbms_sqltune.report_tuning_task('test_tuning_task') from dual;

DBMS_SQLTUNE.REPORT_TUNING_TASK('TEST_TUNING_TASK')

-------------------------------------------------------------------------------------------------------------------------------

GENERAL INFORMATION SECTION

-------------------------------------------------------------------------------

Tuning Task Name? ?? ?? ?? ?? ?? ?: test_tuning_task

Tuning Task Owner? ?? ?? ?? ?? ???: TEST

Scope? ?? ?? ?? ?? ?? ?? ?? ?? ???: COMPREHENSIVE

Time Limit(seconds)? ?? ?? ?? ?? ?: 800

Completion Status? ?? ?? ?? ?? ???: COMPLETED

Started at? ?? ?? ?? ?? ?? ?? ?? ?: 07/10/2008 12:38:55

Completed at? ?? ?? ?? ?? ?? ?? ? : 07/10/2008 12:38:59

SQL Tuning Set (STS) Name? ?? ?? ?: test_sql_tuning_set

SQL Tuning Set Owner? ?? ?? ?? ???: TEST

DBMS_SQLTUNE.REPORT_TUNING_TASK('TEST_TUNING_TASK')

-------------------------------------------------------------------------------------------------------------------------------

Number of Statements in the STS? ?: 17

Number of Statements in the Report: 17

Number of Statements with Findings: 7

Number of Statistic Findings? ?? ?: 9

Number of SQL Profile Findings? ? : 2

Number of SQL Restructure Findings: 1

Number of Errors? ?? ?? ?? ?? ?? ?: 1

.........................................

.........................................

這里就不顯示分析結果了,上千行的分析結果。

和創建Tuning task類似,select_sqlset也可以從AWR中獲得sql集合,也可拷貝其他集合。這里不再詳細介紹。

--d、通過manually specified statement設置Tuning任務.

--沒有綁定變量的情況:

SQL> DECLARE

2? ? l_sql? ?? ?? ?? ?? ?VARCHAR2(500);

3? ? l_sql_tune_task_id??VARCHAR2(100);

4??BEGIN

5? ? l_sql := 'select /*We will trace this sql*/ name,addr,insertdata from

(select name,addr,insertdata,rank() over(partition by name,addr order by

insertdatadesc) rn from t ) where rn = 1';

7? ? l_sql_tune_task_id := DBMS_SQLTUNE.create_tuning_task (

8? ?? ?? ?? ?? ?? ?? ?? ?? ? sql_text? ? => l_sql,

9? ?? ?? ?? ?? ?? ?? ?? ?? ? user_name? ?=> 'TEST',

10? ?? ?? ?? ?? ?? ?? ?? ?? ? scope? ?? ? => DBMS_SQLTUNE.scope_comprehensive,

11? ?? ?? ?? ?? ?? ?? ?? ?? ? time_limit??=> 60,

12? ?? ?? ?? ?? ?? ?? ?? ?? ? task_name? ?=> 'test_tuning_task',

13? ?? ?? ?? ?? ?? ?? ?? ?? ? description => 'Tuning task for an a simple query.');

14? ? DBMS_OUTPUT.put_line('l_sql_tune_task_id: ' || l_sql_tune_task_id);

15??END;

16??/

PL/SQL 過程已成功完成。

SQL> EXEC DBMS_SQLTUNE.execute_tuning_task(task_name => 'test_tuning_task');

PL/SQL 過程已成功完成。

SQL> SELECT DBMS_SQLTUNE.report_tuning_task('test_tuning_task') AS recommendations FROM dual;

RECOMMENDATIONS

--------------------------------------------------------------------------------

GENERAL INFORMATION SECTION

-------------------------------------------------------------------------------

Tuning Task Name? ?? ?? ?? ?? ?? ?: test_tuning_task

Tuning Task Owner? ?? ?? ?? ?? ???: TEST

Scope? ?? ?? ?? ?? ?? ?? ?? ?? ???: COMPREHENSIVE

Time Limit(seconds)? ?? ?? ?? ?? ?: 60

Completion Status? ?? ?? ?? ?? ???: COMPLETED

Started at? ?? ?? ?? ?? ?? ?? ?? ?: 07/10/2008 01:17:09

Completed at? ?? ?? ?? ?? ?? ?? ? : 07/10/2008 01:17:09

Number of Statistic Findings? ?? ?: 1

RECOMMENDATIONS

--------------------------------------------------------------------------------

-------------------------------------------------------------------------------

Schema Name: TEST

SQL ID? ???: 3zdbsrhb1mhuq? ?--該處的sql_id顯示不正確,可能是oracle的一個 bug

SQL Text? ?: select /*We will trace this sql*/ name,addr,insertdata from

(select name,addr,insertdata,rank() over(partition by name,addr

order by insertdata desc) rn from t ) where rn = 1

-------------------------------------------------------------------------------

FINDINGS SECTION (1 finding)

-------------------------------------------------------------------------------

RECOMMENDATIONS

--------------------------------------------------------------------------------

1- Statistics Finding

---------------------

尚未分析表 "TEST"."

Recommendation

--------------

- 考慮收集此表的優

execute dbms_stats.gather_table_stats(ownname => 'TEST', tabname => 'T',

estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE, method_opt =>

'FOR ALL COLUMNS SIZE AUTO');

RECOMMENDATIONS

--------------------------------------------------------------------------------

Rationale

---------

為了選擇好的執行計劃, 優化程序需

-------------------------------------------------------------------------------

ADDITIONAL INFORMATION SECTION

-------------------------------------------------------------------------------

-優化程序不能合并位于執行計劃的行 ID 1 處的視圖。.

-------------------------------------------------------------------------------

EXPLAIN PLANS SECTION

RECOMMENDATIONS

--------------------------------------------------------------------------------

-------------------------------------------------------------------------------

1- Original

-----------

Plan hash value: 3047187157

--------------------------------------------------------------------------------

| Id??| Operation? ?? ?? ?? ?? ? | Name | Rows??| Bytes | Cost (%CPU)| Time

--------------------------------------------------------------------------------

|? ?0 | SELECT STATEMENT? ?? ?? ?|? ?? ?|? ???8 |? ?368 |? ???4??(25)| 00:00:01

|*??1 |??VIEW? ?? ?? ?? ?? ?? ???|? ?? ?|? ???8 |? ?368 |? ???4??(25)| 00:00:01

RECOMMENDATIONS

--------------------------------------------------------------------------------

|*??2 |? ?WINDOW SORT PUSHED RANK|? ?? ?|? ???8 |? ?264 |? ???4??(25)| 00:00:01

|? ?3 |? ? TABLE ACCESS FULL? ???| T? ? |? ???8 |? ?264 |? ???3? ?(0)| 00:00:01

--------------------------------------------------------------------------------

Predicate Information (identified by operation id):

---------------------------------------------------

1 - filter("RN"=1)

2 - filter(RANK() OVER ( PARTITION BY "NAME","ADDR" ORDER BY

INTERNAL_FUNCTION("INSERTDATA") DESC )<=1)

RECOMMENDATIONS

--------------------------------------------------------------------------------

-------------------------------------------------------------------------------

--帶有綁定變量的情況:

SQL> variable var_1 number;

SQL> variable var_2 number;

SQL> variable var_3 number;

SQL> exec :var_1 := 5;

PL/SQL 過程已成功完成。

SQL> exec :var_2 := 4;

PL/SQL 過程已成功完成。

SQL> exec :var_3 := 3;

PL/SQL 過程已成功完成。

SQL> select id,name,addr from t where id<>:var_1 and id<:var_2 and id>

ID NAME? ?? ?? ?? ?? ???ADDR

---------- -------------------- --------------------

1 張? ?? ?? ?? ?? ?? ? 北京

2 張? ?? ?? ?? ?? ?? ? 北京

SQL> SELECT task_name, status FROM dba_advisor_log WHERE owner = 'TEST';

TASK_NAME? ?? ?? ?? ?? ?? ?? ? STATUS

------------------------------ -----------

ADDM:1184202927_1_201? ?? ?? ? COMPLETED

ADDM:1184202927_1_202? ?? ?? ? COMPLETED

test_tuning_task? ?? ?? ?? ?? ?COMPLETED

SQL> BEGIN

2? ???DBMS_SQLTUNE.drop_tuning_task (task_name => 'test_tuning_task');

3??END;

4??/

PL/SQL 過程已成功完成。

SQL>

SQL>

SQL> DECLARE

2? ? l_sql? ?? ?? ?? ?? ?VARCHAR2(500);

3? ? l_sql_tune_task_id??VARCHAR2(100);

4??BEGIN

5? ? l_sql := 'select id,name,addr from t where id<>:var_1 and id<:var_2 and i>

d<:var_3>

6

7? ? l_sql_tune_task_id := DBMS_SQLTUNE.create_tuning_task (

8? ?? ?? ?? ?? ?? ?? ?? ?? ? sql_text? ? => l_sql,

9? ?? ?? ?? ?? ?? ?? ?? ?? ? bind_list? ?=> sql_binds(anydata.ConvertNumber(5),

anydata.ConvertNumber(4),anydata.ConvertNumber(3)),

10? ?? ?? ?? ?? ?? ?? ?? ?? ? user_name? ?=> 'TEST',

11? ?? ?? ?? ?? ?? ?? ?? ?? ? scope? ?? ? => DBMS_SQLTUNE.scope_comprehensive,

12? ?? ?? ?? ?? ?? ?? ?? ?? ? time_limit??=> 60,

13? ?? ?? ?? ?? ?? ?? ?? ?? ? task_name? ?=> 'test_tuning_task',

14? ?? ?? ?? ?? ?? ?? ?? ?? ? description => 'Tuning task for an a simple query

.');

15? ? DBMS_OUTPUT.put_line('l_sql_tune_task_id: ' || l_sql_tune_task_id);

16??END;

17??/

PL/SQL 過程已成功完成。

SQL> SELECT * FROM DBA_SQLTUNE_BINDS;

TASK_ID??OBJECT_ID? ?POSITION VALUE()

---------- ---------- ---------- --------------------

393? ?? ?? ? 1? ?? ?? ? 1 ANYDATA()

393? ?? ?? ? 1? ?? ?? ? 2 ANYDATA()

393? ?? ?? ? 1? ?? ?? ? 3 ANYDATA()

SQL> EXEC DBMS_SQLTUNE.execute_tuning_task(task_name => 'test_tuning_task');

PL/SQL 過程已成功完成。

SQL> SELECT DBMS_SQLTUNE.report_tuning_task('test_tuning_task') AS recommendatio

ns FROM dual;

RECOMMENDATIONS

--------------------------------------------------------------------------------

GENERAL INFORMATION SECTION

-------------------------------------------------------------------------------

Tuning Task Name? ?? ?? ?? ?? ?? ?: test_tuning_task

Tuning Task Owner? ?? ?? ?? ?? ???: TEST

Scope? ?? ?? ?? ?? ?? ?? ?? ?? ???: COMPREHENSIVE

Time Limit(seconds)? ?? ?? ?? ?? ?: 60

Completion Status? ?? ?? ?? ?? ???: COMPLETED

Started at? ?? ?? ?? ?? ?? ?? ?? ?: 07/10/2008 02:04:29

Completed at? ?? ?? ?? ?? ?? ?? ? : 07/10/2008 02:04:29

Number of Statistic Findings? ?? ?: 1

RECOMMENDATIONS

--------------------------------------------------------------------------------

-------------------------------------------------------------------------------

Schema Name: TEST

SQL ID? ???: 15c91q9b2sxvk? ?--該處的sql_id顯示不正確,可能是oracle的一個 bug

SQL Text? ?: select id,name,addr from t where id<>:var_1 and id<:var_2 and>

id<:var_3>

-------------------------------------------------------------------------------

FINDINGS SECTION (1 finding)

-------------------------------------------------------------------------------

1- Statistics Finding

RECOMMENDATIONS

--------------------------------------------------------------------------------

---------------------

尚未分析表 "TEST"."

Recommendation

--------------

- 考慮收集此表的優

execute dbms_stats.gather_table_stats(ownname => 'TEST', tabname => 'T',

estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE, method_opt =>

'FOR ALL COLUMNS SIZE AUTO');

Rationale

RECOMMENDATIONS

--------------------------------------------------------------------------------

---------

為了選擇好的執行計劃, 優化程序需

-------------------------------------------------------------------------------

EXPLAIN PLANS SECTION

-------------------------------------------------------------------------------

1- Original

-----------

Plan hash value: 1601196873

RECOMMENDATIONS

--------------------------------------------------------------------------------

--------------------------------------------------------------------------

| Id??| Operation? ?? ?? ?| Name | Rows??| Bytes | Cost (%CPU)| Time? ???|

--------------------------------------------------------------------------

|? ?0 | SELECT STATEMENT??|? ?? ?|? ???8 |? ?296 |? ???3? ?(0)| 00:00:01 |

|*??1 |??TABLE ACCESS FULL| T? ? |? ???8 |? ?296 |? ???3? ?(0)| 00:00:01 |

--------------------------------------------------------------------------

Predicate Information (identified by operation id):

---------------------------------------------------

1 - filter("ID"<>:VAR_1 AND "ID"<:var_2 and>

RECOMMENDATIONS

--------------------------------------------------------------------------------

-------------------------------------------------------------------------------

三、SQL Profile:

由于缺少各種信息,優化器有時候會產生不正確的執行計劃,通常我們可以指定hints來干預執行計劃。

SQL AUTO TUNING通過SQL Profiling來解決類似的問題。自動調整優化器會創建SQL Profile,SQL Profile包含SQL語句的輔助統計信息。

普通優化模式下,優化器通過估算出一個集式、選擇性、cost來最后決定使用什么樣的執行計劃。SQL Profile利用存儲的額外的信息,

通過采樣或者部分執行的方式來驗證一個執行計劃是否為最優化,保存歷史運行統計信息。

如果一個tuning task accept SQL Profile,SQL Profile將被永久存儲在數據字典中。普通優化模式下,優化器在產生執行計劃的時候

將利用數據庫的統計信息結合SQL Profile的信息一起分析,最終產生最優化的執行計劃。

可以利用CATAGORY控制SQL Profile的使用權限,數據庫參數sqltune_category為默認DEFAULT。

SQL> SHOW PARAMETER SQLTUNE

NAME? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?TYPE? ?? ???VALUE

------------------------------------ ----------- ------------------------------

sqltune_category? ?? ?? ?? ?? ?? ?? ?string? ?? ?DEFAULT

我們也可以修改數據庫參數文件,指定我們自己的SQLTUNE_CATEGORY:

ALTER SYSTEM SET SQLTUNE_CATEGORY = PROD;

SQL Profiles apply to the following statement types:

SELECT statements

UPDATE statements

INSERT statements (only with a SELECT clause)

DELETE statements

CREATE TABLE statements (only with the AS SELECT clause)

MERGE statements (the update or insert operations)

SQL Profile基本操作:

SQL> conn /as sysdba

已連接。

SQL> GRANT CREATE ANY SQL_PROFILE TO TEST;

授權成功。

SQL> GRANT DROP ANY SQL PROFILE TO TEST;

授權成功。

SQL> GRANT ALTER ANY SQL PROFILE TO TEST;

授權成功。

SQL> CONN TEST/TEST

已連接。

SET SERVEROUTPUT ON

DECLARE

l_sql_tune_task_id??VARCHAR2(20);

BEGIN

l_sql_tune_task_id := DBMS_SQLTUNE.accept_sql_profile (

task_name => 'test_tuning_task',

name? ?? ?=> 'test_profile');

DBMS_OUTPUT.put_line('l_sql_tune_task_id: ' || l_sql_tune_task_id);

END;

/

BEGIN

DBMS_SQLTUNE.alter_sql_profile (

name? ?? ?? ?? ?=> 'test_profile',

attribute_name??=> 'STATUS',

value? ?? ?? ???=> 'DISABLED');

END;

/

BEGIN

DBMS_SQLTUNE.drop_sql_profile (

name? ?=> 'test_profile',

ignore => TRUE);

END;

/

--example:

SQL> execute dbms_sqltune.accept_sql_profile(task_name => 'test_tuning_task',object_id => 6, replace => TRUE);

SQL> select count(1) from DBA_SQL_PROFILES;

COUNT(1)

----------

1

PL/SQL 過程已成功完成。

四、幾個有用的automatic SQL tuning相關的數據字典:

DBA_ADVISOR_TASKS

DBA_ADVISOR_FINDINGS

DBA_ADVISOR_RECOMMENDATIONS

DBA_ADVISOR_RATIONALE

DBA_SQLTUNE_STATISTICS

DBA_SQLTUNE_BINDS

DBA_SQLTUNE_PLANS

DBA_SQLSET

DBA_SQLSET_BINDS

DBA_SQLSET_STATEMENTS

DBA_SQLSET_REFERENCES

DBA_SQL_PROFILES

V$SQL

V$SQLAREA

V$ACTIVE_SESSION_HISTORY

五、DBMS_SQLTUNE包的詳細方法可以參考:

http://download-west.oracle.com/ ... b10802/d_sqltun.htm

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/396866.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/396866.shtml
英文地址,請注明出處:http://en.pswp.cn/news/396866.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

考托福

todo 香港的博士 轉載于:https://www.cnblogs.com/dunfentiao/p/5164028.html

keepalived vip ping不通_【干貨分享】OpenStack LVS負載均衡為什么不通?

背景介紹OpenStack環境Neutron 的安全組會向虛擬機默認添加 anti-spoof 的規則&#xff0c;將保證虛擬機只能發出&#xff0f;接收以本機Port為原地址或目的地址(IP、MAC)的流量&#xff0c;提高了云的安全性。但是LVS等需要綁定VIP的場景&#xff0c;默認流量是被攔截的。需要…

Docker安裝ssh,supervisor等基礎工具

2019獨角獸企業重金招聘Python工程師標準>>> Docker安裝ssh&#xff0c;supervisor等基礎工具 需要提前下載好官方的ubuntu鏡像&#xff0c;我這里使用的是ubuntu:14.04版本&#xff0c;這里安裝了一些基礎的工具ssh&#xff0c;curl&#xff0c;wget&#xff0c;vi…

中南大學 oracle試卷,數據庫原理期末復習(中南大學)數據庫原理、技術及應用2.ppt...

2014 春季 信息11,12 DB P,T&A-張祖平 數據庫原理、技術及應用 張祖平/Zhang Zuping 電子信息工程系 School of Information Science and Engineering,Central South University , zpzhangmail.csu.edu.cn 本章小結 關系模型中的相關概念 關系(集合)&#xff0c;性質&#…

Pandas時間差(Timedelta)

時間差(Timedelta)是時間上的差異&#xff0c;以不同的單位來表示。例如&#xff1a;日&#xff0c;小時&#xff0c;分鐘&#xff0c;秒。它們可以是正值&#xff0c;也可以是負值。可以使用各種參數創建Timedelta對象&#xff0c;如下所示 - 字符串 通過傳遞字符串&#xff0…

nginx集群_windows環境下搭建簡單Nginx+Tomcat集群

通俗點將&#xff0c;負載均衡就是因為訪問流量太大&#xff0c;導致項目訪問不流暢、甚至宕掉&#xff0c;所以通過一種分流的方式來緩解這種情況。一、 工具nginx-1.8.0apache-tomcat-6.0.33二、 目標實現高性能負載均衡的Tomcat集群&#xff1a;三、 步驟1、首先下載Nginx&a…

顏色傳感器TCS230及顏色識別電路(轉)

摘要 TCS230是美國TAOS公司生產的一種可編程彩色光到頻率的傳感器。該傳感器具有分辨率高、可編程的顏色選擇與輸出定標、單電源供電等特點&#xff1b;輸出為數字量&#xff0c;可直接與微處理器連接。文中主要介紹TCS230的原理和應用&#xff0c;以及色光和白平衡的知識&…

自定義對話框 提示:Unable to add window token null is not for an application

這是因為在new Dialog(context);的時候傳入的context是通過getApplicationContext()獲得的&#xff0c;這樣就會報錯。 把context的獲得方式改為MainActivity.this就好了。 轉載于:https://www.cnblogs.com/qlong8807/p/5167560.html

[51Nod 1218] 最長遞增子序列 V2 (LIS)

傳送門 Description 數組A包含N個整數。設S為A的子序列且S中的元素是遞增的&#xff0c;則S為A的遞增子序列。如果S的長度是所有遞增子序列中最長的&#xff0c;則稱S為A的最長遞增子序列&#xff08;LIS&#xff09;。A的LIS可能有很多個。例如A為&#xff1a;1 3 2 0 4&#…

linux如何全局搜索目錄,Linux 全目錄全文搜索

文件內容搜索1grep -r root /home/ray/dev/media/wyquery/*通過這種方法來尋找數據庫配置文件的目錄其他$ grep “被查找的字符串” 文件名例子&#xff1a;在當前目錄里第一級文件夾中尋找包含指定字符串的.in文件grep “thermcontact” */*.in從文件內容查找與正則表達式匹配…

mysql命令行導入和導出數據

首先打開命令窗口,輸入命令:mysql -h localhost -u selffabu -p 連接成功后,進行下面的操作 MySQL中導出CSV格式數據的SQL語句樣本如下&#xff1a; Sql代碼select * from test_info into outfile /tmp/test.csv fields terminated by , optionally enclosed by " esc…

Python 拷貝對象(深拷貝deepcopy與淺拷貝copy)

http://www.jb51.net/article/15714.htm 1. copy.copy 淺拷貝 只拷貝父對象&#xff0c;不會拷貝對象的內部的子對象。2. copy.deepcopy 深拷貝 拷貝對象及其子對象 一個很好的例子&#xff1a; 1 import copy2 a [1, 2, 3, 4, [a, b]] #原始對象3 4 b a #賦值&#xff0c…

7.組件連線(貝塞爾曲線)--從零起步實現基于Html5的WEB設計器Jquery插件(含源碼)...

上節講到如何創建組件&#xff0c;清除設計器視圖&#xff0c;以及設計視圖的持久化和恢復&#xff0c;本節將重點講如何實現組件間的連線&#xff0c;前面章節有提到為了方便從持久化文件中恢復&#xff0c;組件和連線是分別存放的&#xff1a;nodes和lines對象&#xff0c;兩…

linux bind命令,LINUX命令bind-系統管理-顯示或設置鍵盤按鍵與其相關的功能

bind命令 用于顯示和設置命令行的鍵盤序列綁定功能。通過這一命令&#xff0c;可以提高命令行中操作效率。您可以利用bind命令了解有哪些按鍵組合與其功能&#xff0c;也可以自行指定要用哪些按鍵組合。語法bind(選項)選項-d&#xff1a;顯示按鍵配置的內容&#xff1b;-f&…

定位排查工作流的計算結果數據量不符合預期的方法

近期有發現一些用戶在咨詢&#xff0c;為什么數據從數據源出來后&#xff0c;經過了一些計算&#xff0c;結果不符合預期了。最常見的是說&#xff0c;為什么我的數據在Mysql里有xx條&#xff0c;怎么到MaxCompute里算了下結果變了。因為這是兩個不同的系統&#xff0c;我們又沒…

canvas 插件_基于canvas的JavaScript 二維碼生成工具——QRCanvas

介紹在我們日常的開發中&#xff0c;特別是在現代的社會環境下&#xff0c;二維碼的應用可謂是豐富多彩&#xff0c;各種各樣讓人眼花繚亂的二維碼&#xff0c;可見二維碼已經滲透進我們生活的方方面面&#xff0c;也可以說目二維碼確確實實方便了我們的生活。因為作為開發人員…

spring cloud feign 上傳文件報not a type supported by this encoder解決方案

上傳文件調用外部服務報錯&#xff1a; not a type supported by this encoder 查看SpringFormEncoder類的源碼&#xff1a; 1 public class SpringFormEncoder extends FormEncoder2 {3 4 public SpringFormEncoder()5 {6 this(((Encoder) (new feign.codec.…

counter 計數器

包含了兩個屬性和一個方法&#xff1a; 1. counter-reset2. counter-increment3. counter()/counters()counter-reset&#xff08;主要作用就是給計數器起個名字。如果可能&#xff0c;順便告訴下從哪個數字開始計數。默認是0&#xff09;&#xff1a;.xxx { counter-reset: sm…

linux中的變量文件路徑,Linux庫文件和Shell可執行程序命令文件搜索路徑變量的設置...

一、庫文件的搜索路徑&#xff1a;1、在配置文件/etc/ld.so.conf中指定動態庫搜索路徑(需要添加其它庫文件的路徑&#xff0c;在文件的最后添加具體的路徑即可 [ 如&#xff1a;/usr/local/lib ]&#xff0c;添加后保存退出&#xff0c;然后在命令行ldconfig2、通過環境變量LD_…

消息隊列NetMQ 原理分析2-IO線程和完成端口

目錄 前言介紹目的IO線程初始化IO線程Proactor啟動Procator線程輪詢處理socketIOObject總結前言 介紹 [NetMQ](https://github.com/zeromq/netmq.git)是ZeroMQ的C#移植版本,它是對標準socket接口的擴展。它提供了一種異步消息隊列,多消息模式,消息過濾&#xff08;訂閱&#xf…