Oracle 11.2.0.1 Result Cache 測試 - 11 各種場景測試結果

tolywang發表於2015-02-11
測試2:  
上面的測試是修改的資料涉及了查詢語句返回的結果集,如果表中更新的資料和SQL查詢的結果集沒有交集。結果又是如何的呢 ?  比如
SQL> update apps.test_result_cache set  object_name = 'TEST_R_C_003' where mod(object_id,3)=0 ;  
由於篇幅原因,這裡不將測試過程貼出。只給出測試結果:  這種情況下不能命中result cache, 會在shared pool 的result cache區域重新建立新的result cache . 
備註: 測試1,2 場景是都在一個session中。

測試3: 
如果表中更新的資料和SQL查詢的結果集沒有交集。更新在同一個session執行, 更新後不提交,結果又是如何的呢 ? 過程略。

結果有些詭異,統計資訊顯示,肯定是沒有命中result cache的,且沒有建立新的result cache.  這說明如果同一session在表上還有更新但是沒有提交的資料, 那麼這個session上對錶上的查詢沒有辦法放到 result cache中 (既不會使用到,也不會重新建立result cache)。 

但是執行計劃中還是顯示了 RESULT CACHE , 又是怎麼回事呢 ? 

再次執行此SQL語句,可以看到執行計劃還是不變。仍然存在 7148  consistent gets 。 充分說明了以上結論:表中如果有記錄被更新,不管是否與查詢結果集有關,如果同一個session中有關於這個表的沒有提交的事務,那麼此表上的其他查詢結果集都不會存放在 result cache中。

測試4 : 
如果表中更新的資料和SQL查詢的結果集沒有交集。但更新在不同session執行, 更新後不提交,結果又是如何的呢 ? 過程略。
測試發現select查詢可以使用到result cache .  

測試5 : 
如果表中更新的資料和SQL查詢的結果集有交集。更新在不同session執行, 更新後不提交,結果又是如何的呢 ?
測試發現select查詢可以使用到result cache .  

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-1433579/,如需轉載,請註明出處,否則將追究法律責任。

相關文章