高性能のSQLServerを維持することは、組織の運用だけでなく、顧客にとっても不可欠です。サーバーの応答が遅い場合、またはまったく応答しない場合は、ビジネスを失うことになります。 SQL Serverのパフォーマンスが最適であることを確認するために綿密に監視する3つの重要な領域と、メトリックに問題があることが示された場合にパフォーマンスを向上させる方法を次に示します。
インデックス
インデックスが正常に機能している場合、それらは高速でスムーズに実行されるシステムに貢献します。ただし、インデックスがこれらの一般的な問題のいずれかに苦しんでいる場合は、SQLServerのパフォーマンスに悪影響が及ぶ可能性があります。
監視する指標:フィルファクター
塗りつぶし係数は、各ページをXパーセント塗りつぶすようにインデックスに指示するSQLServerの設定です。各ページを100%塗りつぶしたいのは直感的に思えますが、実際には、ページを塗りつぶしすぎるとページが分割される可能性があります。管理者がページ全体に行を追加すると、新しい行は既存の行の約半分を新しいページにプッシュし、新しい行は最初のページの下部に追加されます。
ページ分割は、I / O操作の数が増え、断片化の可能性があるため、パフォーマンスの問題を引き起こす可能性があります。ただし、ページのスペースが多すぎると、リソースが不必要に消費されるため、パフォーマンスが低下する可能性もあります。
フィルファクタの設定から最高のパフォーマンス結果を得るには、システム全体の値を設定しないでください。インデックスを個別に確認し、それぞれに適切なレベルで曲線因子を設定します。たとえば、頻繁に断片化されるインデックスには、ほとんど使用されないインデックスとは異なる曲線因子値が必要です。
監視する指標:断片化
インデックスの断片化は、ユーザーがレコードを追加および削除するときに発生します。物事を移動することは、データベースの日常業務の通常の部分ですが、時間の経過とともに、断片化はパフォーマンスに影響を与えます。断片化はいくつかの問題を引き起こす可能性があります:
- ページ数が多すぎると空白が多すぎるとスキャンが遅くなり、メモリを不必要に使用します
- 新しいページが順不同で追加されるため、サーバーがデータを見つけるのに時間がかかります
断片化がパフォーマンスに影響を及ぼし始めたら、再構築または再編成を実行して、断片化されたインデックスをクリーンアップする必要があります。 Rebuildを実行すると、新しいインデックスが作成され、余分な空白が削除されます。 Reorganizeは、サーバーがデータをより簡単に見つけられるように、リーフページを整理します。
バッファキャッシュ
SQL Serverがバッファキャッシュ内のページを読み取ることができる場合、応答時間は速くなります。サーバーがページを見つけるためにディスクに移動する必要がある場合、ページをバッファに保存してから読み取る前に一連の手順を実行する必要があるため、パフォーマンスが低下します。バッファキャッシュを最高のパフォーマンスで実行し続けるのに役立つ、追跡できるメトリックがいくつかあります。
監視する指標:ページの平均余命
ページの平均余命(PLE)は、ページがディスクに送り返される前に呼び出されずにバッファキャッシュにとどまる時間です。 PLEを増やすとパフォーマンスが向上しますが、他の機能に必要になる可能性のあるメモリも使用します。 PLEを調整する場合は、他の場所でパフォーマンスに影響を与えることなく、使用できるメモリの量を把握する必要があります。
監視するメトリック:バッファキャッシュヒット率
バッファキャッシュヒット率は、すべてのページ要求に対するバッファプールにあるページの割合です。最高のパフォーマンスを得るには、バッファキャッシュのヒット率を90以上にする必要があります(つまり、SQL Serverはディスクから読み取る必要がありません)。バッファキャッシュのヒット率データを分析するときは注意してください。比率のわずかな減少は、実際の問題を示していない場合があります。 PLEと組み合わせてデータを分析し、実際のパフォーマンスの問題が存在するかどうかを判断します。
クエリの最適化
低速でパフォーマンスの低いクエリは、SQLServerのパフォーマンスに関する最も一般的な問題の1つです。クエリがうまく実行されない理由はたくさん考えられるため、正確な原因を特定するのは難しい場合があります。ただし、調査の早い段階で試すことができることがいくつかあり、最小限の労力でクエリのパフォーマンスを向上させることができます。
監視するメトリック:インデックススキャン
SQL Serverの状態をチェックすることは、DBAの定期的な業務の一部である必要があります。クエリの実行が遅い場合は、クエリオプティマイザで少し余分な時間を費やしてください。チェックする重要なことの1つは、SQLServerインデックススキャンに対処する必要のある問題があるかどうかです。
もう1つの潜在的なパフォーマンスキラーは、インデックススキャンが必要以上に頻繁に実行されることです。クエリはすべての行をスキャンして有用なデータを探す必要があるため、インデックススキャンはインデックスシークよりもはるかに時間がかかります。クエリオプティマイザを設定して、インデックスをスキャンするよりも頻繁にインデックスを検索するようにします。
問題のあるクエリを書き直すことは、パフォーマンスを向上させるもう1つの方法です。クエリを単純化すると、クエリが停止する原因となっている部分が削除される場合があります。インデックスを追加してクエリを高速化することもできますが、これは場合によっては他の場合よりもうまく機能します。
インデックスの追加は、検索、グループ化、または並べ替えに関係するフィールドに適したソリューションです。頻繁にアクセスされるフィールド。および一意の値を持つフィールド。通常、yes/noなどの重複する値を持つフィールドや小さなテーブルにインデックスを追加することは効果的ではありません。
SQL Serverのパフォーマンスの監視は、高性能のデータベースを維持するために重要です。 SQL Serverを最高速度で実行し続けるには、パフォーマンスメトリックに細心の注意を払う必要があります。上記の指標をメンテナンスチェックリストに追加して、SQLServerのパフォーマンスの問題を早期に特定して修正します。