トランザクションの途中で長い時間がかかっているクエリがあります。プロセスのwait_type
を取得すると、PAGEIOLATCH_SH
になります。
この待機タイプは何を意味し、どのように解決できますか?
から MSDN :
PAGEIOLATCH_SH
タスクが
I/O
要求内にあるバッファーのラッチで待機しているときに発生します。ラッチ要求は共有モードです。長い待機時間は、ディスクサブシステムの問題を示している可能性があります。
実際には、これはほとんどの場合、大きなテーブルの大規模なスキャンが原因で発生します。インデックスを効率的に使用するクエリではほとんど発生しません。
クエリが次のような場合:
Select * from <table> where <col1> = <value> order by <PrimaryKey>
、(col1, col_primary_key)
に複合インデックスがあることを確認してください。
持っていない場合は、INDEX SCAN
が選択されている場合は完全なPRIMARY KEY
が、col1
のインデックスが選択されている場合はSORT
が必要です。
どちらも非常にディスクI/O
が大きなテーブルでの操作を消費します。
PAGEIOLATCH_SH
待機タイプは、通常、断片化または最適化されていないインデックスの結果として発生します。
多くの場合、PAGEIOLATCH_SH
待機タイプが多すぎる理由は次のとおりです。
高いPAGEIOLATCH_SH
待機タイプの解決を試みるために、次を確認できます。
PAGEIOLATCH_SH
待機タイプの根本原因として見つかる可能性があります。AlwaysOn AGでミラーリングまたは同期コミットの安全性が高い場合、PAGEIOLATCH_SH
の増加/過剰が予想されることに注意してください。
このトピックの詳細については、記事 過剰なSQL Server PAGEIOLATCH_SHの待機タイプの処理 を参照してください。