[20211210]優化遇到的奇怪問題.txt
[20211210]優化遇到的奇怪問題.txt
--//上午優化一條sql語句,遇到一些問題浪費許多時間,直到上午快下班才定位解決,在測試環境做一個小演示,避免在這些細節上犯錯.
1.環境:
SCOTT@book> @ ver1
PORT_STRING VERSION BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx 11.2.0.4.0 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
2.建立測試:
$ cat t1.txt
alter session set statistics_level = all;
set term off
select * from dept where REGEXP_LIKE(dname, '00', '00');
set term on
@ dpc '' ''
--//簡單說明:我們生產系統設定cursor_sharing=force,這樣裡面的常量變成:"SYS_B_03", :"SYS_B_04"之類的.如果寫在where裡面的,
--//可以檢視v$sql_bind_capture檢視獲得.而在select裡面的值無法抓取,我一般選擇'00'字元.
--//我的測試REGEXP_LIKE出現在where中,而我除錯的sql語句REGEXP_LIKE出現在select 裡面.
SCOTT@book> @ t1.txt
Session altered.
PLAN_TABLE_OUTPUT
-------------------------------------
SQL_ID fy92msh4xvx6u, child number 0
-------------------------------------
select * from dept where REGEXP_LIKE(dname, '00', '00')
Plan hash value: 3383998547
----------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows |E-Bytes| Cost (%CPU)| E-Time | A-Rows | A-Time |
----------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | | 3 (100)| | 0 |00:00:00.01 |
|* 1 | TABLE ACCESS FULL| DEPT | 1 | 1 | 20 | 3 (0)| 00:00:01 | 0 |00:00:00.01 |
----------------------------------------------------------------------------------------------------------
Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------
1 - SEL$1 / DEPT@SEL$1
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter( REGEXP_LIKE ("DNAME",'00','00',<not feasible>)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
--//可以發現實際上居然錯誤的執行語句,可以看到執行計劃.由於語句異常中止,我自己測試執行的sql語句非常快返回,而生產系統的語
--//句執行緩慢,非常不好理解.
--//我開始註解一些where條件,最後發現問題在REGEXP_LIKE(dname, '00', '00'),我猜測第3個引數應該是i.
select * from dept where REGEXP_LIKE(dname, '00', 'i');
SCOTT@book> @ t1.txt
Session altered.
PLAN_TABLE_OUTPUT
-------------------------------------
SQL_ID 2qwr8pxwdp0qu, child number 0
-------------------------------------
select * from dept where REGEXP_LIKE(dname, '00', 'i')
Plan hash value: 3383998547
--------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows |E-Bytes| Cost (%CPU)| E-Time | A-Rows | A-Time | Buffers |
--------------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | | 3 (100)| | 0 |00:00:00.01 | 6 |
|* 1 | TABLE ACCESS FULL| DEPT | 1 | 1 | 20 | 3 (0)| 00:00:01 | 0 |00:00:00.01 | 6 |
--------------------------------------------------------------------------------------------------------------------
Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------
1 - SEL$1 / DEPT@SEL$1
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter( REGEXP_LIKE ("DNAME",'00','i',HEXTORAW('50B1FE7B0000000004D90402000000000000000000000000C883D
A060000000000000000000000000000000000000000120000000000000080B1FE7B0000000002000000000000000000000085000000'
) ))
--//oracle過濾條件很奇特,以前沒注意還有第4個引數.
--//再次測試,這樣才能正常還原生產系統遇到的情況.
--//實際上我當時還犯了幾個錯誤,當時註解set term off,執行是沒有仔細看前面的提示,實際上執行語句已經報錯.我自己沒有想到這樣也
--//能看到執行計劃.實際上如果當時執行set echo on,也許就很注意到問題在那裡了.
--//浪費差不多一個小時,做一個記錄,避免以後在這些細節上犯錯.
--//如果當時我開啟set echo on,關閉set term off,這個錯誤很快能發現:
SCOTT@book> @ t1.txt
SCOTT@book> alter session set statistics_level = all;
Session altered.
SCOTT@book> --set term off
SCOTT@book> select * from dept where REGEXP_LIKE(dname, '00', '00');
select * from dept where REGEXP_LIKE(dname, '00', '00')
*
ERROR at line 1:
ORA-01760: illegal argument for function
PLAN_TABLE_OUTPUT
-------------------------------------
SQL_ID fy92msh4xvx6u, child number 0
-------------------------------------
select * from dept where REGEXP_LIKE(dname, '00', '00')
Plan hash value: 3383998547
----------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows |E-Bytes| Cost (%CPU)| E-Time | A-Rows | A-Time |
----------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | | 3 (100)| | 0 |00:00:00.01 |
|* 1 | TABLE ACCESS FULL| DEPT | 1 | 1 | 20 | 3 (0)| 00:00:01 | 0 |00:00:00.01 |
----------------------------------------------------------------------------------------------------------
Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------
1 - SEL$1 / DEPT@SEL$1
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter( REGEXP_LIKE ("DNAME",'00','00',<not feasible>)
--//主要問題在於我沒想到oracle sql語句執行報錯,也能生成執行計劃。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-2847595/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 遇到mysql的奇怪問題了MySql
- [20150611]優化sql遇到問題.txt優化SQL
- 遇到一個git branch很奇怪的問題Git
- playwright 中使用 xpath 定位元素遇到的奇怪問題
- 模型資料作渲染優化時遇到的問題模型優化
- [20211214]檢視檢視V$ACTIVE_SESSION_HISTORY遇到奇怪問題.txtSession
- 關於Unity中的UGUI優化,你可能遇到這些問題UnityUGUI優化
- itoa函式的奇怪問題函式
- 關於session的奇怪問題Session
- MySQL複製的奇怪問題MySql
- jsp中的奇怪問題JS
- 資料標準化遇到的問題
- [20220811]奇怪的隱式轉換問題.txt
- [20221130]最佳化備庫dg遇到的問題2.txt
- 使用strace分析exp的奇怪問題
- [求助] start with connect by 奇怪的問題
- 一個奇怪的Java集合問題Java
- jive安裝奇怪問題!!!!!!!!
- [20181119]使用sql profile優化問題.txtSQL優化
- 一個奇怪的Golden Gate的問題Go
- 凸優化問題優化
- 效能優化問題優化
- 大佬們,最近測 PC 客戶端遇到一個很奇怪的問題,找不到原因。客戶端
- 數值最優化—優化問題的解(二)優化
- [20211210]swc.sql如何使用.txtSQL
- 【調優】設計問題還是優化問題?優化
- 工作遇到的問題
- mysql 遇到的問題MySql
- JavaScript 中的一些奇怪問題JavaScript
- 奇怪的登入問題及解決
- go的編譯優化問題Go編譯優化
- SQL優化--not in和or出的問題SQL優化
- SQL優化引出的問題(二)SQL優化
- SQL優化引出的問題(一)SQL優化
- [20211221]分析sql語句遇到的問題.txtSQL
- [20221125]設定hugepages遇到的問題.txt
- 斜率優化(凸包優化)DP問題acm優化ACM
- 急問:使用JBuilder2005開發Struts應用的時候遇到的奇怪問題-----請指教(線上等)UI