SQL Server 2008 R2「ゴーストメモリ」?


12

奇妙なメモリの問題が発生している専用のSQL Server 2008 R2マシンがあります。マシン自体には、2つのクアッドコアプロセッサ、16 GBのRAM、64ビットWindows Server 2008 R2 Enterprise(Dell PowerEdge 2950)を含む十分なリソースがあります。 。

奇妙な問題は、システムが使用中のメモリの82%を報告しているが、sqlservr.exeが使用中の155MBのみを報告していることです。SQL Serverが問題であると思われる理由は、sqlservr.exeプロセスを再起動すると、メモリ消費が一定期間正常に戻るためです。

この問題の追跡を開始する方法について、誰にもアイデアがありますか?

ありがとう、ジェイソン


3
メモリ内のページをロックするユーザー権利を使用していますか?その場合、ロックされたメモリはタスクマネージャーによって報告されません。詳細については、blogs.technet.com / b / askperf / archive / 2008/03/25 /…を参照してください。
マークS.ラスムッセン

[メモリ内のページのロック]ユーザー権利が[なし]に設定されています。また、デフォルトのint.MaxValueに「最大サーバーメモリ(MB)」設定があります。これが問題の原因になると思いますか?
typefragger

4
心配するのは、SQLサーバーが82%未満のLESSを使用しているときだけです。
SqlACID

回答:


15

サービスが実行されているアカウントにメモリ内のロックページ特権がある場合、タスクマネージャーからメモリ使用量の実際の画像を取得できません(編集:Mark Rasmussenのコメント/リンクによる)。使用されているメモリ量を確認するには、次を参照してください。

  • SQLServer:Memory Manager \ Total Server Memory perfmonカウンター
  • DMV

DMVまたはその組み合わせがメモリ割り当ての合計を提供するかどうかは思い出せませんが、以下にその大部分を示します。

SELECT TOP(10) [type] AS [Memory Clerk Type], SUM(single_pages_kb) AS [SPA Mem, Kb] 
FROM sys.dm_os_memory_clerks 
GROUP BY [type]  
ORDER BY SUM(single_pages_kb) DESC OPTION (RECOMPILE);

SELECT DB_NAME(database_id) AS [Database Name],
COUNT(*) * 8/1024.0 AS [Cached Size (MB)]
FROM sys.dm_os_buffer_descriptors
WHERE database_id > 4 -- system databases
AND database_id <> 32767 -- ResourceDB
GROUP BY DB_NAME(database_id)
ORDER BY [Cached Size (MB)] DESC OPTION (RECOMPILE);

2番目は、通常、最も興味深いデータベースごとのバッファプールの割り当てです。これは、ライオンズ共有が使用される場所であり、どのデータベースが最大の消費者であるかを理解するのに役立ちます。


本当にありがとうございます!これ(特に2つ目)は私にとって完全に明確にしました!
typefragger

8

タスクマネージャーがSQLServerとその追加サービスによって消費されたメモリを正しく表示しない場合に、このケースを扱う私たちのBrent Ozarからの最近の記事があります。ここで見つけることができます:Sysadmin's Guide to Microsoft SQL Server Memory

引用:「SQLServer.exeが大量のメモリを使用しないのはなぜですか?

サーバーにリモートデスクトップでタスクマネージャーを表示すると、sqlservr.exeのMem Usageは常に奇抜に見えます。それはSQL Serverのせいではありません。 タスクマネージャーは汚い、不潔な嘘つきです。 (私は、SQLの男が責任をシフトしているように聞こえますが、少しの間私に耐えます)。 。SQL Serverが使用しているメモリ量を正確に把握するには、Process Explorerなどのツールが必要です。また、SQL Serverのすべてのプロセスを識別する必要があります。右側に示しているサーバーには、2つのSQL Serverインスタンス(sqlservr.exeで表示)と、SQL Agent、SQL Browser、およびSQL Serverバックアップツールがあります。SQL Server Analysis Services、Integration Services、およびReporting Servicesも同じサーバーで実行されていることも珍しくありません。これらはすべてメモリを消費します。

では、SQLはどのくらいのメモリを使用していますか?これを簡単にします。SQL Serverはすべてのメモリを使用しています。限目。"

したがって、Markのクエリを試して、メモリレポート用のより優れたツールを使用することをお勧めします。または、タスクマネージャではなく、Perfmonがメモリを報告することを信頼してください。


-2

タスクマネージャに表示されるように、SQLが使用するメモリの量は、ほとんどがmax-memory設定になります。これが最小/最大設定の仕組みです:

SQLサーバーが起動すると、min-memory設定までメモリを使用し始めます。SQLのニーズが高まると、SQLはmax-memory設定までのメモリの使用を開始します。SQLの使用率が低下しても、メモリはこの(最大)ポイントのままになります。これにより、SQLが巨大なタスクを実行し、多くのメモリを消費している印象を与えます。実際には、このメモリはSQLによって予約されています。

サーバーにSQL以外のメモリ負荷がかかっている場合、SQLはメモリをmin-memory設定ポイントまで解放します。これがメモリ設定の使用方法です。Markのスクリプトを使用して、SQLがこのメモリをどのように使用しているかを確認できます。


1
最小/最大は、バッファプールの割り当てを管理します。これは、BOLのサーバーメモリオプションの説明の最初の行です。この設定は、タスクマネージャーに表示される設定とはまったく関係ありません。Brentのtaskmgrの「汚い、不潔な嘘つき」との説明は、私が読んだことと同様に状況を要約しています。
マークストーリースミス

@ MarkStorey-Smithは、あなた自身のコメントのリンクのさらに下のコンテンツを読んでください。タスクマネージャは、システムリソースの使用状況を表示します。バッファプールはシステムリソースではありません。タスクマネージャに表示されるSQLのメモリ使用量の意味について説明しています。あなたはバッファプールについて言及することで明白なことを述べていますが、それでも私が間違っていることを証明していません。
スタンレージョンズ

これをどの程度改善するのかわからない...「SQLで使用されるメモリの量は、タスクマネージャに表示されるように、ほとんどがmax-memory設定になります。これがmin / max設定の動作方法です。」 't。
マークストーリースミス

「これが最小/最大設定の仕組みです。」最後にコロンがあり、説明が続くことを意味します。前の文を表明するものではありません。:)
スタンレージョンズ

1
マークと一緒です。Slava Oksブログを読んでください 。彼はメモリマネージャーを書いたMSチームの一員でした。「バッファプール」という見出しに移動します。「SQL Serverには、sp_conifigureを使用して制御できる2つのメモリ設定があります。これらは最大および最小サーバーメモリです。わかりませんが、これら2つの設定は実際にバッファプールのサイズを制御します。物理メモリの量SQL Serverによって消費さ」
GBN
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.