管好統計資訊,開啟SQL優化之門
轉載宣告: DBA+社群(dbaplus)。http://dbaplus.cn/news-10-108-1.html
在DBA的工作中,SQL優化的工作量佔工作很大的一塊,我們在平時工作中也是這樣,常常遇到一些執行效率低下的SQL語句,而這些執行效率低下的SQL,有的是業務系統剛剛上線的,有的是已經執行很久但因為執行環境變化而導致出現的。這裡給大家分享一個SQL的優化案例分析。
根據我們監控系統,發現線上OLTP的一個核心業務資料庫中有一條SQL執行效率較慢。慢到什麼程度?半小時執行278次,平均每次28秒,佔用整個DB資源的56%。OLTP系統中,實在太慢了。
這裡是SQL執行的相關資訊。
SQL優化中,有很多人總是第一要看的就是執行計劃,那麼我們就看看這條SQL的執行計劃。下面可以看到單次執行3秒左右,成本為2,consistent gets較高,執行計劃中也是走INDEX RANGE SCAN。
其實單看上面的執行計劃Cost還是比較低的,SQL優化中,有很多人總是第一要看的就是執行計劃,但是看執行計劃一定要結合結構資訊,這裡的結構資訊就是表,索引等結構資訊及資料分佈資訊。
我們先看SQL語句吧。以下SQL語句很簡單,且在cn欄位,c_date欄位上都建有索引。
表資料量約有3.6億資料。
在以上執行計劃的基礎上,根據對業務的理解,我的疑問是為什麼不走cn索引?
這裡其實可以根據謂詞條件,各自查詢 一下就能看到結果,根據cn查詢到3條,而c_date條件查詢出76w。走cn索引才對。
這裡也可以使用HINT強制走cn索引看一下效果,使用HINT強制走cn索引後執行時間變為毫秒級。
SQL優化除了瞭解結構資訊(表,索引),統計資訊的準確性也很關鍵。
這裡發現最後統計資訊分析時間是5月份,相差了3個多月,所以統計資訊是不正確的。
統計資訊不準確的原因?
最終發現Oracle在10g版本中預設的GATHER_STATS_JOB沒有啟動,這裡啟動預設的GATHER_STATS_JOB,並單獨收集一下表的統計資訊。
收集完統計資訊,這條SQL的執行時間下降到毫秒級別,執行計劃已經變為IDX_REC_LOG_CN索引的RANGE SACN,consistent gets從原來的19409 降低到了7。效果還是很明顯。
同樣的SQL又慢了,現在的執行計劃, 又開始走IDX_C_LOG_DATE索引了,而且執行時間又回到了2秒, consistent gets變為10404。以下為執行計劃:
同樣我們還是先檢查統計資訊是否正確,這裡可以看到了統計資訊又不正確了,但是我們發現GATHER_STATS_JOB每天都能執行成功。這是為什麼?
解決方法就是定義一個單表收集的JOB。
這也是為什麼大表都單獨定義收集統計資訊的原因,面試過很多的同學,基本上說出直接原因的沒有多少,都說是照著網上這麼做的。
這裡也可以看到相關的10053事件中的成本資訊,具體可以參考以下的地址瞭解每個型別的含義。
最終我們在業務維護時間建立了cn+c_date聯合索引後的執行計劃,至今再無類似的SQL效能問題。
DBA+社群是全中國最大的涵蓋各種資料庫、中介軟體及架構師線條的微信社群!有100+專家發起人,建有15大城市微信群,6大專業產品群,多達10000+跨界DBA加入隊伍。每天1個熱議話題,每週2次線上技術分享,不定期線下聚會與原創專家團乾貨分享,更多精彩,歡迎關注dbaplus微信訂閱號!
掃碼關注
DBAplus社群
超越DBA圈子,連線的不僅僅是DBA
轉載宣告: DBA+社群(dbaplus)。http://dbaplus.cn/news-10-108-1.html
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-1848005/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQL優化之統計資訊和索引SQL優化索引
- IT部門資訊化正確開啟方式
- 微課sql最佳化(3)、統計資訊收集(2)-如何收集統計資訊SQL
- 微課sql最佳化(8)、統計資訊收集(6)-統計資訊查詢SQL
- sql優化之邏輯優化SQL優化
- Microsoft SQL Server 2005中查詢優化器使用的統計資訊二(zt)ROSSQLServer優化
- Microsoft SQL Server 2005中查詢優化器使用的統計資訊一(zt)ROSSQLServer優化
- Microsoft SQL Server 2005中查詢優化器使用的統計資訊三(zt)ROSSQLServer優化
- 【統計資訊】全面檢視錶所有統計資訊SQLSQL
- SQL Server 更新統計資訊SQLServer
- MySQl 配置InnoDB持久化的優化器統計資訊MySql持久化優化
- Oracle SQL優化之sql tuning advisorOracleSQL優化
- SQL優化之limit 1SQL優化MIT
- MySQL之SQL優化技巧MySql優化
- 資料庫優化 - SQL優化資料庫優化SQL
- [20221012]修改統計資訊最佳化sql語句.txtSQL
- Oracle優化案例-擴充套件統計資訊(十四)Oracle優化套件
- VuePress 部落格優化之開啟 HTTPSVue優化HTTP
- VuePress 部落格優化之新增資料統計功能Vue優化
- 【TUNE_ORACLE】定製化收集統計資訊SQL參考OracleSQL
- MySQL之SQL語句優化MySql優化
- 【STATS】Oracle匯入匯出優化器統計資訊Oracle優化
- 【SCRIPT】Oracle統計資訊相關SQLOracleSQL
- 資料庫全量SQL分析與審計系統效能優化之旅資料庫SQL優化
- 資料庫優化SQL資料庫優化SQL
- 十七、Mysql之SQL優化查詢MySql優化
- MySQL之SQL優化詳解(二)MySql優化
- MySQL之SQL優化詳解(三)MySql優化
- MySQL之SQL優化詳解(一)MySql優化
- 【DBMS_STATUS】Oracle控制優化器統計資訊的使用Oracle優化
- VuePress 部落格優化之開啟 Gzip 壓縮Vue優化
- 微課sql最佳化(2)-為什麼需要收集統計資訊SQL
- Android應用優化之冷啟動優化Android優化
- MYSQL資料庫------SQL優化MySql資料庫優化
- Oracle優化案例-統計資訊對執行計劃的影響(十三)Oracle優化
- 神奇的 SQL 之效能優化 → 讓 SQL 飛起來SQL優化
- MySQL 配置InnoDB配置非持久優化器統計資訊引數MySql優化
- 大資料SQL優化之資料傾斜解決案例全集大資料SQL優化
- 《MySQL慢查詢優化》之SQL語句及索引優化MySql優化索引