SQL ServerのPAGEIOLATCH_SH待機タイプとは何ですか?


96

トランザクションの途中で時間がかかるクエリがあります。私がwait_typeプロセスを取得するとき、それはそうですPAGEIOLATCH_SH

この待機タイプは何を意味し、これをどのように解決できますか?

回答:


116

Microsoftのドキュメントから:

PAGEIOLATCH_SH

タスクがI/Oリクエスト内のバッファのラッチを待機しているときに発生します。ラッチ要求は共有モードです。待機時間が長い場合は、ディスクサブシステムに問題がある可能性があります。

実際には、これはほとんどの場合、大きなテーブルに対する大規模なスキャンが原因で発生します。インデックスを効率的に使用するクエリではほとんど発生しません。

クエリが次のような場合:

Select * from <table> where <col1> = <value> order by <PrimaryKey>

、に複合インデックスがあることを確認してください(col1, col_primary_key)

ないINDEX SCAN場合は、PRIMARY KEYが選択されている場合はフル、またはSORTインデックスcol1が選択されている場合はフルが必要になります。

どちらも、I/O大きなテーブルで非常にディスクを消費する操作です。


これは本当に単純なクエリです。* from <table>を選択します。ここで、<col1> = <value>は、<PrimaryKey>で並べ替えます。また、col1のみにインデックスがあり、インデックスの再構築を試みました。
ライアン

ディスク集約型、フルインデックススキャンが必要なもの、ソートが必要なものなどについての理解を深めるためのリソースを提案できますか
Greg B

1
@GregB:あなたは既にSQLの基本的な知識を持っている場合、あなたはジョー・セルコの本(それらのすべてが、特に読むことができたSQL for SmartiesThinking in Sets)そしてもちろん私のブログ:)
Quassnoi

3
これは、ディスクサブシステムのエラーを示していました。監視システムを起動せずにRAIDディスクに障害が発生しました。イベントログを確認すると、SMARTが実際にドライブを不良としてマークしていたことがわかりました。
Gomibushi 2012年

7

PAGEIOLATCH_SH 待機タイプは通常、インデックスが断片化されているか、最適化されていないために発生します。

多くの場合、PAGEIOLATCH_SH待機タイプが過剰になる理由は次のとおりです。

  • I / Oサブシステムに問題があるか、正しく構成されていません
  • 高いI / Oアクティビティを生成している他のプロセスによるI / Oサブシステムの過負荷
  • 悪いインデックス管理
  • 論理ドライブまたは物理ドライブの誤解
  • ネットワークの問題/待ち時間
  • メモリ不足
  • 同期ミラーリングとAlwaysOn AG

PAGEIOLATCH_SH待機タイプが高いことを試して解決するには、次のことを確認できます。

  • SQL Server、クエリ、およびインデックス。非常に多くの場合、これは過度のPAGEIOLATCH_SH待機タイプの根本的な原因として見つかる
  • I / Oサブシステムのトラブルシューティングに入る前のメモリ不足

AlwaysOn AGで安全性の高いミラーリングまたは同期コミットの可用性の場合、増加/過剰PAGEIOLATCH_SHが予想されることに常に注意してください。

このトピックの詳細については、記事「過剰なSQL ServerのPAGEIOLATCH_SH待機タイプの処理」を参照してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.