初探S他的使用
利用Oracle 10g提供的SQL Tuning Advisor,DBA可以很容易的來根據STA給出的意見和建議來進行SQL的最佳化,一切終於變的如此的簡單了。
SQL> set timing on
SQL> set autot on
SQL> select count(*) from bigtab a,smalltab b
2 where a.object_name=b.table_name;
COUNT(*)
----------
191597
已用時間: 00: 00: 27.53
執行計劃
----------------------------------------------------------
Plan hash value: 3089226980
--------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 83 | 16418 (3)| 00:03:18 |
| 1 | SORT AGGREGATE | | 1 | 83 | | |
|* 2 | HASH JOIN | | 1928K| 152M| 16418 (3)| 00:03:18 |
| 3 | TABLE ACCESS FULL| SMALLTAB | 1594 | 27098 | 12 (0)| 00:00:01 |
| 4 | TABLE ACCESS FULL| BIGTAB | 5465K| 343M| 16311 (2)| 00:03:16 |
--------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - access("A"."OBJECT_NAME"="B"."TABLE_NAME")
Note
-----
- dynamic sampling used for this statement
統計資訊
----------------------------------------------------------
446 recursive calls
0 db block gets
73581 consistent gets
73386 physical reads
0 redo size
414 bytes sent via SQL*Net to client
400 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
6 sorts (memory)
0 sorts (disk)
1 rows processed
現在我們可以建立並執行我們的SQL tuning task
DECLARE
my_task_name VARCHAR2(30);
my_sqltext CLOB;
BEGIN
my_sqltext := 'select count(*) from bigtab a, smalltab b where a.object_name=b.table_name';
my_task_name := DBMS_SQLTUNE.CREATE_TUNING_TASK(
sql_text => my_sqltext,
user_name => 'SYS',
scope => 'COMPREHENSIVE',
time_limit => 60,
task_name => 'oracle_ace_task',
description => 'Task to tune a query on a specified table');
DBMS_SQLTUNE.EXECUTE_TUNING_TASK( task_name => 'oracle_ace_task');
END;
或者我們可以利用一個procedure來生成
create or replace procedure sql_tuning(my_sqltext in clob,schema_name in varchar2)
is
my_task_name varchar2(30);
begin
my_task_name := DBMS_SQLTUNE.CREATE_TUNING_TASK(
sql_text => my_sqltext,
user_name => schema_name,
scope => 'COMPREHENSIVE',
time_limit => 60,
task_name => 'oracle_ace_task',
description => 'Task to tune a query on a specified table');
DBMS_SQLTUNE.EXECUTE_TUNING_TASK( task_name => 'oracle_ace_task');
end;
exec sql_tuning('select count(*) from bigtab a, smalltab b where a.object_name=b.table_name','SYS');
在函式CREATE_TUNING_TASK,sql_text是需要最佳化的語句,user_name是該語句透過哪個使用者執行,scope是最佳化範圍(limited或comprehensive),time_limit最佳化過程的時間限制,task_name最佳化任務名稱,description最佳化任務描述。
可以透過檢視USER_ADVISOR_LOG和USER_ADVISOR_LOG來檢視建立過的最佳化任務。
SQL> select task_name, status from USER_ADVISOR_LOG where task_name='oracle_ace_task';
TASK_NAME STATUS
------------------------------ -----------
oracle_ace_task COMPLETED
最後我們來生成tuning的報告.
SQL> set long 10000
SQL> set longchunksize 1000
SQL> set linesize 100
SQL> SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK( 'tuning_sql_test') from DUAL;
/
PL/SQL procedure successfully completed.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31520497/viewspace-2156811/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SAP S4HANA BP初探
- 初探ADDM的使用
- MongoDB使用初探MongoDB
- transform,transition,animation的混合使用——初探ORM
- 初探RxJava以及結合Retrofit的使用RxJava
- 程式間通訊的WM_COPYDA他的使用
- SSDB安裝和使用初探
- ActivityLifecycleCallbacks使用方法初探
- 還不夠他發的捨得讓他發給使用者及庫很有用
- s:iterator標籤的使用
- 初探百度F.I.S — 由工具到解決方案
- 分散式為什麼使用Redis,以及他的好處分散式Redis
- Android上kcp協議使用初探Android協議
- 初探JsonCpp - 編譯與基本使用JSON編譯
- K8s - Helm的使用K8S
- Python影像處理初探:Pillow庫的基礎使用Python
- 都在使用的快取,騰訊大牛告訴你他們是如何使用快取的快取
- 老楊說他的使用者資訊存在 Redis 裡面Redis
- getsize()不知他的用法
- 他媽的,資料結構老師真他媽的不是人資料結構
- clickhouse for centos7安裝和使用初探CentOS
- RxAndroid使用初探;簡潔、優雅、高效Android
- mysql表結構同步工具SchemaSync使用初探MySql
- MySQL pt-duplicate-key-checker工具使用初探MySql
- Unity6 URP17使用初探Unity
- RustTalk 001. 與 Folyd 聊他的 Rust 使用經歷Rust
- 使用emscripten實現js直接呼叫C程式碼(emscripten的初探)JSC程式
- 他的名字是Linus,他是所有程式設計師們的上帝程式設計師
- 來自 他 的謀殺
- 初探Node中的stream
- 他來了! 他來了! 他帶著 Gopher 專屬衛衣來了~Go
- vue單元測試vue test utils使用初探Vue
- ExtJS初探:在專案中使用ExtJSJS
- 使用Linux桌面系統的5大巨頭竟是他們!!!Linux
- robot framework 使用三:他們主動瀏覽器的相容性Framework瀏覽器
- 他,她,他,它?深夜AI小酒館你所不知道的祕密AI
- Deno 初探
- ELK初探