バッファプール外のSQL Server 2012メモリ消費


10

SQL Server 2012 SP2 Enterprise Editionのインスタンスを使用しており、最大よりも20 GB高いメモリを消費しています。メモリ制限。インスタンスは65GBに制限されていますが、以下のクエリで使用中の物理メモリは86GBを示しています

SELECT (physical_memory_in_use_kb/1024)/1024 AS [PhysicalMemInUseGB]
FROM sys.dm_os_process_memory;
GO

サーバーは2つのNUMAノードを持つ物理的なものです。バッファプールの外でメモリを消費しているものを見つける方法はありますか(それが起こっていると想定しています)?

DBCC MEMORYSTATUSの出力は次のとおりです。

DBCC MEMORYSTATUSの出力

そして、ここに設定されたメモリ制限があります:-

メモリ制限のスクリーンショット

前もって感謝します。

更新:-アーロンが提案したクエリを実行しました

SELECT TOP (20) * FROM sys.dm_os_memory_clerks ORDER BY pages_kb DESC

これが出力です:-

MemoryClerkOutput

pages_kbの合計は最大60GBになります

UPDATE 2: - DBCC MEMORYSTATUSの全出力はここにある: - http://pastebin.com/nGn6kXEc

UPDATE 3: -ここでは、Excelファイル内Shankyのスクリプトの出力: - http://jmp.sh/LKRlH4K

更新4:-出力のスクリーンショット:-

SELECT (physical_memory_in_use_kb/1024)/1024 AS [PhysicalMemInUseGB]
FROM sys.dm_os_process_memory;
GO

PhysMemInUseスクリーンショット

したがって、これはSQL Serverが65GB以上のセットを使用していることを示しているようです。


これは何をもたらしますか?SELECT TOP (20) * FROM sys.dm_os_memory_clerks ORDER BY pages_kb DESC;
アーロンバートランド

こんにちはアーロン、返信ありがとうございます。質問を出力で今すぐ更新します
dbafromthecold '21 / 01/15

回答:


11

最大サーバーメモリは、バッファープールとすべてのページサイズの割り当てを制御しますが、Windowsの直接割り当て(リンクサーバー、sp_OA、XP)、スレッド/スレッドスタックに必要なメモリなどは制御しません

これはNUMAの方が高いと予想できます(20 GBが正常かどうかはわかりません)。ポイントは、最大サーバーメモリがSQL Serverのインスタンスによって使用されるメモリを完全に制御することは期待できないということです。インスタンス全体(バッファープール、プランキャッシュ、およびCLRだけでなく)が64GBを超えないようにする場合は、最大サーバーメモリをより低い値に設定する必要があります。

これを追跡するためのいくつかの潜在的なアイデア(私はすべてをMBに正規化します):

  • パフォーマンスカウンター

    何かが極端に大きいものとしてここから飛び出しているかどうかを確認します。

    SELECT counter_name, instance_name, mb = cntr_value/1024.0
      FROM sys.dm_os_performance_counters 
      WHERE (counter_name = N'Cursor memory usage' and instance_name <> N'_Total')
      OR (instance_name = N'' AND counter_name IN 
           (N'Connection Memory (KB)', N'Granted Workspace Memory (KB)', 
            N'Lock Memory (KB)', N'Optimizer Memory (KB)', N'Stolen Server Memory (KB)', 
            N'Log Pool Memory (KB)', N'Free Memory (KB)')
      ) ORDER BY mb DESC;
  • トップ20の店員

    これはすでに完了していますが、完全を期すために:

    SELECT TOP (21) [type] = COALESCE([type],'Total'), 
      mb = SUM(pages_kb/1024.0)
    FROM sys.dm_os_memory_clerks
    GROUP BY GROUPING SETS((type),())
    ORDER BY mb DESC;
  • スレッドスタックサイズ

    まず、これがゼロであり、カスタム番号ではないことを確認してください(0でない場合は、理由を調べて修正してください)。

    SELECT value_in_use
      FROM sys.configurations 
      WHERE name = N'max worker threads';

    ただし、次のコマンドを使用して、スレッドスタックが使用しているメモリの量も確認できます。

    SELECT stack_size_in_bytes/1024.0/1024 
      FROM sys.dm_os_sys_info;
  • ロードされたサードパーティのモジュール

    SELECT base_address, description, name
      FROM sys.dm_os_loaded_modules 
      WHERE company NOT LIKE N'Microsoft%';
    
    -- you can probably trace down memory usage using the base_address
  • メモリ関連のDMV

    また、これらのDMVを見て通常とは異なる何かを見つけることができる場合もあります。

    SELECT * FROM sys.dm_os_sys_memory;
    SELECT * FROM sys.dm_os_memory_nodes WHERE memory_node_id <> 64;

この記事はSQL Server 2012より前に作成されたため、一部の列名と計算を調整する必要がある場合がありますが、他にも試してみる方法があります。

そのサイトの他の記事にもいくつかの良い背景があります:

外でメモリを使用するものの種類に関するいくつかの良い情報max server memory(しかし、実際の使用状況を収集する方法についての良いデータはありません):


