本連載は、「Microsoft SQL Server」で発生するトラブルを「どんな方法で」「どのように」解決していくか、正しい対処のためのノウハウを紹介します。今回は「データベース刷新でアプリケーションのレスポンスが悪くなった事例とその対処方法 2」を解説します。
本連載では、「Microsoft SQL Server(以下、SQL Server)」で発生するトラブルについて、「なぜ起こったか」の理由とともに具体的な対処方法を紹介していきます。
プライベートクラウド環境の「Windows Server 2012 R2」上に「SQL Server 2016 RTM」をインストールした環境を想定して解説します。
トラブルの実例:自社内で大規模な投資を行い、プライベートクラウドを構築。そこにデータベースサーバを展開して運用を開始した。
稼働は順調だったが、特定の周期で処理遅延が発生することが判明した。
データベースサーバの情報を調べたところ、以下のような状況でした。
「トラブル 30:老朽化したデータベースを刷新したのに、アプリケーションのレスポンスが悪くなった」の事例と違い、今回はメモリ不足が原因ではありません。しかし、「Current Disk Queue Length」を確認すると、9時30分以降でI/O待ちが急に増えていたことが分かりました。このことから、このトラブルの原因はディスクI/Oにあると推定されます。併せてディスク関連のカウンターをさらに確認すると「Disk Idle Time」が極端に低下していることも分かりました。Disk Idle Timeが極端に低いということは、Windowsから見るとディスクがビジー状態で、I/Oができないことを示しています。
なぜディスク側で処理が止まっているのでしょう。それを調査するために、まず「接続されているディスクの調査」が必要です。今回のシステムはプライベートクラウド環境での例なので、仮想化基盤全体の調査を行うということになります。
筆者が主に確認するディスク関連のカウンターは以下の通りです。これらの値を採取し、正常時と異常時とを比較します。「データベース処理遅延に対処するための『パフォーマンスログ』を採取する方法」で解説したパフォーマンスカウンターとともにこちらも追加しておくとよいでしょう。
オブジェクト名 | カウンター名 | 内容 |
---|---|---|
Physical Disk | Avg. Disk Queue Length Current Disk Queue Length |
ディスクへのI/O待ちになっている要求の数 |
Disk Reads/sec Disk Writes/sec |
1秒当たりのI/O読み書き数 | |
Avg. Disk sec/Read Avg. Disk sec/Write |
I/O当たりの平均処理時間 | |
%Idle Time | OSから見たディスクの活動状況 | |
この事例では、ディスク側で定期的なメンテナンスジョブが動いており、それが接続されている仮想マシンへのサービスよりも優先度が高く設定されていました。そのために、データベースのI/Oが影響を受けていました。
Copyright © ITmedia, Inc. All Rights Reserved.