如何解決預存程序中關聯暫存資料表時快時慢的情況,預存程序時快時慢

來源:互聯網
上載者:User

如何解決預存程序中關聯暫存資料表時快時慢的情況,預存程序時快時慢

     調用一個預存程序,同樣的條件,資料庫負載也是正常的情況下,時快時慢。原因是資料庫無法擷取暫存資料表的統計資訊,導致執行計畫會走錯。之前寫過一個文章,被暫存資料表坑了,http://blog.csdn.net/stevendbaguo/article/details/39964807,就是用hint/*+ dynamic_sampling(T 10) */來做動態採集,這種解決方案實踐證明還是沒有很好的解決問題,出現時快時慢的幾率只是小了一點。

     最優的解決方案是什麼呢?

     一般我們會選擇事務型的暫存資料表,如果你用的是oracle 12c,恭喜你,插入暫存資料表後,直接收集統計資訊即可,dbms_stats.gather_table_stats是不會提交事務的。

如果是11g及以下的資料庫,會提交事務,表會被清空。

     那換成基於會話的暫存資料表,也有問題,weblogic串連池中的session是不會釋放的,暫存資料表的資料會不斷累積。

     最終的解決方案是:用基於會話的統計資訊,向暫存資料表中插入資料後,緊接著收集統計資訊,在預存程序的末尾truncate表。

相關文章

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.