sys.dm_os_memory_objects (Transact-SQL)
適用対象:SQL Server (サポートされているすべてのバージョン)
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics 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_type、contention_factor、waiting_tasks_count、およびexclusive_access_countはまだSQL Databaseに実装されていません。
アクセス許可
SQL Server と SQL Managed Instance では、VIEW SERVER STATE
アクセス許可が必要です。
SQL Database Basic、S0、および 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)