「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
SQL Serverにおいて、
等の問題発生時の一般的な問題分析方法について説明します。
SQL Server の現在の利用状況に関する情報を表示(利用状況モニター、標準レポート)
Transact-SQL ステートメントとシステム ストアド プロシージャを使用。
はじめにエラーログやイベントログを確認ください
(Windowsのものだけでなく、SQL Serverのログも)。
SQLトレースをログ出力する。
SQLトレースログに加えて、
パフォーマンスカウンタを選択、パフォーマンスログを取得し
問題(ソース消費量が多い処理は何処か?)を特定できる可能性がある。
# | リソース | <オブジェクト>:<カウンタ> | カウンタの説明 | 「しきい値」を超える条件 | 「しきい値」を超えた場合の対策 |
備考 | |||||
1 | メモリ | ||||
1-1 | SQL Server: Memory Manager: Total Server Memory(KB) | SQL Serverのバッファ プールが使用しているメモリ量 | サーバの物理メモリ容量に比べて高い。 | メモリを増設する。 | |
この値は、仮想メモリもカウントするため、サーバの物理メモリ容量を超えることがある。タスク マネージャでは示されない、AWEのメモリ使用状況も提供される。 | |||||
2 | バッファ キャッシュ | ||||
2-1 | SQL Server: Buffer Manager: Free pages | バッファ プールの未使用ページリスト(Free Page List) にあるページの総数 | 4ページ以下 | メモリを増設する。 | |
メモリ不足の場合、レイジー ライター(実行プランのキャッシュに必要なメモリを管理する)あるいはチェック ポイントなどの処理を保持できなくなる可能性がある。 | |||||
2-2 | SQL Server: Buffer Manager: Buffer cache hit ratio | バッファ キャッシュのヒット率 | 90%以下 | メモリを増設する。 | |
100%に近いほど適正。 | |||||
2-3 | SQL Server: Buffer Manager: Page Life expectancy | バッファ プール内で、ページが参照されなくても保持される秒数 | 300秒以下 | メモリを増設する。 | |
- | |||||
3 | ディスク | ||||
3-1 | SQL Server: Buffer Manager: Page Reads/Sec | SQL Serverのバッファ マネージャによる、ディスク上の読み取り回数/秒 | ディスクの仕様で規定されている値の最大値に近い。 | ・メモリを増設する。 ・ハードウェアのI/O容量を増やす。 ・非正規化、インデックスの使用など、I/O操作が減るようにアプリケーションまたはDBを調整する。 | |
一般的に、Ultra Wide SCSIディスクは毎秒50~70回のI/O操作を処理できる。 | |||||
3-2 | SQL Server: Buffer Manager: Page Writes/Sec | SQL Serverのバッファ マネージャによる、ディスク上の書き込み回数/秒 | ハードウェアのI/O容量を増やす。 | ||
一般的に、Ultra Wide SCSIディスクは毎秒50~70回のI/O操作を処理できる。 |
# | リソース | <オブジェクト>:<カウンタ> | カウンタの説明 | 「しきい値」を超える条件 | 備考 |
1 | 負荷(トランザクション) | ||||
1-1 | SQL Server: Databases: Transactions/sec | DBで開始されたトランザクションの数/秒 | なし | この数値はシステム規模の参考になる。また、トランザクション負荷の増減をチェックするのにも役立つ。 | |
1-2 | SQL Server: Databases: Active Transactions | 現在のDBで、アクティブなトランザクションの数 | 「SQL Server:Databases:Transactions/sec」が、「SQL Server:Databases(_Total):Active Transactions」を超える場合、サーバの負荷が超過状態であることを示す。 | ||
1-3 | SQL Server: General Statistics: User Connections | SQL Serverに現在接続しているユーザ数 | この値の大幅な変動には注意すべき。 | ||
2 | インデックス | ||||
2-1 | SQL Server: Access Methods: Full Scans/Sec | フル スキャンの数/秒 | なし | この値が大きくなる場合、アプリケーションがインデックスを効率的に使用していないことが考えられる。原因となっているコード(クエリ)を調べ、必要に応じてインデックスを作成する。また、「tempdb」テーブルはほとんどインデックス付けされないため、「tempdb」データベースから情報を返す場合、この数値が高くなることがある。 | |
2-2 | SQL Server: Access Methods: Index Searches/Sec | インデックス検索数/秒 | このカウンタによって、システムのデータ アクセスのパターンをチェックできる。インデックスは、「範囲スキャン」、「単一インデックス レコードのフェッチ」、「インデックスの中で再度位置付け」に使用される。 | ||
2-3 | SQL Server: Access Methods: Page Splits/Sec | ページ分割回数/秒 | 性能上問題となるページ分割の回数をチェックできる。 | ||
3 | ロック | ||||
3-1 | SQL Server:Locks: Average Wait Time(ms) | 「待ち状態の原因となる各ロック要求」の「平均待ち時間(ミリ秒)」 | なし | 状況の監視に使用する。 | |
3-2 | SQL Server:Locks: Lock Waits/Sec | ロック取得のために、待機しなければならない要求の数/秒 | |||
3-3 | SQL Server:Locks: Lock Timeouts/sec | タイムアウトしたロック要求の数/秒 | NOWAITロックの要求を除く。状況の監視に使用する。 | ||
3-4 | SQL Server:Locks: Number of Deadlocks/sec | デッドロックに帰着するロック要求の数/秒 | 状況の監視に使用する。 | ||
3-5 | SQL Server:Latche: Average Latch Wait Time | ラッチ要求の「平均待ち時間 (ミリ秒)」(ラッチは、負荷の軽い短期の同期化オブジェクトで、トランザクション全体にわたってロックする必要がない動作を保護する。主に、接続に対して行が読み取られている間、行を保護するために使用される。) | 状況の監視に使用する。この数値が大きくなると、サーバがリソースを求めて競合に巻き込まれる恐れがある。 | ||
4 | その他 | ||||
4-1 | SQL Server: SQL Statistics: SQL Compilations/Sec | SQLコンパイルの回数/秒。クエリの再コンパイルの回数も含まれる。 | なし | SQL Serverのユーザ利用状況が安定したら、通常、この値は安定した状態になる。クエリの再コンパイル処理は、「スキーマの変更」、「テーブルに多くの行をインサートする」、「テーブルから多くの行をデリートする」などの操作によって発生する。値が常に高い場合は、調査が必要。アドホック クエリの問題の監視に使用できる。 | |
4-2 | SQL Server: SQL Statistics: SQL Re-Compilations/Sec | クエリの再コンパイルの回数/秒。 | |||
4-3 | SQL Server: Buffer Manager: Memory Grants Pending | 作業領域メモリの使用許可を待っている処理の数。 | アドホック クエリ、結合方法の問題を監視するのに使用できる。 | ||
4-4 | SQL Server: Buffer Manager: Stolen Page Count | 他のサーバ メモリ要求によって奪われたバッファ キャッシュのページの数 |
T-SQLファイルを作成し実行する(スケジューラでsqlcmdから実行する等)。
T-SQLファイルを作成し実行する(スケジューラでsqlcmdから実行する等)。
T-SQLファイルを作成し実行する(スケジューラでsqlcmdから実行する等)。
T-SQLファイルを作成し実行する(sqlcmdから実行する等)。
T-SQLファイルを作成し実行する(スケジューラでsqlcmdから実行する等)。
いずれも、T-SQLファイルを作成し実行する(スケジューラでsqlcmdから実行する等)。
エンドポイントとコネクション情報
プリンシパルとミラー情報
監視サーバ情報
GUIとレジストリから設定。
レジストリから設定。
Tags: :データアクセス, :SQL Server, :障害対応, :性能, :デバッグ