sys.dm_os_memory_objects (Transact-SQL)

適用対象:yesSQL Server (サポートされているすべてのバージョン) YesAzure SQL Database YesAzure SQL Managed Instance yesAzure Synapse Analytics yesAnalytics Platform System (PDW)

SQL Serverによって現在割り当てられているメモリ オブジェクトを返します。 sys.dm_os_memory_objectsを使用して、メモリ使用量を分析し、考えられるメモリ リークを特定できます。

注意

Azure Synapse Analytics または Analytics Platform System (PDW) からこれを呼び出すには、sys.dm_pdw_nodes_os_memory_objectsという名前を使用します。 この構文は、Azure Synapse Analytics のサーバーレス SQL プールでサポートされていません。

列名 データ型 説明
memory_object_address varbinary(8) メモリ オブジェクトのアドレス。 NULL 値は許可されません。
parent_address varbinary(8) 親メモリ オブジェクトのアドレス。 NULL 値が許可されます。
pages_allocated_count int 適用対象: SQL Server 2008 から SQL Server 2008 R2

メモリ オブジェクトによって割り当てられているページ数。 NULL 値は許可されません。
pages_in_bytes bigint 適用対象: SQL Server 2012 (11.x) 以降。

メモリ オブジェクトのこのインスタンスによって割り当てられるメモリの量 (バイト単位)。 NULL 値は許可されません。
creation_options int 内部使用のみです。 NULL 値が許可されます。
bytes_used bigint 内部使用のみです。 NULL 値が許可されます。
type nvarchar(60) メモリ オブジェクトの種類。

これは、このメモリ オブジェクトが属しているコンポーネント、またはメモリ オブジェクトの関数を示します。 NULL 値が許可されます。
name varchar(128) 内部使用のみ。 NULL 値は許可されます。
memory_node_id smallint メモリ オブジェクトが使用しているメモリ ノードの ID。 NULL 値は許可されません。
creation_time datetime 内部使用のみ。 NULL 値が許可されます。
max_pages_allocated_count int 適用対象: SQL Server 2008 から SQL Server 2008 R2

このメモリ オブジェクトによって割り当てられたページの最大数。 NULL 値は許可されません。
page_size_in_bytes int 適用対象: SQL Server 2012 (11.x) 以降。

メモリ オブジェクトによって割り当てられているのページのサイズ (バイト単位)。 NULL 値は許可されません。
max_pages_in_bytes bigint このメモリ オブジェクトで使用されたメモリの最大量。 NULL 値は許可されません。
page_allocator_address varbinary(8) ページ アロケーターのメモリ アドレス。 NULL 値は許可されません。 詳しくは「sys.dm_os_memory_clerks (Transact-SQL)」をご覧ください。
creation_stack_address varbinary(8) 内部使用のみ。 NULL 値が許可されます。
sequence_num int 内部使用のみです。 NULL 値が許可されます。
partition_type int 適用対象: SQL Server 2016 (13.x) 以降。

パーティションの種類:

0 - パーティション分割できないメモリ オブジェクト

1 - 現在パーティション分割されていないパーティション分割可能なメモリ オブジェクト

2 - NUMA ノードによってパーティション分割されたパーティション分割可能なメモリ オブジェクト。 1 つの NUMA ノードがある環境では、これは 1 に相当します。

3 - CPU によってパーティション分割されたパーティション分割可能なメモリ オブジェクト。
contention_factor real 適用対象: SQL Server 2016 (13.x) 以降。

このメモリ オブジェクトの競合を指定する値。0 は競合がないことを意味します。 この値は、その期間中に競合を反映して、指定された数のメモリ割り当てが行われるたびに更新されます。 スレッド セーフ メモリ オブジェクトにのみ適用されます。
waiting_tasks_count bigint 適用対象: SQL Server 2016 (13.x) 以降。

このメモリ オブジェクトに対する待機の数。 このカウンターは、このメモリ オブジェクトからメモリが割り当てられるたびにインクリメントされます。 インクリメントは、現在このメモリ オブジェクトへのアクセスを待機しているタスクの数です。 スレッド セーフ メモリ オブジェクトにのみ適用されます。 これは、正確性の保証のないベスト エフォート値です。
exclusive_access_count bigint 適用対象: SQL Server 2016 (13.x) 以降。

このメモリ オブジェクトが排他的にアクセスされた頻度を指定します。 スレッド セーフ メモリ オブジェクトにのみ適用されます。 これは、正確性の保証のないベスト エフォート値です。
pdw_node_id int 適用対象: Azure Synapse Analytics、Analytics Platform System (PDW)

このディストリビューションがオンになっているノードの識別子。

partition_typecontention_factorwaiting_tasks_countおよびexclusive_access_countはまだSQL Databaseに実装されていません。

アクセス許可

SQL Server と SQL Managed Instance では、VIEW SERVER STATE アクセス許可が必要です。

SQL Database BasicS0、および S1 のサービス目標、およびエラスティック プール内のデータベースの場合、サーバー管理者アカウント、Azure Active Directory 管理者アカウント、または ##MS_ServerStateReader##サーバー ロールのメンバーシップが必要です。 他のすべての SQL Database サービス目標では、データベースに対する VIEW DATABASE STATE アクセス許可または ##MS_ServerStateReader## サーバー ロールのメンバーシップのいずれかが必要です。

解説

メモリ オブジェクトはヒープであり、 割り当ての粒度はメモリ クラークよりも細かくなります。 SQL Server コンポーネントでは、メモリ クラークの代わりにメモリ オブジェクトが使用されます。 メモリ オブジェクトは、メモリ クラークのページ アロケーター インターフェイスを使用してページを割り当てます。 メモリ オブジェクトは、仮想または共有メモリ インターフェイスを使用しません。 割り当てパターンに応じて、コンポーネントでは各種メモリ オブジェクトを作成し、任意のサイズの領域を割り当てることができます。

メモリ オブジェクトの一般的なページ サイズは 8 KB です。 ただし、増分メモリ オブジェクトには、512 バイトから 8 KB の範囲のページ サイズを指定できます。

注意

ページ サイズは最大割り当てではありません。 メモリ クラークによって実装されたページ アロケーターでサポートされている割り当ての粒度です。 メモリ オブジェクトから、8 KB を超える割り当てを要求することができます。

次の例では、それぞれのメモリ オブジェクトの種類によって割り当てられたメモリのサイズを返します。

SELECT SUM (pages_in_bytes) as 'Bytes Used', type   
FROM sys.dm_os_memory_objects  
GROUP BY type   
ORDER BY 'Bytes Used' DESC;  
GO  

参照

SQL Server オペレーティングシステム関連の動的管理ビュー (Transact-sql)
sys.dm_os_memory_clerks (Transact-SQL)