理解TimesTen錯誤日誌資訊"waiting for latch"
在11.2.2.x版本TimesTen的實際運維中,經常會出現大量的"waiting for latch"的告警資訊,直到11.2.2.8.0以後版本,針對latch進行了改進,期待11.2.2.8.0以後版本能有所改善;由於TimesTen中,latch等待的種類較多,每一種latch等待,代表著不通的效能問題,為了方便的理解,分別梳理各種“waiting for latch”的意思及最佳化方法:
1、waiting for latch "Command Dependency"
告警waiting for latch "Command Dependency"是一個比較樂觀的告警資訊,因為該告警資訊一般是由於應用程式SQL未大量繫結變數語句引起,這個時候我們可以使用ttsqlcmdcacheinfo\2和ttsqlcmdcacheinfoget兩個Built獲取當前緩衝區的當前情況;
ttsqlcmdcacheinfo\2可以獲取到當前緩衝區的SQL,透過分析SQL來判斷應用是否使用繫結變數;ttsqlcmdcacheinfoget可以獲取當前緩衝區SQL的數量和過期可釋放的SQL的數量.
根據多個省的移動及電信計費系統運維的經驗,系統在緩衝區的SQL量不多,在100~500之間,如果大於這個值,需要詳細分析Command緩衝區,大多是因為應用未使用繫結變數引起。
該告警的解決方案只有透過應用繫結變數,消除硬解析,減少資源開銷;同時,這裡需要確認PrivateCommands引數是否設定,該引數預設是連線共享的,如果設定為1表示連線之間不進行共享,這樣繫結變數的SQL在不同連線之間也不能相互共享。
告警日誌例子:Warn: : 16600: 28199/1002670e0: ConnId=28 (java) waiting for latch "Command Dependency"(7724594584), Holder=1038 (Deadlock Detector) PID 16610, now 1 secs
2、waiting for latch "Heap[N] - Perm"
這個告警資訊大多時候是提示對OOL(out-of-line)欄位的更新過於頻繁,OOL一般都是長度大於255欄位,這種長度較大的欄位存放在TT中本來就是不推薦的,如果這樣的欄位還頻繁的更新,說明在架構設計階段沒有進行詳細的應用分析,解決方式就是減少對OOL欄位的更新頻率。
TimesTen對欄位的儲存分為in-line和out-line兩種,一般預設採用in-line的儲存方式,資料訪問直接訪問資料儲存地址;當欄位較大(比如:大於varchar2(255)),TimesTen將採用in-line儲存一個類似指標地址的方式,並採用out-line儲存實際資料,每次資料庫訪問透過先訪問指標地址,在透過指標讀取資料。
告警日誌例子: Warn: : 23373: 10118/0x27ff350: ConnId=N (ConnName) waiting for latch "Heap[7] - Perm"(27008), Holder=155 (ConnName) PID 10191, now 1016ms
3、waiting for latch "Log Strand Insertion[n]"
告警資訊資訊waiting for latch "Log Strand Insertion[n]"提示LogBuffer的並行度較小,建議調整LogBufParallelism並行度的大小;當然,這裡需要確認一下事務日誌檔案及事務日誌緩衝區的大小配置是否合理。
告警日誌例子:Warn: : 23373: 10118/0x28f8ad0: ConnId=N (ConnName) waiting for latch "Log Strand Insertion[0]"(8390890888), Holder=2038 (ConnName) PID 23379, now 1019ms
4、waiting for latch "Perm Block[n]"和"RefCnt[n]"
這兩個告警資訊,大多時候是因為熱行爭用(類似Oracle的熱快爭用)引起,包括熱行的頻繁讀或者更新過於頻繁。如果是Hash Index組織表,大部分時候由於Hash索引的PAGES引數配置不合理,可以調整PAGES引數緩解。
Hash索引的PAGES引數的計算可以參考:我的另外一篇博文《配置TimesTen記憶體資料庫Hash索引的PAGES引數》
告警日誌例子:Warn: : 23373: 24598/0x7f49700008c0: ConnId=N (ConnName) waiting for latch "Perm Block[160262936]"(160263032), Holder=5 (ConnName) PID 24598, now 1083ms
告警日誌例子:Warn: : 2998: 7350/0xb7ce90: ConnId=56 (ConnName) waiting for latch "Perm RefCnt[901158320]"(901158728), Holder=54 (ConnName) PID 27611, now 1067ms
5、waiting for latch "Index OWNER.TABLENAME"
索引爭用提示資訊,大多時候是由於索引的更新或索引掃描過於頻繁,這個錯誤在T-Tree索引中出現較為普遍,如果是T-Tree索引,這個版本引用了B+Tree索引,Oracle官方建議採用B+Tree索引代替T-Tree索引;如果是Hash Index大多時候是由於PAGES設定不合理引起的,可以使用ttcomputetabsizes計算表中的記錄數進行設定PAGES引數。
TimesTen索引效能測試對比可以參考:我的另外一篇博文《TimesTen索引讀取效率》 http://blog.itpub.net/24930246/viewspace-1414996/。
告警日誌例子:Warn: : 21823690: 27656286/1100db7f0: ConnId=111 (java) waiting for latch "Index ABM.IND_RATABLERESULATOR_ID"(2308680), Holder=211 (cdr_rating) PID 29229074, now 10 secs
6、waiting for latch"Lock Hash Bucket[3918]"
Bucket鎖爭用,這個告警一般都會同時伴隨著waiting for latch "Index OWNER.TABLENAME"或者waiting for latch "Command Dependency"提示告警資訊出現,一般都是由於PAGES引數設定不合理引起的;Bucket的數量是由於PAGES引數設定控制的,官方給出的Bucket的計算方式(PAGES*256)/20,我們可以根據應用更新的特點,適當將PAGES引數調整為稍微比count/256大,分散資料以減少Bucket爭用。
告警日誌例子:2015-01-01 09:40:04.98 Warn: : 21823690: 35651682/11017fbf0: ConnId=344 (dispatch) waiting for latch "Lock Hash Bucket[3918]"(128892388440), Holder=76 (ABM) PID 37683404, now 1 secs
7、waiting for latch "Heap[2] - Temp"
該告警資訊有可能是臨時記憶體空間分配較小,導致臨時排序空間不足,可以透過monitor監控Temp_Size的大小,或者透過dssize觀察Temp_Size高水位使用情況,如果是臨時記憶體空間分配不足,建議調整臨時記憶體空間大小;如果不是由於臨時空間分配不足,該告警資訊一般會伴隨著其他告警資訊同時存在,比如waiting for latch "Command Dependency"提示等,建議先解決waiting for latch "Command Dependency"提示再觀察。
2015-01-01 10:25:06.99 Warn: : 21823690: 25034798/1102b6e30: ConnId=361 (TUXBAL_I) waiting for latch "Heap[2] - Temp"(128849029072), Holder=646 (TUXBAL) PID 36569144, now 1 secs
TangYun(Tony.Tang)2015.01.28
----------------End---------------------------
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24930246/viewspace-1417620/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【新炬網路名師大講堂】理解TimesTen錯誤日誌資訊”waiting for latch”AI
- jdon框架日誌資訊錯誤框架
- mysql 日誌之錯誤日誌MySql
- 排查錯誤日誌
- Apche日誌系列(2):錯誤日誌(轉)
- Mabatis配置錯誤日誌BAT
- net 日誌分析錯誤
- 日誌查詢錯誤
- 錯誤日誌檢視
- SQL Server 錯誤日誌SQLServer
- TimesTen錯誤總結
- MySQL 狂寫錯誤日誌MySql
- Laravel/Lumen 自定義錯誤日誌格式過濾堆疊資訊Laravel
- go fiber: 把異常資訊寫到錯誤日誌中Go
- SAP 錯誤日誌的調查
- node錯誤處理與日誌
- 上一個日誌的錯誤
- Sqlserver:代理錯誤日誌,知多少?SQLServer
- SQL Server ErrorLog 錯誤日誌SQLServerError
- aix ip 衝突錯誤日誌AI
- oracle日誌錯誤恢復(轉)Oracle
- nginx+phpfpm日誌報錯資訊NginxPHP
- 正確理解 PHP 錯誤資訊(轉)PHP
- mysql之 日誌體系(錯誤日誌、查詢日誌、二進位制日誌、事務日誌、中繼日誌)MySql中繼
- 開啟PHP的錯誤log日誌PHP
- 常見的錯誤日誌型別型別
- Mysql5.7 的錯誤日誌中最常見的note日誌MySql
- MySQL資料庫中的日誌檔案---(1)錯誤日誌MySql資料庫
- TimesTen計算和配置TimesTen的ttmesg日誌儲存空間
- ITMySQL錯誤日誌與通用查詢日誌圖文詳析jugMySql
- laravel5.7 不記錄 sql 報錯日誌,自定義日誌資訊LaravelSQL
- node專案錯誤處理與日誌
- 2、MySQL錯誤日誌(Error Log)詳解MySqlError
- mysql慢查詢和錯誤日誌分析MySql
- Oracle10g DML錯誤日誌表Oracle
- win10系統怎麼檢視系統錯誤日誌_win10如何檢視錯誤日誌Win10
- 【事件中心 Azure Event Hub】Event Hub日誌種發現的錯誤資訊解讀事件
- 用外部表的方式查詢alert日誌檔案中ora-錯誤資訊