SQL Serverのページ寿命(PLE)メトリックは、データベースインスタンスの全体的な状態を確認するDBAの主要業績評価指標と長い間考えられてきました。 PLEは、Buffer Managerオブジェクトによって提供されるカウンターを使用して、システムが内部メモリの負荷にさらされているかどうかを示します。
ページの平均余命を詳しく見る
PLEは、データファイルページがSQL Serverのバッファプールにとどまると予想される時間の長さ(秒単位)の尺度です。このメトリックは、集計または累積ではなく、DBAがバッファーマネージャーから照会する特定の時点の値です。
SQL Serverは、バッファプールからデータページを読み取る(つまり、論理読み取り)だけなので、ページがバッファプールにない場合は、ディスク上でそれを見つけ(つまり、物理読み取り)、ページをバッファプールに移動します。論理読み取りを実行できます。これは時間のかかるプロセスであり、パフォーマンスに悪影響を与える可能性があります。
「良い」PLE値とは何ですか?
PLE値が高いということは、ページがバッファプールに長く留まっていることを意味します。そのため、SQL Serverはデータページを探すためにディスクに移動する必要が少なくなり、システムの実行速度が向上します。
歴史的に、DBAは300秒(5分)をPLEスイートスポットと見なしていました。ただし、その数はかなり任意です。マイクロソフトは、メモリが制限されていた2000年代にPLE標準として300を推奨しました。
現在、ほとんどのシステムにはメモリのバケットが標準装備されているため、DBAは「正しい」数に焦点を合わせていません。 SQL ServerがTBのRAMを自由に使用できるシステムで実行されることは珍しいことではないため、DBAは「適切な」PLE値を特定するための公式なアプローチを採用しています。
ページの平均余命=サーバー上の4GBのRAMごとに300秒
ただし、メモリの問題を特定して迅速に解決できるように、一貫性の変化についてPLE値を継続的に監視することがおそらくより重要です。
大量のデータを処理する場合、大規模なサーバーには複数のPLEがあることが多いことに注意することが重要です。各Non-UniformMemoryAccess(NUMA)ノードは独自のPLE値を取得し、それらの数値が計算されてサーバーのPLE値が取得されます。たとえば、ノードのPLE値x 1,000を取得します(これはすべてのNUMAノードに対して実行します)。すべてのノードの値を加算し、NUMAノードの総数で除算してから、再度1,000で除算します。これにより、サーバーPLEが提供されます。
ページの平均余命に問題があるかどうかを判断する方法
PLEの変動はワークロードに基づいているため、正常です。高い傾向、平均的な傾向、低い傾向を追跡することで、テーブルスキャンやバッファキャッシュのフラッシュなどの特定のプロセスを調整してPLEを改善する必要があるかどうかを確認できます。
問題があるかどうかを判断する良い方法は、通常のPLE値の範囲が低下して低いままであるかどうかです。これは、バッファプールに対する需要と圧力が増加している可能性があることを示しています。
これは、問題にもう少しメモリを投入する必要があることを意味しますか?多分。多分そうではありません。
SQLServerのページ寿命が短い場合のトラブルシューティング
PLE値が低くなる傾向にある理由はいくつかあります。解決策はすべての根本原因で同じではないため、問題のトラブルシューティングを行うことが重要です。 PLEの速度を低下させている可能性が最も高い3つの原因は次のとおりです。
メモリ不足
ワークロードが着実に増加し、PLEが減少している場合は、メモリが不足している可能性があります。メモリを追加するとPLEを増やすことができますが、クエリをより効率的に実行することはできません。
高価な操作
ワークロードが変更されていないが、バッファプールに対する需要が増加している場合は、外れ値がより多くのメモリを使用している可能性があります。実行中のメンテナンスジョブまたはインデックスの再構築が進行中であるかどうかを確認します。
古い統計
古い統計により、クエリプランが変更される可能性があります。これにより、新しい統計と同期されないため、コストのかかる操作が実行されるため、バッファプールの需要が増加します。
クエリを最適化して低いページ寿命を修正する方法
低いPLE値を修正する最良の方法は、ソースに移動してSQLServerクエリを最適化することです。クエリを最適化するとシステムの全体的なパフォーマンスが同時に向上するため、これには追加のボーナスがあります。
PLEを最大限に改善するためにクエリを最適化するのに役立つ、実行したいことがいくつかあります。
- 未使用のインデックスを削除する
- 重複するインデックスをマージする
- 大きなクエリを探す
- バッファプールに何があるかを知る
- インデックスの最適化
- 統計の更新
- データを削除する
ページの平均余命を経時的に追跡する
PLEは特定時点の指標ですが、時間の経過とともにPLEを確認することは、問題を早期に特定し、パフォーマンスに大きな影響を与える前に迅速に修正するための重要な方法です。
時間の経過とともにPLEメトリックを監視し、トランザクションによって大量の読み取りが発生するクエリを特定する方法は多数あります。 SQL ServerのDMVと拡張イベントは、実証済みの方法であり、データを収集するこのプロセスに役立ちました。ただし、これらは手動で時間がかかるため、時間の経過に伴うメトリックのパフォーマンスに関する履歴の観点を取得する場合、メリットは限られています。
Spotlight Cloudのような商用ソリューションは、DBAに、箱から出してすぐにPLEを経時的に追跡する機能を提供するだけでなく、ワークロードを分析して、バッファープールに圧力をかけているクエリと外れ値のアクティビティを特定し、問題を解決し、SQLServerのパフォーマンスを最適化します。
当初は2019年4月に公開され、2020年9月に更新されました。