ここから本文です

「ロックされたわけではない」のに終わらない処理がある(パフォーマンストラブル)/SQL Serverトラブルシューティング

7/4(火) 8:25配信

@IT

 本稿では、「Microsoft SQL Server(以下、SQL Server)」で発生するトラブルについて、「なぜ起こったか」の理由とともに具体的な対処方法を紹介していきます。

クエリストアで収集された各処理の内容をビジュアルで確認できる

●トラブル(カテゴリー:処理遅延):「ロックされたわけではない」のに終わらない処理がある

□□
○目次
・トラブルの実例
・トラブルの原因
・解決方法
□□

 「Windows Server 2012 R2」上に「SQL Server 2016 RTM」をインストールした環境を想定して解説します。

□□
トラブルの実例:これまで問題がなかったのに、急に処理が遅くなった。
 SQL Serverのパフォーマンスログを確認すると、普段の傾向とは多少異なる部分はあったが、それが明らかなボトルネックになるほどではなく、他の処理にも影響は及ぼしてはいなかった。
□□


○トラブルの原因を探る

 SQL Serverの内部動作を調査するツール「DMV(Dynamic Management View)」で「dm_exec_requests」のステータスを確認します。ステータスは「running(実行中)」でした。

 今回のトラブル事例では、SQL Serverの「クエリストア」機能を事前に有効にしたシステムでトラブルシューティングを行います。クエリストアは、実行された処理時間や実行プランを保存し、確認できるSQL Server 2016から実装された新機能です。以前のバージョンでもそれらの情報を取得する方法はありましたが、クエリストアによって「より簡単」に情報を取得できるようになりました。

 クエリストアは既定では無効になっているので、システムをSQL Server 2016に刷新したならば、この機能も有効にしておくことをお勧めします。設定は、「データベースのプロパティ」→ページの選択で「クエリストア」を選ぶ→操作モード(要求)を、オフから「読み取り、書き込み」に変更すると機能が有効になります。

 クエリストアでは「その後に実行したクエリの処理状況」を収集できます。クエリストアで収集した結果は、データベースを展開した中の「クエリストア」メニューから確認できます。今回は、クエリストアの「リソースを消費するクエリの上位」を展開して、その状況を探ります。

 表示されたクエリの中から「合計実行時間が長いクエリ」を探ると、プランID「8」とプランID「10」、2つのプランがリストアップされました(図3の右上のグラフ)。このグラフの縦軸は実行時間を示していますが、それぞれ実行時間がかなり違うことを確認できます。つまりこのシステムでは、『これまでは、処理時間の短いプランID「10」で実行されていたクエリが、何らかの理由でプランID「8」に変更された』ために、処理時間が長くなったことが分かりました。


○解決方法

 SQL Serverの実行プランが変わってしまう場合には、「統計情報を更新する」ことで多くは解消されます。しかし、何らかの理由で統計情報を更新できないものの、実行プランを変更したいシーンはあり得ます。クエリストアを有効にしたシステムならば、「効率的なプランを、強制的に実行させる」ことで対処可能です。

 方法は簡単です。クエリストアのメニューから効率的な方のプランを選び(今回の場合は、プランID「10」)、「プランの強制」ボタンを押すだけでそのプランを固定できます。

 この作業によって、遅いプランID「8」から元のプランID「10」を使う体制に戻り、遅延トラブルも解消されました。

□□
「ロックされたわけではない」のに終わらない処理がある」場合の対策手順
1. SQL Server 2016以降では、事前に「クエリストア」を有効にしておく
2. クエリストアのメニューから、遅延が発生している実行プランを確認する
3. 実行プランが意図せず変わっていたならば、元のプランを使うように指定する(プランの強制)
□□

本トラブルシューティングの対応バージョン:SQL Server 2016以降

●筆者紹介

内ヶ島 暢之(うちがしま のぶゆき)

ユニアデックス株式会社 NUL System Services Corporation所属。Microsoft MVP Data Platform(2011~)。OracleやSQL Serverなど商用データベースの重大障害や大型案件の設計構築、プリセールス、社内外の教育、新技術評価を担当。2016年IoTビジネス開発の担当を経て、2016年現在は米国シリコンバレーにて駐在員として活動中。目標は生きて日本に帰ること。

椎名 武史(しいな たけし)

ユニアデックス株式会社所属。入社以来 SQL Serverの評価/設計/構築/教育などに携わりながらも、主にサポート業務に従事。SQL Serverのトラブル対応で社長賞の表彰を受けた経験も持つ。休日は学生時代の仲間と市民駅伝に参加し、銭湯で汗を流してから飲み会へと流れる。

最終更新:7/4(火) 8:25
@IT