web-dev-qa-db-ja.com

SQL Serverのメモリ不足-LPIMを有効にするかどうか

SQL Server 2016でクエリの実行が遅い。

サーバー構成:

  1. 合計物理メモリ:128 GB
  2. SQLサーバーの最大メモリ:102 GB
  3. トランザクションの複製が有効になっています。
  4. データベースサイズ:1.6 TB
  5. Microsoft SQL Server 2016(SP2)(KB4052908)-13.0.5026.0(X64)Mar 18 2018 2018 09:11:49 Copyright(c)Microsoft Corporation Standard Edition(64-bit)on Windows Server 2016 Standard 10.0(Build 14393:)

ring bufferクエリを実行して、物理メモリが少ないかどうかを確認しました。メモリプレッシャーのリングバッファーを確認した理由は、キャッシュをクリアするスクリプトを実行しているユーザーがいない場合でも、プランのキャッシュも頻繁にクリアされるためです。Avail Phys Mem.KB

私が学んだことの1つは、すべてのRESOURCE_MEMPHYSICAL_LOWインジケータープロセスが2であることです。つまり、メモリの問題は、SQL Serverに割り当てられたメモリにあり、OSや他のアプリケーションで利用可能な残りのメモリではありません。ご参考までに。これはSQL Server専用サーバーです。

enter image description here

また、パフォーマンスモニターでAvaialable MBytesを確認したところ、以下のように値16,662.00(16 GB)が表示されました。

OS +その他のアプリケーションには16 GBで十分だと思います。これはSQLサーバー専用サーバーです。

enter image description here

サーバーの診断も確認しました。それは25 GBが利用可能であると言います。

enter image description here

だから今私は混乱しています:

  1. このサーバーにメモリのプレッシャーはありますか?
  2. RESOURCE_MEMPHYSICAL_LOWフラグは、OS、外部プロセス、またはSQL Serverによって設定されていますか?
  3. この問題を修正するには、LPIMを有効にする必要がありますか?

@Shankyの回答による詳細。

  1. クエリストアを有効にしましたが、1週間前に無効にしました。
  2. 時計の針がHAND_EXTERNALのSQL Serverプランのrounds_countは増加しています。

詳細。

  • 一部のクエリで大量のメモリが付与されているため、RESOURCE_SEMAPHOREが他のクエリを待機しています。

この巨大なメモリ許可(私がチェックした1つのクエリ、メモリ許可は〜7GB)はSQLサーバーからのメモリ不足を引き起こし、これがプランキャッシュのクリアとRESOURCE_MEMPHYSICAL_LOWフラグの原因になる可能性がありますか?.

3
user9516827

このサーバーでメモリ不足はありませんか。

情報が限られているため、確実には言えません。メモリプレッシャーを通知するには、さらに多くのパラメーターとperfmonからの出力が必要です。しかし、そうです。あなたが投稿したクエリ出力から、[2018-10-23 11:22:30:457]の期間に、SQL Serverシステム全体ではなく、一部のプロセスのメモリが実際に不足していました。

rESOURCE_MEMPHYSICAL_LOWフラグがOSまたは外部プロセスまたはSQLサーバーによって設定されています。

RESOURCE_MEMPHYSICAL_LOWにはIndicatorProcessからの2の値があるという出力を見てください。これは、IndicatorSystemが実行する場合、実行中の特定のプロセスが実際にメモリ不足に直面していたことを意味します値が2の場合は、システム全体のメモリに負荷がかかります。また、メモリ不足は、仮想メモリ(VAS)が低く、物理(RAM)が低いことに起因していることに注意してください。つまり、1つの時間の値を取るだけで、継続的のメモリプレッシャーがあるとは言いがたいことがわかります。 sys.dm_os_ring_buffersを使用してSQL Serverのメモリの問題を診断する を読んで、IndicatorsystemとIndicatorProcessの値の意味を理解することをお勧めします

lPIMを有効にしてこの問題を修正する必要がありますか?

LPIMはではない問題を修正するmask問題と回避策として来るでしょう。リソースモニターがメモリ不足の通知にフラグを立てている原因を見つける必要があります。実行中のプロセスが原因である可能性があります。プランキャッシュが頻繁にクリアされるのは、SQL Server 2016以降から多くの人が報告したことであり、クエリストアが原因である可能性があります可能性があります、それを使用していますか? 。クエリストアは、以前はプランキャッシュのクリアの原因となっていましたが、最新のSPを使用しているので、この要素に疑問があります。

キャッシュのメモリ負荷を確認するには、DMVも使用できます sys.dm_os_memory_cache_clock_hands

SELECT  *
FROM sys.dm_os_memory_cache_clock_hands
WHERE rounds_count > 0

rounds_countが増加している場合、これは、クロックを強制的にキャッシュmoreに頻繁にスイープさせ、エントリを削除するというプレッシャーがあったことを意味します。

編集:

いくつかのクエリによる巨大なメモリ許可に直面しており、これによりRESOURCE_SEMAPHOREは他のクエリを待機します。この巨大なメモリ許可(1つのクエリを確認したところ、メモリ許可は〜7GB)はSQLサーバーからのメモリ不足を引き起こし、これが原因である可能性がありますプランキャッシュのクリアとRESOURCE_MEMPHYSICAL_LOWフラグ。

はい、おそらく、この質問で 特定のスレッド が発生するのを確認しました。統計を更新し、インデックスをデフラグしたことを確認する前に、それを追加します。統計が古くなっていると、プランが不良になり、結果としてより多くのメモリを要求し、セマフォが待機する可能性があります。

以下は、同様の問題について話しているスレッドのリストです

3
Shanky