web-dev-qa-db-ja.com

低PLEおよびデータウェアハウス

想像してみてください。アプリケーションの複数のインスタンスがあり、複数のサーバーに分散しています。各インスタンスにはデータベースがあり、各データベースのデータは定期的に抽出され、中央のデータウェアハウスに保存されます。古典的なもののように聞こえます。

このDWサイズは〜1 Toで、すべてのテーブルはレコードの作成日にパーティション化されます(毎月)。 DBサーバーには32 Go of RAM= SQLServer(2014、enterprise)が割り当てられています。

問題は、このDBサーバーのPLEが常に低いことです。低は120秒未満を意味します。 PLEの「良い」値の評価は複雑なトピック( here または there )であり、他のインジケーターと相関させる必要があることは知っていますが、私は常に高いほどPLEは、より良い(パフォーマンス、安定性など)です。

本番インスタンスからDWにデータを抽出するプロセスは、5分ごとに実行されます。このプロセスは数千のレコードに影響を与える可能性があり、必ずしも最新のレコードであるとは限りません(たとえば、顧客Aが作成された、6か月前に作成された顧客Bが更新された、など)。そのため、SQLServerは異なるページにアクセスする必要があります。したがって、PLEは低下します。したがって、プロセスは現在設計されているので、低いPLEは私には普通のようです。このDWを使用する他のすべてのプロセス(レポート、集計など)は安定していてパフォーマンスが高いため、実際にはそれほど大した問題ではないかもしれません。

だから、質問:

  • 私の理解はこの文脈で正しいと低いPLE正常ですか
  • 心配するのをやめて、NagiosがPLEが低すぎると言うたびに叫ばないように監督の人に言うべきですか?
  • または、私は馬鹿げた質問をするのをやめて、より多くのCPU/RAM?
2
irimias

頻繁にリロードしてデータウェアハウスの設定でSQL Serverのページの平均寿命(PLE)が上下にジャンプするのは正常な場合があります。

どうして?

さて、ユーザーは通常どのデータをクエリしますか?最近挿入されたのは興味深いデータだからです。長期間にわたって分析を実行し、昨年のデータに基づいて予測を行っている場合を除きます。

メモリ内のページ処理(バッファキャッシュ)

Microsoft SQL Serverでは、メモリに格納されている各ページに内部カウンターがあります。このカウンターは4から始まり、SQL Serverデータベースエンジンがページを見るたびに、読み取りが行われなかったときに1ずつ差し引かれます。

このアルゴリズムでは、定期的にキャッシュをスイープする「クロックハンド」があります。時計の針が未使用のエントリを踏むたびに、コストがいくらか減少します。エントリが使用されておらず、そのコストがゼロの場合、時計の針はエントリを非表示にしてから、キャッシュからの削除を試みます。実際、エントリのライフタイムは、Clock Entry Infoクラスに埋め込まれた参照カウントによって管理されます。このカウントが0になると、エントリは破棄されます。

(参照: SQL Serverメモリの詳細-パート2

データウェアハウスのセットアップでは、新しいデータをロードするたび、およびユーザーがこの新しいデータを要求するたびに、ディスクからメモリ(バッファーキャッシュ)にデータを読み取る必要があります。これにより、内部カウンターにゼロがあるすべてのページがバッファーキャッシュから削除されます。

ページの平均余命

データページをバッファキャッシュから削除し、新しいデータをディスクからバッファキャッシュに移動すると、ページの寿命の値が お勧め 新しいページのPLEが最初はゼロ(0)であるため、しきい値は300。メモリ内のすべての新しいページ(PLE = 0)とメモリ内のすべての古いページ(PLE> 300)の合計は、300を下回ることがあります。

300のPLEは、最近の推奨事項ではありません。

PLEが300の場合、バッファープール全体が効果的にフラッシュされ、5分ごとに再読み取りされます。 PLEのしきい値のガイダンスである300がMicrosoftによって最初に与えられたとき(2005/2006年頃)、サーバー上の平均メモリ量がはるかに少なかったので、その数値はより理にかなっているかもしれません。今日では、サーバーに64GB、128GB、およびそれ以上のメモリが日常的に搭載されているため、ディスクから5分おきにデータが読み取られるのは、パフォーマンスの問題の原因になる可能性があります...

参照: Knee-Jerk PerfMon Counters:Page Life Expectancy

現在のハードウェアを前提として、SQL Serverは設計どおりに動作しています

その他のハードウェア?

ユーザーがデータを取得するときにパフォーマンスの問題が発生している場合、SQL Serverはより多くのデータをバッファキャッシュに格納できるため、メモリを増やすことでメリットがあるかもしれません新しいデータが読み込まれたときにすべてのデータを削除します。 PLEカウンターは、新しいデータがDWデータベースに格納された場合でもおそらく低下しますが、それほど劇的には低下しない可能性があります。

ベースライン

システムを監視し、baselinenormalの動作を示す必要があります。規範の外にあるものはすべて分析に値します。

ベースラインデータのキャプチャを開始する必要がある5つの理由

ベースラインは良い考えです。私が話をしたすべてのDBAはその価値を理解しているようです:では、なぜそれほど多くの企業がベースラインデータを持っていないのですか?ふたつの要因があると思います。 1つ目は立ち上げコストであり、コストとは時間と労力のことです。ベースラインをキャプチャするための独自の方法を導入する場合、次の質問に答えて、いくつかのことを考慮する必要があります。-どのデータをキャプチャしますか? -データをキャプチャするのはいつですか? -データを取得するためにどのような方法を使用しますか? -どこに保管しますか? -どのように報告しますか? -データを長期的にどのように管理しますか?

基本に戻る:本番SQLサーバーでのベースラインのキャプチャ

ベースラインが分かれば、DW SQL Serverに適したPLEの値がわかります。

3