SQLの待機はシングルブロックリードか? • シングルブロックリードはUNDOか? • SQL単体で実行すると再現しない? • 事前にSQLの前に洗い替えなど、表が大量に更新されているか? • 遅延発生時間帯のAWRのcleanouts関連の統計値が比較的高くなることも判断材料として有効 全てYESなら、 遅延ブロッククリーンアウトを疑う ◆遅延ブロッククリーンアウト発生時 Statistic Total per Second per Trans -------------------------------- ------------------ -------------- ------------- cleanout - number of ktugct call 72,399,097★ 6,696.7 4.1 cleanouts and rollbacks - consis 16,460 1.5 0.0 cleanouts only - consistent read 65,909,546★ 6,096.4 3.7 ◆通常時 Statistic Total per Second per Trans -------------------------------- ------------------ -------------- ------------- cleanout - number of ktugct call 589,352★ 40.9 786.9 cleanouts and rollbacks - consis 48 0.0 0.1 cleanouts only - consistent read 584,439★ 40.6 780.3 ktugct: Kernel Transaction Undo Get Commit Time 例
解析に癖があるので、事象の特徴を理解しておくと、現場での解決に役立つ • 理解を深めるには、以下の書籍の「トランザクションと一貫性」について読むとよいと思います 【参考文献1】 Jonathan Lewis; “Oracle Core: Essential Internals for DBAs and Developers”; Apress, 2011. pp.25-43 “Transactions and Consistency”