1. 問題現象
*年*月*日*行內性能監控系統發出告警-*系統出現大量交易延遲或超時,從weblogic容器可觀測到資料庫連接池擁塞,DBA分析發現ORACLE資料庫流水表A發生ITL事務槽同搶等待。
2.原因分析
事故發生后,DBA也一籌莫展,只能將問題表rename,然后重建一張空表,讓系統恢復運行。事后幾天內DBA和相關專家也無法對此問題定論,此時相關人員將焦點漸漸轉移到應用層面(其實是屬于無奈),懷疑應用使用了特殊的用法,從而引發了資料庫問題??
經過對*系統反復壓力驗證測驗,發現應用不存在問題和瓶頸,但在ORACLE資料庫中,*系統的表A有大量記錄在update后發生了行鏈接(即:一條記錄跨BLOCK),大量記錄的行鏈接在一定程度上肯定會影響資料庫的效率。進一步對*系統業務流程分析該系統的資料模型本身有其特殊性,交易請求資料在INSERT到表A時有600個位元組,交易處理完成后交易結果資料有近500多個位元組UPDATE到表A,表A的初始事務槽為2,PCTFREE為塊大小(8K)的10%,在交易密度較高的場景下,同一塊內寫入10條交易請求資料后,更新兩條交易結果即可將PCTFREE空間分配完,對其它8條記錄更新交易結果資料時則會發生行鏈接,PCTFREE空間分配完也導致同一BLOCK內無法申請更多的ITL槽位,從而引發ITL槽等待。
在絕大多數情況下ITL槽等待對應用的影響不明顯,如果在同一并發時間點行鏈接的資料被隨機分配到同一個BLOCK ,或占用其它塊的PTCFREE空間時,則可能引起連鎖性的行鏈接和大量的ITL槽等待。
3.處理方案
按實際資料模型特征調整表A的以下引數:
Pctfree 調整為50%
Initrans 調整為 5~10
[
ORACCLE資料庫對update資料所需的空間會從PCTFREE空間中分配,ITL事務槽的空間也會從PCTFREE空間中分配。
所以對資料模型特征特殊的表,在建表時需充分考慮PCTFREE、INITRANS這兩項引數的設定。
]
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/10024.html
標籤:基礎和管理
上一篇:哪位兄臺有oracle support account,幫忙解鎖查看一項Solution
下一篇:更新有觸發器的表死鎖
