立入|ITブログ
SQL ServerでDBが重くなっている原因を特定するには?

SQL Server Profilerで実行されている処理のキャプチャを取得できる

SQL Serverが重い時、調査のためにはどの処理が重いのか確認する必要があります。そのために役立つツールが「SQL Server Profiler」です。

今回はSQL Server Profilerを使い、重い処理を特定するための基本的な手順を紹介します。

SQL Server ProfilerはSSMSから起動できる

SQL Server ProfilerはSSMSから起動できます。

  1. SSMSを起動する
  2. ツールバーの「ツール > SQL Server プロファイラー」を開く

SSMSのダウンロードがまだの場合はこちらの公式ドキュメントを参考にダウンロードを行って下さい。

データベースのログをトレースする

SQL Server Profilerを起動したら、トレースを行いたいDBへ接続します。ただしトレースの際には一定の負荷がかかるので、検証環境を利用したり、本番環境であればほとんど利用のない時間帯に行う必要があります。

  1. ツールバー「ファイル > 新しいトレース」を開く
  2. トレースを行うデータベースの認証情報を入力して接続する

トレースを行う条件のフィルタを設定する

トレースの結果にはDBの操作に関する全てのログが出てくるので、原因を特定するのは簡単ではありません。そのため事前にフィルタを設定しておくのが良いでしょう。

条件は多々ありますが、データベースが重いという事で調査を行うのであればDurationという項目でのフィルタが適していると思います。Durationは対象の操作の実行にかかった時間という意味らしく、ここでフィルタをかければ重い処理を確認できます。

またDurationの時間で調査を行う場合「Audit Logout」という項目は除いてしまった方が良いと思います。セッションの開始から終了までの時間が表示されますが、知りたいのはその途中のどの処理で時間がかかったか、だからです。

DBに接続した後は「トレースのプロパティ」という項目が表示されるので、ここで条件の設定を行いましょう。

  1. 「イベントの選択」タブを開く
  2. 「Security Audit > Audit Logout」のチェックを外す
  3. 「列フィルター」を開く
  4. Durationを選択する
  5. 「次の値以上」にフィルタリングする値を入力する(単位はミリ秒)
  6. 「値が含まれていない行を除外する」にチェックを入れる
  7. 「OK > 実行」

自分の場合は1000ミリ秒を条件にフィルタをかけました。

SQL Server Profilerでトレースを実行する

実行後にしばらく待つと、画面にトレース結果が表示されます。必要な分だけ待った後、ツールバーの下のボタンで一時停止や停止を行いましょう。

トレースの結果から重い処理を見つける

これで実行に1秒以上かかっている処理の一覧を表示する事ができます。

自分の場合は「SQL:BatchCompleted」という項目で10秒以上かかる処理を見つけました。その列を選択すると、実行されたSQLを確認する事ができます。中身を確認すると、SQL文にWHERE句が存在せず、50万件以上のデータを都度取得する処理が入っている事が分かりました。

他の条件でフィルタリングを行う

ここまではDurationの時間を手がかりに調査を進めましたが、他の項目での確認を行いたい場合もあるでしょう。その場合はフィルタの条件を設定し直す事ができます。

結果のテーブルを右クリックして「プロパティ」を選択すれば、条件を再設定する事はできますが、この場合は新規にその条件でトレースを行う事になります。

今取得したトレースの結果を違う条件で見たい場合は、一度結果をtrcファイルに保存し、開き直す事で対応できます。

  1. ツールバー「ファイル > 名前を付けて保存 > トレースファイル」を開く
  2. 任意の名前をつけて保存
  3. ツールバー「ファイル > 開く > トレースファイル」から保存したファイルを開く
  4. 表示されたテーブルを右クリック
  5. 「プロパティ」を開く
  6. フィルタの条件を設定する

SQL Server Profilerならデータベースの専門家でなくても最低限の調査が行える

データベースの知識は素人に近い状態でも、このツールを使えば問題にある程度の当たりを付ける事ができました。問題の範囲を絞る事ができれば、専門家の人に依頼する時も話が通りやすくなりますし、場合によっては自分での解消も可能です。

とっつきにくさはありますが、標準のツールがしっかりしているのはMicrosoft系列の良い所だと思いました。