微課sql最佳化(6)、統計資訊收集(4)-關於動態取樣
1、關於動態取樣
動態取樣會增加缺少或不足的最佳化器統計資訊。使用動態取樣,最佳化器可以透過對謂詞選擇性做出更好的估計來改進計劃。動態取樣可以補充諸如表塊計數,適用的索引塊計數,表基數(估計行數)和相關連線列統計資訊。
特點總結:
1、適用場景:統計資訊缺失或不足時使用
2、優點: 動態取樣可以幫忙最佳化器做出更好的執行計劃選擇
3、缺點: 佔用系統資源。--非常佔用資源
4、做好充足的統計資訊收集,避免動態取樣。
預設情況下,在資料庫中啟用動態取樣。您可以透過設定初始化引數來禁用該功能OPTIMIZER_DYNAMIC_SAMPLING=0。
動態取樣級別控制如何觸發及取樣率。你可以使用OPTIMIZER_DYNAMIC_SAMPLING初始化引數設定動態抽樣率或SQL語句hint。
2、動態取樣級別
3、練習4,最佳化以下語句,消除動態取樣
create table ht.c_cons_ds as select * from ht.c_cons;
查詢語句: select count(1) from ht.c_cons_ds;
set autot traceonly
select count(1) from ht.c_cons_ds;
查詢執行計劃
SQL> set autot traceonly
SQL> select count(1) from ht.c_cons_ds;
Execution Plan
----------------------------------------------------------
Plan hash value: 3975303649
------------------------------------------------------------------------
| Id | Operation
| Name | Rows | Cost (%CPU)| Time |
------------------------------------------------------------------------
| 0 | SELECT STATEMENT |
| 1 | 18
(0)| 00:00:01 |
| 1 | SORT AGGREGATE |
| 1 |
|
|
| 2 | TABLE ACCESS FULL| C_CONS_DS | 10000 | 18
(0)| 00:00:01 |
------------------------------------------------------------------------
Note
-----
-
dynamic sampling used for this statement (level=2)
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
58 consistent gets
0 physical reads
0 redo size
526 bytes sent via SQL*Net to client
523 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
收集統計資訊
exec DBMS_STATS.GATHER_TABLE_STATS(ownname => 'HT',tabname => 'C_CONS_DS',estimate_percent => 100,method_opt => 'for all columns size repeat',no_invalidate => FALSE,degree => 4,cascade => TRUE);
再交查詢執行計劃
Execution Plan
----------------------------------------------------------
Plan hash value: 3975303649
------------------------------------------------------------------------
| Id | Operation
| Name | Rows | Cost (%CPU)| Time |
------------------------------------------------------------------------
| 0 | SELECT STATEMENT |
| 1 | 18
(0)| 00:00:01 |
| 1 | SORT AGGREGATE |
| 1 |
|
|
| 2 | TABLE ACCESS FULL| C_CONS_DS | 10000 | 18
(0)| 00:00:01 |
------------------------------------------------------------------------
Statistics
----------------------------------------------------------
1 recursive calls
0 db block gets
57 consistent gets
0 physical reads
0 redo size
526 bytes sent via SQL*Net to client
523 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
4、小結
1、適用場景:統計資訊缺失或不足時使用
2、優點: 動態取樣可以幫忙最佳化器做出更好的執行計劃選擇
3、缺點: 佔用系統資源。--非常佔用資源
4、做好充足的統計資訊收集,避免動態取樣。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31442014/viewspace-2678255/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 微課sql最佳化(5)、統計資訊收集(3)-關於預設取樣率SQL
- 微課sql最佳化(8)、統計資訊收集(6)-統計資訊查詢SQL
- 微課sql最佳化(3)、統計資訊收集(2)-如何收集統計資訊SQL
- 微課sql最佳化(7)、統計資訊收集(5)-關於直方圖SQL直方圖
- 微課sql最佳化(2)-為什麼需要收集統計資訊SQL
- 臨時表(GLOBAL TEMPORARY TABLE)及統計資訊收集,動態取樣
- 關於oracle自動收集統計資訊Oracle
- [Oracle] Oracle收集統計資訊的取樣比例Oracle
- 微課sql最佳化(10)、關於資料訪問方法SQL
- 微課sql最佳化(9)、如何獲取執行計劃SQL
- 對於沒有任何統計資訊的表,ORACLE可能會動態取樣。Oracle
- 微課sql最佳化(4)、幫助“表姐”最佳化報表SQL
- 微課sql最佳化(15)、表的連線方法(4)-關於Hash Join(雜湊連線)SQL
- 6 收集資料庫統計資訊資料庫
- 【sql調優】動態取樣SQL
- 關閉特定物件統計資訊自動收集物件
- CBO與動態統計量取樣
- 【YashanDB知識庫】收集分割槽表統計資訊取樣率小於1導致SQL執行計劃走偏SQL
- Oracle統計資訊自動收集Oracle
- 關於ORACLE自動統計CBO統計資訊Oracle
- 微課sql最佳化(11) 、如何檢視執行計劃SQL
- Oracle11g 統計資訊-----統計資訊自動收集任務Oracle
- Oracle11g 統計資訊——統計資訊自動收集任務Oracle
- 關於ORACLE自動統計CBO統計資訊[轉帖]Oracle
- 如何找出使用動態取樣的SQLSQL
- 微課sql最佳化(16)、表的連線方法(5)-關於Merge Join(排序合連線)SQL排序
- Oracle收集統計資訊Oracle
- Oracle 統計資訊收集Oracle
- 收集oracle統計資訊Oracle
- ORACLE 收集統計資訊Oracle
- 微課sql最佳化(1)、基礎概念介紹SQL
- 收集統計資訊的SQL指令碼(sosi.sql)--崔華大師SQL指令碼
- ORACLE 11g 自動收集統計資訊Oracle
- 微課sql最佳化(14)、表的連線方法(3)-關於Nested Loops Join(巢狀迴圈)SQLOOP巢狀
- 微課sql最佳化(17)、不改程式碼,最佳化SQL(1)-最佳化方法總結SQL
- 【統計資訊】Oracle常用的收集統計資訊方式Oracle
- 如何檢視哪些SQL使用了動態取樣?SQL
- [統計資訊系列7] Oracle 11g的自動統計資訊收集Oracle