[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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [20211214]檢視檢視V$ACTIVE_SESSION_HISTORY遇到奇怪問題.txtSession
- [20180417]奇怪的grep過濾問題.txt
- [20220811]奇怪的隱式轉換問題.txt
- 上線後遇到一個很奇怪的問題
- playwright 中使用 xpath 定位元素遇到的奇怪問題
- [20181119]使用sql profile優化問題.txtSQL優化
- [20221125]設定hugepages遇到的問題.txt
- [20221130]最佳化備庫dg遇到的問題2.txt
- [20211210]swc.sql如何使用.txtSQL
- [20211221]分析sql語句遇到的問題.txtSQL
- [20211209]pdb資料庫kill job遇到的奇怪情況.txt資料庫
- [20240309]在windwos下使用sed遇到的問題.txt
- [20211229]toad下優化sql語句注意的問題.txt優化SQL
- [20231102]除錯bash shell指令碼遇到的問題.txt除錯指令碼
- [20210107]編寫bash shell指令碼遇到的問題.txt指令碼
- [20241110]使用xto10.sql指令碼遇到的問題.txtSQL指令碼
- [20230329]記錄除錯sql語句遇到的問題.txt除錯SQL
- 資料標準化遇到的問題
- [20220815]奇怪的隱式轉換問題(11g測試補充).txt
- [20220811]奇怪的隱式轉換問題(12c補充測試).txt
- [20230905]奇怪的語法.txt
- [20231017]使用dbms_xplan.display_awr查詢遇到的問題.txt
- 大佬們,最近測 PC 客戶端遇到一個很奇怪的問題,找不到原因。客戶端
- [20181120]奇怪的insert語句.txt
- [20201106]奇怪的awr報表.txt
- [20210802]grep奇怪的過濾.txt
- [20211111]奇怪的ashtop輸出.txt
- [20220822]奇怪的ashtop輸出.txt
- [20221020]奇怪的增量備份.txt
- [20210924]awk奇怪的輸出.txt
- [20190124]bbed恢復資料遇到延遲塊清除的問題.txt
- 凸優化問題優化
- linux遇到的問題Linux
- Vagrant 遇到的問題
- Homestead 遇到的問題
- sudo 遇到的問題
- JackJson遇到的問題JSON
- mysql 遇到的問題MySql