SQL Serverが一時的にログインできない(処理遅延):SQL Serverトラブルシューティング(68)(1/2 ページ)
本連載では、「Microsoft SQL Server(以下、SQL Server)」で発生するトラブルについて、「なぜ起こったか」の理由とともに具体的な対処方法を紹介していきます。今回は「SQL Serverが一時的にログインできない」場合の解決方法を解説します。
本連載では、「Microsoft SQL Server(以下、SQL Server)」で発生するトラブルについて、「なぜ起こったか」の理由とともに具体的な対処方法を紹介していきます。
トラブル 57(カテゴリー:処理遅延):SQL Serverが一時的にログインできない
「Windows Server 2012 R2」上に「SQL Server 2016 RTM」をインストールした環境を想定して解説します(本トラブルシューティングの対応バージョン:SQL Server 全バージョン)。
トラブルの実例:トランザクション量の多い大規模システムを長年運用している。時折アプリケーションのログインの失敗やクエリ実行の失敗が起きるようになった。業務量が増えていることは分かっており、現在のリソース量でしばらく耐えられるのかどうかを見極め、現在計画している移行の時期を早めなければならないのか、判断したいと思っている。
トラブルの原因を探る
今回の現象のポイントはどんどん業務量が増える、つまりユーザーやトランザクション量が増えることにあります。この観点でパフォーマンスログを確認しました。CPU利用率は上がってきているものの、ボトルネックになっている様子はありませんでした。Page Life Expectancyは高い値を示しており、メモリ不足はなく、I/Oにも顕著なCurrent Disk Queue Lengthの増大は見られませんでした。
次に幅広く取ってあったパフォーマンスログをじっくり端から端まで見たところ、図1のようなパフォーマンスログを発見し、値が高くなっている前後でエラーが出ていることが分かりました。
「エラーが出力された時間帯でパフォーマンスの傾向が変わったところがあれば、明確な理由付けがなくとも仮説を立てる。さらにその仮説が原因となるシナリオが成立するかどうか検証する」。これがトラブルシューティングのコツです。
SQL Serverは1つのプロセス内で複数のスレッドが動くプログラムです。ユーザーリクエストや内部処理はタスクという内部処理単位に分割され、ワーカースレッド(worker threads)と呼ばれる内部で生成されたスレッドが対応します。
SQL Server内部でスレッドやタスク管理をするコンポーネントを「SQL OS」と呼びます。ここではSQL OSがワーカースレッドの増減を制御していることが重要です。ワーカースレッドを制御するパラメータはmax worker threadsです(図2)。
図2 max worker threadsの管理画面
0に設定した場合は、CPUに応じた規定値が適用される。なお、赤枠の直下にある「SQL Serverの優先度を上げる」「Windowsファイバーを使用する(簡易プーリング)」の設定はしない方がよい。設定するとWindows OS上でのSQL Serverスレッドの扱いが変わるため、システムスレッドが応答できなかったり、クラスタがフェイルオーバーしたりするなど、予期せぬ障害を招くことがある。
今回の現象が起こった理由は、ワーカースレッドの数が要求数に対して不足していたためだと考えられます。ワーカースレッドが不足すると、次のような現象が起きることがあります。
- ログインの失敗
- クエリ実行の失敗
- FCI(Failover Cluster Instance:フェイルオーバークラスタインスタンス)環境の監視失敗によるフェイルオーバー
- ミラーリング環境におけるフェイルオーバー
ワーカースレッドは処理数の増加や並列処理の実行の際に増加する傾向があります。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- 「SQL Server 2016」に搭載される新たなセキュリティ対策を追う
パブリックプレビューが公開されているマイクロソフトのRDB次期版「SQL Server 2016」。特徴の1つとするセキュリティ対策機能のポイントと目指すところをキーパーソンに聞いた。 - そもそも、リレーショナルデータベースとは何か?
データベースを基礎から勉強し理解を深めていくことは簡単なことではありません。本連載では、データベースに対するハードルを少しでも低くするために、初心者の方に必要なデータベースの基本から、障害対策やチューニングといった実践に即した内容までを幅広く解説していきます。今回は、データベースの役割と、それを管理するソフトウェアであるDBMSの基本機能について解説します。【更新】 - データの登録を行うINSERT文
- 複数の条件を指定してSELECT文を実行する
前回は、SELECT文の初歩の初歩を解説しました。今回は、複数の条件を指定して、目的のデータを取り出す方法を解説します(編集部) - Oracle運用の基本「ログ」を理解しよう
本連載では、Oracle Database運用の鍵となるトラブル対処法について紹介していきます。第1回、第2回では情報収集の要となるログについて見ていきます。ログの出力情報は10gと11gとでは大きく異なる点がありますので、それぞれについても確認しておきましょう。