[20160113]不要亂用國際化函式.txt
[20160113]不要亂用國際化函式.txt
--生產系統上午使用perf檢查發現:
# perf top -k /u01/app/oracle/product/11.2.0.4/dbhome_1/bin/oracle
PerfTop: 6443 irqs/sec kernel:47.0% exact: 0.0% [1000Hz cycles], (all, 24 CPUs)
------------------------------------------------------------------------------------------------------------------------
samples pcnt function DSO
_______ _____ ______________________ ______________________________________________________________________
2125.00 4.8% lxpcget /u01/app/oracle/product/11.2.0.4/dbhome_1/bin/oracle
2113.00 4.8% lxoBinCmpMutl /u01/app/oracle/product/11.2.0.4/dbhome_1/bin/oracle
1608.00 3.6% lxgcvp /u01/app/oracle/product/11.2.0.4/dbhome_1/bin/oracle
1340.00 3.0% lxoCmpStr /u01/app/oracle/product/11.2.0.4/dbhome_1/bin/oracle
1203.00 2.7% lxmcpen /u01/app/oracle/product/11.2.0.4/dbhome_1/bin/oracle
1196.00 2.7% lxsCmpStr /u01/app/oracle/product/11.2.0.4/dbhome_1/bin/oracle
1158.00 2.6% evastr /u01/app/oracle/product/11.2.0.4/dbhome_1/bin/oracle
1078.00 2.4% kcbgtcr /u01/app/oracle/product/11.2.0.4/dbhome_1/bin/oracle
1025.00 2.3% kpofcr /u01/app/oracle/product/11.2.0.4/dbhome_1/bin/oracle
807.00 1.8% lxgcnvb /u01/app/oracle/product/11.2.0.4/dbhome_1/bin/oracle
--從來沒有看到lx開頭的函式排在前面.我們一般kcbgtcr排在前面,這個主要是邏輯讀.而且現在剛剛上班9點多,沒有到業務高峰.
SELECT sql_id, COUNT (*)
FROM V$ACTIVE_SESSION_HISTORY
WHERE sample_time > SYSDATE - 10 / 1400
GROUP BY sql_id
ORDER BY 2 DESC;
SQL_ID COUNT(*)
------------- ----------
310
7xtuxjbw6x9qq 162
gc292abmax9gd 51
g7k9fgfzdb8j4 37
....
--檢查發現開發的sql語句使用錯誤的函式to_nchar,這樣無法找到滿足條件的結果.由於生產系統語句複雜,透過例子來說明:
SCOTT@book> @ &r/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
SCOTT@book> select dump(to_nchar(deptno)) c30 ,dump(to_char(deptno)) c20 ,t.* from dept t;
C30 C20 DEPTNO DNAME LOC
------------------------------ -------------------- ---------- -------------- -------------
Typ=1 Len=4: 0,49,0,48 Typ=1 Len=2: 49,48 10 ACCOUNTING NEW YORK
Typ=1 Len=4: 0,50,0,48 Typ=1 Len=2: 50,48 20 RESEARCH DALLAS
Typ=1 Len=4: 0,51,0,48 Typ=1 Len=2: 51,48 30 SALES CHICAGO
Typ=1 Len=4: 0,52,0,48 Typ=1 Len=2: 52,48 40 OPERATIONS BOSTON
--可以發現dump(to_nchar(deptno)) ,dump(to_char(deptno))兩者是不等的,所以講沒有國際化需求不要亂用這些函式.
--我們應用一些欄位存在隱式轉換,或者型別不一致,導致開發使用錯誤的函式或者不理解為什麼,導致後臺cpu忙.
--開啟2個視窗:
# perf top -k /u01/app/oracle/product/11.2.0.4/dbhome_1/bin/oracle
--另外一個執行:
SCOTT@book> set autot traceonly
SCOTT@book> select to_nchar(rownum) c10,to_nchar(rownum+1),to_nchar(rownum-1) from dual connect by 1=1;
ERROR:
ORA-30009: Not enough memory for CONNECT BY operation
--我的條件1=1,這樣無限輸出,不斷的呼叫to_nchar函式.直到沒有足夠的記憶體,可以執行多次.回到另外一個視窗觀察,可以發現都是lx開頭的函式.
--基本與我前面生產系統遇到的問題一樣.
PerfTop: 3332 irqs/sec kernel:62.4% exact: 0.0% [1000Hz cycles], (all, 24 CPUs)
-----------------------------------------------------------------------------------------------------------------
samples pcnt function DSO
_______ _____ ______________________ _______________________________________________________________
802.00 10.4% lxpcget /u01/app/oracle/product/11.2.0.4/dbhome_1/bin/oracle
581.00 7.6% lxgcvp /u01/app/oracle/product/11.2.0.4/dbhome_1/bin/oracle
504.00 6.6% lxoBinCmpMutl /u01/app/oracle/product/11.2.0.4/dbhome_1/bin/oracle
478.00 6.2% lxoCmpStr /u01/app/oracle/product/11.2.0.4/dbhome_1/bin/oracle
429.00 5.6% evastr /u01/app/oracle/product/11.2.0.4/dbhome_1/bin/oracle
379.00 4.9% lxmcpen /u01/app/oracle/product/11.2.0.4/dbhome_1/bin/oracle
369.00 4.8% lxsCmpStr /u01/app/oracle/product/11.2.0.4/dbhome_1/bin/oracle
289.00 3.8% lxoSkip /u01/app/oracle/product/11.2.0.4/dbhome_1/lib/libclntsh.so.11.1
--可以發現一個簡單to_nchar函式,後臺oracle呼叫的內部函式有多少.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-1975690/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 立即執行函式在前端國際化方案中的應用函式前端
- 函式柯里化和偏函式應用函式
- 工作發狂:Mybatis 中$和#千萬不要亂用!MyBatis
- JS函式之不要隨便bindJS函式
- [20200213]函式nullif使用.txt函式Null
- MySQL 日期函式、時間函式在實際場景中的應用MySql函式
- [20180509]函式索引問題.txt函式索引
- [20211231]函式索引測試.txt函式索引
- 如何在 pyqt 中解決國際化 tr() 函式不起作用的問題QT函式
- 實用的 Flutter 國際化指南Flutter
- Oracle分析函式之LEAD和LAG實際應用Oracle函式
- [20190401]關於semtimedop函式呼叫.txt函式
- [20181002]DBMS_FLASHBACK與函式.txt函式
- [20180531]函式呼叫與遞迴.txt函式遞迴
- [20231123]函式與bash shell呼叫.txt函式
- [20191002]函式dump的bug.txt函式
- [20190728]分析函式LAST_VALUE.txt函式AST
- 基於SpringBoot的國際化應用Spring Boot
- H5快應用國際化H5
- python的print函式不要換行怎麼寫Python函式
- 國際化
- 用大白話介紹柯里化函式函式
- [20190827]函式索引與選擇率.txt函式索引
- [20190918]關於函式索引問題.txt函式索引
- JS高階函式-函式柯里化JS函式
- 常用JS函式-陣列扁平化,快取函式,柯里化函式,防抖和節流函式JS函式陣列快取
- 用函式正規化實現戰略模式函式模式
- [20190402]關於semtimedop函式呼叫2.txt函式
- [20241012]cursor_sharing=force與函式索引.txt函式索引
- Spring Boot應用的國際化與本地化支援Spring Boot
- Android國際化Android
- 國際化思考
- 高階函式應用 —— 柯里化與反柯里化函式
- Excel 優化函式Excel優化函式
- 函式柯里化函式
- 【spring 國際化】springMVC、springboot國際化處理詳解SpringMVCSpring Boot
- 國際C語言混亂程式碼大賽C語言
- 一種國際化Qt應用程式的方法QT
- 用函式實現模組化程式設計二函式程式設計