1. 程式人生 > >Oracle定位執行執行太多次數SQL源頭

Oracle定位執行執行太多次數SQL源頭

    資料出現一條SQL4個小時執行了近5萬次,消耗的CPU比較多。是一個讀取配置項的SQL,這是一條通用的SQL,很多功能都會用到。由於使用了繫結變數,無法知道是哪個功能引起的,如何定位呢?

  select snap_id,
       dbms_sqltune.extract_bind(bind_data, 1) .value_string bind1,
       dbms_sqltune.extract_bind(bind_data, 2) .value_string bind2,
       dbms_sqltune.extract_bind(bind_data, 3) .value_string bind3
  from dba_hist_sqlstat
 where sql_id = '...'
 order by snap_id;

   這樣就定位到問題了。瞭解功能發現是響應每個請求都會讀取一次,這顯然不是好的設計。在配置項的讀取方面我們有兩種需求:

   1.從功能實時性上,希望配置項改變之後,不重啟系統,馬上生效。

   2.從效能上,希望讀配置項少一點。

   兩種需求要取平衡,魚與熊掌不可兼得。有人可能會說,為什麼不用熱載入,當weblogic是一個的時候是可以的,當有幾百個,就沒法做了。