通過鎖定表的統計資訊來穩定sql的執行計劃
問題提出:
兩個表的關聯查詢,一個表資料量在千萬,一個表資料量只有幾條(參數列),大表是按時間進行的分割槽表,而且時間欄位上還建有分割槽索引。剛開始,執行計劃是正確的,但是後來卻發現兩個表的關聯不是走分割槽表的索引,而是直接掃描整個分割槽,有點費解。
瞭解業務後發現,參數列中有兩個欄位,一個是起始時間,一個是終止時間,這兩個時間間隔一般在10分鐘。每過一段時間,將拿參數列中的時間出來,然後根據時間段去大表中查詢這段時間內進行的業務。大表每天新增資料在20萬左右,10天一個分割槽,小表資料量不變,變的只是裡面的開始和結束時間,但結束-開始基本都在10分鐘左右。
因此應該是oracle不知道小表中的開始和結束時間的具體值,所以它不能使用這個值去進行成本估算,因此覺得掃描索引再從表讀取資料還沒有直接全掃描分割槽來的快。於是對錶的column值進行分析,讓oracle能知道其中的值的分佈。analyze table tab compute statistics for column,執行上面分析後,再來檢視執行計劃,分割槽掃描變成了讀取索引了,而且查詢速度也提升不少。可是小表的資料是隨時間頻繁變化的,而且oracle會自動收集表的統計資訊,導致執行計劃再次出現問題。看了半天STORED OUTLINES也沒整大明白怎麼來固定一個sql的執行計劃,而且動作比較大。
採用鎖定統計資訊的方法,呼叫dbms_stats.lock_table_stats包,把小表統計資訊鎖定,問題得到解決。
總結:在10G中,oracle會自動收集表的統計資訊,大部分情況下,這種行為是有利的,不需要對某個表做收集的時候,可以採用鎖定統計資訊的方法,把不需要收集的表排除在外,使得此表上的sql的執行計劃得到穩定。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25016/viewspace-927548/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL——通過EXPLAIN分析SQL的執行計劃MySqlAI
- 【PG執行計劃】Postgresql資料庫執行計劃統計資訊簡述SQL資料庫
- 【TUNE_ORACLE】定製化執行計劃SQL參考OracleSQL
- 穩定PG SQL的執行速度SQL
- SQLServer統計監控SQL執行計劃突變的方法SQLServer
- ORACLE analyse table方式收集表統計資訊導致SQL執行計劃不準確而效能下降OracleSQL
- Oracle sql執行計劃OracleSQL
- 如何檢視SQL的執行計劃SQL
- 為何你的系統不能穩定執行?
- Oracle優化案例-統計資訊對執行計劃的影響(十三)Oracle優化
- 執行計劃-2:檢視更多的資訊
- Oracle SQL Profile固定執行計劃的方法OracleSQL
- Oracle 通過註釋改變執行計劃Oracle
- Oracle資料庫關於SQL的執行計劃(轉)Oracle資料庫SQL
- ORA-38029: 物件統計資訊已鎖定處理物件
- 透過Python進行MySQL表資訊統計PythonMySql
- 【YashanDB知識庫】收集分割槽表統計資訊取樣率小於1導致SQL執行計劃走偏SQL
- 通過 Redis 定時執行指令碼Redis指令碼
- Java的通過管道來實現執行緒通訊Java執行緒
- 【TUNE_ORACLE】定製化收集統計資訊SQL參考OracleSQL
- 分析執行計劃優化SQLORACLE的執行計劃(轉)優化SQLOracle
- 【譯】 Dart 2.12 釋出,穩定空安全宣告和FFI版本,Dart 未來的計劃Dart
- SQL執行計劃異常引起的效能問題SQL
- SQL執行計劃異常 引起的效能問題SQL
- 達夢資料庫獲取SQL真實的執行計劃資料庫SQL
- 【執行計劃】Oracle獲取執行計劃的幾種方法Oracle
- 來自靈魂的拷問——知道什麼是SQL執行計劃嗎?SQL
- 歐盟委員會:2021年穩定與融合計劃
- MySql中執行計劃如何來的——Optimizer TraceMySql
- Oracle資料遷移後由列的直方圖統計資訊引起的執行計劃異常Oracle直方圖
- 執行計劃-1:獲取執行計劃
- 保障爬蟲穩定執行的四種方法爬蟲
- Oracle - 執行過的SQL、正在執行的SQL、消耗資源最多的SQLOracleSQL
- Oracle當number型別超過一定長度直方圖限制導致SQL執行計劃錯誤Oracle型別直方圖SQL
- 檢視SQL執行計劃的幾種常用方法YQSQL
- 在MySQL中使用explain查詢SQL的執行計劃MySqlAI
- Oracle檢視sql_id 的歷史執行計劃OracleSQL
- 達夢資料庫SQL執行計劃檢視方法資料庫SQL