糾正了一直的理解誤區
還是接著前天的關於執行計劃觸發bug的研究:
前天說了可以嘗試重新收集統計資訊,重新建立表等方式進行對語句執行計劃的修改。
今天說幹就幹,執行
EXEC DBMS_STATS.gather_table_stats(ownname => 'AUTOCLAIM',tabname => UPPER('lp_flow_state'),estimate_percent => 80,method_opt=> 'for all indexed columns',cascade=>true,degree => 2);
以及其他幾個表的統計資訊一併重新收集了下,但是發現執行計劃仍然沒有變(透過toad檢視執行計劃的方式檢視)
更鬱悶的是,居然在v$sql_plan中無法查詢到對應的語句。
怎麼回事呢?不是說對語句中的物件做個ddl ;重新收集統計資訊就可以重新生成執行計劃嗎?難道是這個執行計劃真是最優的?
但從實際角度看,肯定是不對的。找動態檢視沒有查詢到這個資訊就更怪了。
難道我的理論存在一個很大的錯誤?原來我一直認為檢視執行計劃後,在共享池就存在執行計劃了。
如果是非要語句執行後,才會產生執行計劃到共享池,那麼我遇到的問題就不是問題,而且糾正了我一直存在的理解誤差。
那麼來進行一下驗證:
select * from t1;(只檢視執行計劃)
select * from v$sql where sql_text like 'select * from t1%'
----沒有結果
select * from t1;(實際執行)
select * from v$sql where sql_text like 'select * from t1%'
----存在結果。
簡單的測試,就糾正了原來存在的誤差。
帶來一個新問題,如果我們現在發現語句執行計劃由於繫結變數最初帶入的變數值存在嚴重的問題,想清除掉這個執行計劃。讓它在帶入合適的繫結變數進行執行計劃的生成?
檢視網路上的資訊,棉花糖的一篇文章給了一些幫助。
select * from v$sql where sql_text like 'select * from t1%'
----查出sql地址和hash_value
exec sys.dbms_shared_pool.purge('0700000A0D2C7DC8,1468955422','C'); ---前面是地址,後面是hash_value
檢視 select * from v$sql where sql_text like 'select * from t1%'
仍然存在記錄。
原來還要設定一個事件才可以觸發:
alter session set events '5614566 trace name context forever';
再執行exec sys.dbms_shared_pool.purge('0700000A0D2C7DC8,1468955422','C');
select * from v$sql where sql_text like 'select * from t1%'
不存在記錄,操作生效了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/288166/viewspace-706304/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 對DevOps的九大誤解,是時候糾正了!dev
- 糾正對“用正確的工具幹活兒”這句話的誤解
- 一直都沒有理解perl的正則
- 用觸發器返回錯誤提示,糾正錯誤資料錄入觸發器
- 效能測試的理解誤區
- 正確理解 PHP 錯誤資訊(轉)PHP
- Node.js Event Loop 的三大常見理解誤區和正確概念辨析Node.jsOOP
- HACCP原理——糾正措施(轉載)
- 容器的六大理解誤區
- 正確理解PHP程式編譯時的錯誤資訊PHP編譯
- 中介軟體理解和誤區
- 差錯檢測和糾正 (轉)
- 模擬積體電路設計系列部落格——7.1.5 SAR ADC中的錯誤糾正
- 如何檢測異方差並糾正它?
- 剛剛有個群友問我,為什麼我的子執行緒更新了 UI 沒報錯?藉此,糾正一些Android 程式設計師的一個知識誤區執行緒UIAndroid程式設計師
- MSSQL連線資料庫密碼獲取工具與原文數個錯誤糾正SQL資料庫密碼
- 關於量子技術的一些概念糾正
- 如何糾正六西格瑪專案中出現的問題?
- 糾正Linux crontab 命令格式與詳細例子的引用Linux
- java 實現中英文拼寫檢查和錯誤糾正?可我只會寫 CRUD 啊!Java
- Android逆向之旅---反編譯利器Apktool和Jadx原始碼分析以及錯誤糾正Android編譯APK原始碼
- java 英文單詞拼寫糾正框架(Word Checker)Java框架
- 資料庫死鎖排查思路分享(糾正篇)資料庫
- 低程式碼的5個誤區,你踩雷了嗎?
- LongTree的正確分析理解
- SQL Server關於AlwaysOn的理解-讀寫分離的誤區(一)SQLServer
- BCB中用Sender實現程式碼重用(糾正篇) (轉)
- Ceph的正確玩法之Ceph糾刪碼理論與實踐
- JWT?我一直都是這麼理解的......JWT
- 正確理解 PHP 的過載PHP
- 我理解的正規表示式
- JavaScript 中錯誤正確處理方式,你用對了嗎?JavaScript
- 常見的5個區塊鏈應用開發錯誤理解區塊鏈
- 從Immutable來談談對於執行緒安全的理解誤區執行緒
- 理解索引(2)反轉鍵索引的誤區(摘自老白DBA日記)索引
- 99%的人都理解錯了 HTTP 中 GET 與 POST 的區別HTTP
- 99%的人都理解錯了HTTP中GET與POST的區別HTTP
- Promise 的誤區Promise