Adaptive Cursor Sharing
先說說為什麼要搞出Adaptive Cursor Sharing這麼個東西。
11G以前一直存在一個問題,就是SQL在第一次硬解析的時候,最佳化器會窺探繫結變數的值,根據這個值來生成執行計劃。其實對於資料均勻分佈的情況來說,這個窺探也沒啥大問題,之所以說沒啥大問題,其實還是有我問題,我有點羅嗦了,那是因為範圍查詢的話情況就不一樣了,即使你的單個值沒傾斜分佈,但是範圍來說,也可能存在資料傾斜。比如你的id欄位最小值是1,最大值是1W,但是從2-9000都是沒有值的,那麼這樣的情況,如果你對id進行範圍查詢,也會涉及到執行計劃依賴於你傳輸的繫結變數。由於11G以前,在第一次窺探玩繫結變數後,執行計劃就產生在共享池裡了,後續的同樣的SQL都會使用這個執行計劃,而不去管傳入的值到底是什麼,現在的執行計劃是不適合這個變數值。
我很早就思考過這個問題,要解決這個問題,面臨幾個要解決的難題:
1)既然他們的執行計劃對繫結變數敏感,那麼就對有直方圖的列,每次都窺探他的值,如果執行計劃有變化,那麼就新生成一個執行計劃
2)上面的如果可行,那麼問題來了,現在對於這個SQL有2個執行計劃了,可是對於後續的SQL也還是每次都要去窺探繫結變數的值,然後生成執行計劃跟現有的比,還是有什麼巧妙的辦法?ORACLE搞了一個基數的概念出來,也就是v$sql_cs_selectivity 這個試圖內記錄的內容。對每個有資料傾斜的列計算一個選擇率出來,只要在某個選擇率範圍內的,就可以直接複用這個執行計劃。比如id=1執行計劃走了索引,選擇率是0.1,id=2經過計算也走了索引,選擇率是0.5,那麼後續來的所有SQL,經過計算後,只要選擇率在0.1-0.5之間的,都可以直接複用這個執行計劃。
上面的想法貌似不錯,但是存在一些問題:
1)每次都要對SQL裡涉及到直方圖的列,都要去窺探它的繫結變數,計算選擇率,代價還是比較高啊。其實對於大多數的列,即使存在直方圖,他們的執行計劃也是一樣的。為了解決這個問題,ORACLE設計出來了is_bind_sensitive,v$sql_cs_histogram 兩個東東,第一個值代表了這個值對於繫結變數是否敏感的,第二個檢視的作用,主要是用在如果由於這個列上的值的不同,導致結果集大範圍波動的,就在這個檢視的相關條目裡標記。
-----未完,待續
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22034023/viewspace-762834/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Adaptive Cursor Sharing(第二篇)APT
- Adaptive Cursor Sharing(第三篇)APT
- Adaptive Cursor Sharing(第四篇)APT
- Adaptive Cursor Sharing(第五篇)APT
- Adaptive Cursor Sharing (第一篇)APT
- Adaptive Cursor Sharing: Worked Example (Doc ID 836256.1)APT
- 11G Adaptive Cursor Sharing(ACS)的研究APT
- 優化器革命之- adaptive cursor sharing (三)優化APT
- 優化器革命之- adaptive cursor sharing (二)優化APT
- 11GR1 新特性 adaptive cursor sharingAPT
- 最佳化器革命之- adaptive cursor sharing (三)APT
- 最佳化器革命之- adaptive cursor sharing (四)APT
- 11G Adaptive Cursor Sharing(ACS)的研究 (轉)APT
- 驗證11g的adaptive cursor sharing功能APT
- Oracle自適應共享遊標——Adaptive Cursor Sharing(上)OracleAPT
- Oracle自適應共享遊標——Adaptive Cursor Sharing(下)OracleAPT
- [20120327]Adaptive Cursor Sharing 的問題APT
- 11gR2 新特性之(一)Adaptive Cursor Sharing(ACS)APT
- 揭秘自適應遊標共享技術(Adaptive Cursor Sharing)APT
- Oracle 11g SQL效能的新特性(一)- Adaptive Cursor SharingOracleSQLAPT
- 揭祕自適應遊標共享技術(Adaptive Cursor Sharing)APT
- [20221227]Adaptive Cursor Sharing & 直方圖.txtAPT直方圖
- 繫結變數之自適應遊標共享(Adaptive Cursor Sharing)變數APT
- 11G Adaptive Cursor Sharing(ACS)自適應遊標測試APT
- 繫結變數的正確使用,bind peeking,Adaptive Cursor Sharing變數APT
- 【DBA】Oracle 11g 針對SQL效能的新特性(一)- Adaptive Cursor SharingOracleSQLAPT
- V$SQL_遊標、adaptive cursor sharing、bind peeking、直方圖的概念SQLAPT直方圖
- oracle11g中SQL最佳化新特性之Adaptive Cursor Sharing (ACS)OracleSQLAPT
- [20120220]Adaptive Cursor Sharing 與hints.txtAPT
- CURSOR_SHARING=SIMILARMILA
- Postgresql的CURSOR SHARINGSQL
- oracle cursor_sharing [轉]Oracle
- 關於 cursor_sharing = similarMILA
- oracle引數-cursor_sharingOracle
- cursor_sharing=similar深度剖析MILA
- cursor_sharing : exact , force , similarMILA
- 關於cursor_sharing=similarMILA
- 關於cursor_sharing = similar(ZT)MILA