DBA手記 - optimizer_mode影響一個SQL語句是否可以執行
今天現場人員報告說:同樣的資料,同樣的SQL,在一個產品資料庫中可以執行,但是在測試資料庫中總是報錯。
檢查步驟如下:
1。在兩個資料庫中分別執行SQL,驗證是否如現場人員報告的情況,結果屬實。
2。檢視SQL語句,瞭解SQL的含義,此時發現該SQL編寫不太理想,改寫以後在兩個資料庫中都執行正常,不過這是其它的問題,此處不表
3。檢查在兩個庫中,該SQL的執行計劃是否相同,結果不同。
4。檢查兩個庫的版本是否相同,結果相同。
5。檢查兩個庫中的最佳化模式是否相同,結果不同,此時用alter session修改執行報錯的那個資料庫的最佳化模式,再次檢視執行計劃,發現已經相同了,再次執行SQL,發現可以正常執行。
6。對於此案例,到上面第5步已經可以結束了,如果第5步中發現最佳化模式相同,那麼這步就繼續可以檢視兩個庫中兩張表的統計資訊是否不同
7。如果第6步中還是相同,那麼繼續檢查其它最佳化相關的引數,比如optimizer_index_cost_adj等
8。如果還相同,那麼去查metalink,google,通常可以發現這是一個oracle的bug,確認自己的情況是否屬於這個bug。。。
上面是發現一個問題時候我個人的大致處理方法,也許可以給newbies一些幫助。
連結:http://blog.csdn.net/kamus/archive/2005/02/01/276535.aspx
連結:http://blog.csdn.net/kamus/archive/2005/02/01/276535.aspx
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23650854/viewspace-691627/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux判斷上一個語句是否執行成功Linux
- sql語句如何執行的SQL
- SQL語句執行順序SQL
- 一條sql語句的執行過程SQL
- sqlserver dba常用的sql語句SQLServer
- 一個 MySQL sql 語句執行順序帶來的 bugMySql
- 一條SQL更新語句是如何執行的?SQL
- 一條SQL更新語句是如何執行的SQL
- 一條update SQL語句是如何執行的SQL
- Mybatis 動態執行SQL語句MyBatisSQL
- 後臺執行SQL語句(oracle)SQLOracle
- mysql執行sql語句過程MySql
- sql語句執行緩慢分析SQL
- mysql的sql語句執行流程MySql
- SQL 語句的執行順序SQL
- 給隔壁的妹子講『一個SQL語句是如何執行的?』SQL
- postgresql dba常用sql查詢語句SQL
- c# 實現定義一套中間SQL可以跨庫執行的SQL語句C#SQL
- 一條 SQL 查詢語句是如何執行的?SQL
- 一條更新的SQL語句是如何執行的?SQL
- 一條SQL語句在MySQL中如何執行的MySql
- java連線oracle執行sql語句JavaOracleSQL
- Laravel 獲取執行的sql語句LaravelSQL
- MySQL cron定時執行SQL語句MySql
- 記一個實用的sql查詢語句SQL
- SQL Server 查詢歷史執行的SQL語句SQLServer
- 一條 SQL 語句在 MySQL 中是如何執行的?MySql
- 執行一條 SQL 語句,期間發生了什麼?SQL
- 執行一條sql語句都經歷了什麼?SQL
- 一條sql語句在mysql中是如何執行的MySql
- 查詢Oracle正在執行的sql語句及執行該語句的使用者OracleSQL
- MySQL 記錄所有執行了的 sql 語句MySql
- Mybatis原始碼解析之執行SQL語句MyBatis原始碼SQL
- Laravel 框架查詢執行的 SQL 語句Laravel框架SQL
- [20181119]sql語句執行緩慢分析.txtSQL
- SQL語句各子句的執行順序SQL
- mysql sql語句執行超時設定MySql
- MySQL語句執行分析(一)MySql
- Oracle執行語句跟蹤 使用sql trace實現語句追蹤OracleSQL