sys.dm_os_memory_objects (Transact-SQL)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

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

Note

これを 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 (10.0.x) から SQL Server 2008 R2 (10.50.x)。

メモリ オブジェクトによって割り当てられているページ数。 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 (10.0.x) から SQL Server 2008 R2 (10.50.x)。

このメモリ オブジェクトによって割り当てられたページの最大数。 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 実質 適用対象: 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_type、contention_factorwaiting_tasks_count、およびexclusive_access_countはまだ SQL Database に実装されていません。

アクセス許可

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

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

SQL Server 2022 以降でのアクセス許可

サーバーに対する VIEW SERVER PERFORMANCE STATE アクセス許可が必要です。

解説

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

メモリ オブジェクトの一般的なページ サイズは 8 KB (キロバイト)です。 ただし、増分メモリ オブジェクトには、512 バイトから 8 KB (キロバイト)までの範囲のページ サイズを含めることができます。

Note

ページ サイズは最大割り当てではありません。 メモリ クラークによって実装されたページ アロケーターでサポートされている割り当ての粒度です。 メモリ オブジェクトから、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)