只對某個特定的SQL語句開啟10046 trace

來源:互聯網
上載者:User

只對某個特定的SQL語句開啟10046 trace

最近碰到了這樣一個有趣的問題: 有一條SQL語句,大部分時間它的執行時間是幾十個毫秒; 但是偶爾某次的執行時間會長於2秒鐘。因為應用對這個語句的執行時間非常的敏感,我們必須診斷是因為什麼原因導致它偶爾執行時間長於2秒。

這個問題為什麼會有挑戰性呢?因為我們很難收集慢的時候的10046 trace:首先我們不知道這個問題什麼時候會發生,也不知道會在哪個session裡發生。如果對所有的session全天開啟10046 trace, 會產生很多比較大的trace並影響資料庫整體的效能。

好在這個資料庫是11g的,在11g中event++的特性允許我們只對某個特定的SQL收集10046 trace. 即在運行這條SQL時開啟10046 trace,在這條SQL運行完之後關閉10046 trace.這樣可以顯著的降低產生的trace的大小。但是因為我們無法確定哪個session會產生問題,所以只要運行過這個SQL的session都會產生一個trace檔案。

開啟的步驟是(要把下面的awsh60c8mpfu1替換成那條SQL的SQL_ID):

alter system set events 'sql_trace [sql: awsh60c8mpfu1] level 12';

而關閉的步驟是(要把下面的awsh60c8mpfu1替換成那條SQL的SQL_ID):

alter system set events 'sql_trace [sql: awsh60c8mpfu1] off';

在收集到很多10046 trace,並使用tkprof格式化後(需指定AGGREGATE=NO,這樣tkprof會對每一次執行都產生匯總報告),我們最後定位到了問題發生時SQL語句讀取物理塊時花費了更多的時間。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.