Aaron氏に感謝します。サーバーには十分なメモリがあり、20 GBを何が使用しているかを確認できるかどうかを確認したいだけです。直接Windows割り当てまたはスレッドスタックのメモリ消費を識別する方法はありますか?
dbafromthecold 2015年

スクリプトを実行しましたが、Stolen Server Memory(KB)カウンターは14GBです。さらに情報を得ることができるかどうかを確認するために掘りに行く
dbafromthecold 2015年

盗まれたサーバーメモリは問題のようではないようです。まだ見ています
dbafromthecold 2015年

ここでは問題ではありませんが、列ストアオブジェクトプール(CACHESTORE_COLUMNSTOREOBJECTPOOLメモリクラークタイプ)もバッファプールの外にあることを言及する価値があります。参照してくださいニコノイゲバウアーからこのブログの記事
BlažDakskobler

@BlažDakskoblerはい、ありがとう、インメモリも。機会があれば投稿を更新します
アーロンベルトラン

3

SQL Server 2012の最大サーバーメモリが何を制御するかについて、ボブドーアから以下の定義を得ました。詳細については、Books Onlineを読むこともできます

最大サーバーメモリは、バッファープール、コンパイルメモリ、すべてのキャッシュ、QEメモリ許可、ロックマネージャーメモリ、CLRメモリ(基本的にはdm_os_memory_clerksにある「クラーク」)を含むSQL Serverメモリの割り当てを制御します。スレッドスタック、メモリヒープ、SQL Server以外のリンクサーバープロバイダー、または「非SQL Server」DLLによって割り当てられたメモリは、最大サーバーメモリによって制御されません。

スレッドスタック、サードパーティDLL、Microsoft以外のリンクサーバープロバイダー(MySQL.PostgreSQLなど)に割り当てられたメモリ、またはSQL Server以外のSQL Serverアドレス空間に読み込まれたDLLは、最大サーバーメモリの外部に割り当てられます。SQL Server 2012のIIRCバックアップ操作でも、バッファープール外のメモリが割り当てられます。

リンクサーバーを使用して他のRDBMSをクエリしていますか?同じWindowsマシンにインストールされているその他のソフトウェア。次のクエリの出力を共有場所に投稿できますか

select type,
sum(pages_kb)/1024 as [Memory utilized in MB],
sum(awe_allocated_kb)/1024 as [Memory allocated though Windows API]
 from sys.dm_os_memory_clerks
 group by type
 order by [Memory utilized in MB] desc
 Go
-------

 select (virtual_address_space_committed_kb/1024) as virtual_address_space_committed_MB,
 (locked_page_allocations_kb/1024) locked_page_allocations_MB,
 (pages_kb/1024) [memory allocated MB]
  from sys.dm_os_memory_nodes
  Go
-------
SELECT SUM (pages_in_bytes)/1024 as 'KB Used', type 
FROM sys.dm_os_memory_objects
GROUP BY type 
ORDER BY 'KB Used' DESC;
GO
--------
select name,
type,
sum(pages_kb)/1024 as [Mem MB],
sum(entries_count) as [Total Entry count] from sys.dm_os_memory_cache_counters
group by
type, name
order by [Mem MB] desc
Go
-----
select * from sys.dm_os_loaded_modules where company <> 'Microsoft Corporation'
go

DBCC MMEMORYSTATUSいくつかの共有場所に完全な出力をアップロードして、リンクをここに投稿することもできます。これは、どのコンポーネントがメモリを使用しているかを理解するのに役立ちます

編集: dbcc memorystatusの出力に従って、2つのNUMAノードを確認でき、各ノードで使用されるメモリはおよそです。

Node 1 : VM Committed 33554380

Node 2: VM Committed  33554420

Total is approx 64 G. 

ここでも、memorystatus出力でメモリマネージャが表示された場合、

Memory Manager                           KB
---------------------------------------- -----------
VM Reserved                              260726964
VM Committed                             **67108820**

コミットされたVMは、実際にはSQL Serverによってコミットされた仮想メモリであり、このメモリがコミットされているため、仮想メモリが割り当てられますphysical memory backing it。これも、SQL Serverが最大サーバーメモリの設定で65Gを使用していると思います

これが最大サーバーメモリです。したがって、メモリは両方のノード間で適切に分散されているため、以下のクエリジュットの出力を追加して確認することもできます。スクリーンショットを追加してください

SELECT (physical_memory_in_use_kb/1024)/1024 AS [PhysicalMemInUseGB]
FROM sys.dm_os_process_memory;
GO

@DBAFromTheCold:遅いですが、まだ答えを探していますか?はい、もう一度試してみたいと思います:)の完全な出力を投稿できますかselect * from sys.dm_so_process_memory
2015

こんにちはシャンキー、応答をありがとう、問題はそれ自体で解決しました。私の側では何もありません、SQLはそれ自体でメモリを解放しました。私はサーバーを監視しており、それが再び発生した場合は、更新を投稿します。本当にこれの底に行きたいです。
dbafromthecold 2015年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.