【每日一摩斯】-Shared Pool優化和Library Cache Latch衝突優化 (1523934.1)-系列2
下面來談一談系列1中講到的Literal SQL和Shared SQL的比較。
首先是Literal SQL:
在有完整的統計資訊並且SQL語句在predicate(限定條件)中使用具體值時,基於成本的優化器 (CBO)能工作的最好。比較下面
的語句:
和
對於第一個語句,CBO可以使用已經收集的histogram來判斷是否使用全表掃描比使用TOTAL_COST列上索引掃描快(假設有索
引的話)。第二個語句CBO並不知道繫結變數":bindA"對應行數的比例,因為該繫結變數沒有一個具體的值以確定執行計劃。
例:":bindA" 可以是 0.0或者99999999999999999.9。
Orders表上兩個不同的執行路徑的響應時間可能會不同,所以當你需要CBO為你選出最好的執行計劃的時候,選用使用literal語句
會更好。在一個典型的Decision Support Systems(決策支援系統)中,重複執行'標準'語句的時候非常少,所以共享一個語句的
機率很小,而且花在Parse上的CPU時間只佔每個語句執行時間的非常小一部分,所以更重要的是給optimizer儘可能詳細的信
息,而不是縮短解析時間。
這裡補充一下,這要說的其實是繫結變數窺探對執行計劃的影響,繫結變數窺探只在第一次SQL執行硬解析時才會建立,即使後
面資料量有了明顯的改變,但仍舊使用原來的執行計劃,這就可能產生查詢效率的問題,所以繫結變數不是任何時候都會起到好
的作用,需要具體問題具體分析。
Shared SQL:
如果應用使用了literal (無共享) SQL,則會嚴重限制可擴充套件性和生產能力。在對CPU的需求、library cache和shared pool latch的
獲取和釋放次數方面,新SQL語句的parse成本很高。(補充:因為之前說過,這裡會有latch持有的等待。)
比如:僅僅parse一個簡單的語句就可能需要獲取和釋放library cache latch 20或者30次。
除非它是一個臨時的或者不常用的SQL,並且需要讓CBO得到儘可能多的資訊來生成一個好的執行計劃,否則最好讓所有的SQL
是共享的。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7192724/viewspace-772345/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【每日一摩斯】-Shared Pool優化和Library Cache Latch衝突優化 (1523934.1)-系列6優化
- 【每日一摩斯】-Shared Pool優化和Library Cache Latch衝突優化 (1523934.1)-系列5優化
- 【每日一摩斯】-Shared Pool優化和Library Cache Latch衝突優化 (1523934.1)-系列4優化
- 【每日一摩斯】-Shared Pool優化和Library Cache Latch衝突優化 (1523934.1)-系列3優化
- 【每日一摩斯】-Shared Pool優化和Library Cache Latch衝突優化 (1523934.1)-系列1優化
- Shared Pool優化和Library Cache Latch衝突優化優化
- 故障排除:Shared Pool優化和Library Cache Latch衝突優化優化
- 優化Shared Pool Latch與Library Cache Latch競爭優化
- shared pool library cache latch 競爭優化辦法優化
- oracle優化--shared_pool (2)Oracle優化
- 共享池之六:shared pool latch/ library cache latch /lock pin 簡介
- oracle優化--shared_pool (3)Oracle優化
- oracle優化--shared_pool (1)Oracle優化
- 深入理解shared pool共享池之library cache系列一
- latch:cache buffers chains的優化思路AI優化
- 深入理解shared pool共享池之library cache的library cache lock系列四
- 深入理解shared pool共享池之library cache的library cache pin系列三
- 深入理解shared pool共享池之library cache系列二
- oracle latch優化Oracle優化
- 等待模擬-library cache shared pool 硬解析
- latch:shared pool的一點理解
- Shared pool的library cache lock/pin及硬解析
- 共享池的調整與優化(Shared pool Tuning)優化
- Oracle Latch及latch衝突Oracle
- shared pool之三:library cache結構/library cache object的結構-dump LibraryHandleObject
- Flush an Object Out The Library Cache [SGA] Using The DBMS_SHARED_POOLObject
- 深入理解shared pool共享池空間及library cache分配之ora-4031 系列一
- Oracle效能優化--Latch介紹Oracle優化
- [20210520]11g shared pool latch與library cache mutex的簡單探究.txtMutex
- [20210521]11g shared pool latch與library cache mutex的簡單探究4.txtMutex
- 首屏優化系列(一)優化
- Buffer cache 的調整與優化(一)優化
- latch:library cache lock等待事件事件
- cbc latch或cache buffer chains latch系列一AI
- 轉_診斷latch:shared pool等待事件事件
- [20210520]11g shared pool latch與library cache mutex的簡單探究3.txtMutex
- webpack系列-優化Web優化
- ORACLE SQL效能優化系列 (一)OracleSQL優化