SQL 調優一般思路
一般來說,調優的第一手資料中,如何根據報告來判斷是哪些SQL消耗了最多的系統資源?哪些SQL是最需要調整的呢?這裡給出了一個大致的最佳化思路。
一般來說,需要關注下面四種Top SQL
- 消耗最多CPU的(邏輯IO過多)
- 導致過多物理I/O的
- 執行次數較頻繁的
- 執行時間較長的
我們知道,一個語句的響應時間有個很著名的公式:
響應時間=服務時間+等待時間
其中服務時間就是CPU為執行該語句花費的時間。
服務時間=分析時間+遞迴時間+執行時間
分析時間是CPU用於分析語句的時間,遞迴時間是CPU用於語句的遞迴SQL的時間,剩下的則就是CPU用於執行語句的真正時間了。
那麼,上面的這些時間資訊從哪裡來的?Oracle提供的系統統計資訊中就有部分的時間統計資訊:
- 服務時間=CPU used by this session
- 分析時間=parse time cpu
- 遞迴時間=recursive cpu usage
那麼,執行時間就可以根據上面三個統計資訊計算得出:
執行時間=CPU used by this session – parse time cpu – recursive cpu usage
- 如果執行時間在整個響應時間中佔較大的比例,那麼下一步就是找出那些造成了最多邏輯IO的SQL語句,可以從statspack報告的SQL ordered by Gets部分找到。
- 如果分析時間在整個響應時間中佔較大的比例,那麼下一步就是查詢哪些SQL分析過多,這在statspack報告中在SQL ordered by Parse Calls中列出。
- 如果等待時間在整個響應時間中佔較大的比例,並且主要是塊讀取相關的等待時,下一步就是找出哪些SQL造成了過多的物理讀,可以檢視statspack報告中的SQL ordered by Reads部分。
那麼,根據上面列出的一個簡單的原則,我們需要關注三個關於CPU時間的統計資訊: CPU used by this session, parse time cpu和recursive cpu usage,以及top5等待事件中和IO相關的等待時間。如果是其他的一些等待事件出現在Top5中,那麼可能需要根據不同的等待事件來分析原因了。然後優先調優時間消耗最多的相關SQL。
除了上面的SQL ordered by Gets(邏輯IO最多),SQL ordered by Parse Calls(軟解析過多),SQL ordered by Reads(物理IO過多),statspack還按照其他的一些方式列出了Top SQL,這些Top SQL在某些情況下都是需要給予特別關注的。比如:
SQL ordered by Executions 執行次數超過100的
SQL ordered by Sharable Memory 佔用library cache超過1M的
SQL ordered by Version Count 子cursor超過20的
如果沒有statspack,那麼根據v$sysstat/v$sesstat中的統計資訊,結合v$sql/v$sqlarea,一樣可以得到相關的SQL。
v$sql對於每一個子cursor都有一行統計記錄,而v$sqlarea則對同一個父cursor只有一行統計記錄,也就是v$sqlarea是對v$sql按照父cursor進行group by後的一個結果。這兩個檢視中都有諸如buffer_gets,parse_calls,disk_reads,,executions,sharable_mem等列,和報告列出Top SQL的條件對應。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/20674423/viewspace-2701902/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 慢Sql優化思路SQL優化
- SQL調優SQL
- 主從延遲調優思路
- sql調優1SQL
- oracle sql調優OracleSQL
- SQL優化例項-思路分析SQL優化
- MySQL調優篇 | SQL調優實戰(5)MySql
- Oracle調優---調整優化器行為的一般性原則Oracle優化
- Teradata SQL調優SQL
- MindSpore模型精度調優實戰:常用的定位精度除錯調優思路模型除錯
- MySQL索引和SQL調優MySql索引
- SQL調優真實案例SQL
- SQL效能調優綜述SQL
- [精華zt] SQL調優整理SQL
- SQL Server一次SQL調優案例SQLServer
- 【sql調優】動態取樣SQL
- 一條大sql的調優SQL
- 效能調優——SQL最佳化SQL
- Oracle SQL調優系列之SQL Monitor ReportOracleSQL
- Linux效能調優從最佳化思路說起Linux
- MySQL 索引和 SQL 調優總結MySql索引
- Oracle SQL調優之分割槽表OracleSQL
- SQL調優13連問,收藏好!SQL
- delete相關的pl/sql調優deleteSQL
- 使用hint來調優sql語句SQL
- SQL Server效能調優札記 [zt]SQLServer
- 【sql調優】系統資訊統計SQL
- 我如何調優SQL Server查詢SQLServer
- SQL調優公式T=S/V (zt)SQL公式
- 記一次SQL Server刪除SQL調優SQLServer
- 通過IP定位區域的SQL優化思路SQL優化
- SQL優化思路&結果集重用優化、分割槽索引優化測試SQL優化索引
- 處理高併發的一般思路
- K-th 問題的一般思路
- Sql最佳化(十九) 調優工具(2)sql_traceSQL
- 使用SQL調整顧問得到SQL優化建議SQL優化
- 你們一般都是怎麼進行SQL調優的?MySQL在執行時是如何選擇索引的?MySql索引
- oracle筆記整理13——效能調優之SQL優化Oracle筆記SQL優化