SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

In Memory OLTP のメモリ情報についてのメモ

leave a comment

SQL Server 2014 の In Memory OLTP (メモリ最適化テーブル : Hekaton) ですが、メモリ管理が従来のテーブルとは変わってきます。

In Memory OLTP のメモリ使用量を確認するための情報をメモとして。
CTP2 ベースの内容ですので、RTM 時には変わっているかもしれませんが。

技術文書としてまとまっているのは、How to: Monitor and Troubleshoot Memory Usage でしょうか。

従来までのディスクベーステーブルのテーブルサイズを確認するためには、sys.dm_db_partition_stats を使うことがあるかと思います。

私の場合は以下のようなクエリを使っています。

SELECT
	so.name
	, si.name
	, sdp.row_count
	, sdp.used_page_count
	, sdp.used_page_count * 8 AS PageKB
FROM
	sys.objects so
LEFT JOIN
	sys.dm_db_partition_stats sdp
	ON
	sdp.object_id = so.object_id
LEFT JOIN
	sys.indexes si
	ON
	si.object_id = sdp.object_id
	AND
	si.index_id = sdp.index_id
WHERE
	so.type = 'U'
ORDER BY
	so.Name

 

このクエリの実行結果がいかになります。

すべてのテーブルに同じ件数のデータを格納しているのですが、In Memory OLTP のテーブルについては、件数を取得することができません。

image

また、sys.dm_os_buffer_descriptors でメモリの使用量をバッファプールから確認をした場合も同様で、In Memory OLTP のテーブルについてはカウントされていません。

SELECT 
	CASE [database_id]
		WHEN 32767 THEN 'ResourceDb' 
		ELSE DB_NAME([database_id]) 
	END AS [Database_name], 
	[page_type], 
	count(*) AS [Page Count], 
	count(*) * 8.0 AS [Page Size (KB)]
FROM
	[sys].[dm_os_buffer_descriptors] WITH (NOLOCK)
WHERE
	database_id = DB_ID()
GROUP BY
	DB_NAME([database_id]), 
	[database_id], 
	[page_type]
ORDER BY 
	[database_id] ASC

image

これはパフォーマンスモニターのカウンターでも同様となり、SQL Server:Memory ManagerDatabase Cache Memory (KB) / SQLServer:Buffer ManagerDatabase pages でも In Memory OLTP のテーブルのメモリ消費量は確認をすることができません。

In Memory OLTP ですがラッチフリーモデルを採用しており、メモリについてもバッファプールが使用されていません。

In Memory OLTP のメモリ使用量ですが以下のクエリで確認をすることができます。

-- DB 単位で確認
SELECT name, xtms.* FROM sys.dm_db_xtp_table_memory_stats xtms
LEFT JOIN
sys.objects so
ON
so.object_id = xtms.object_id


-- DB 単位でメモリが管理されている
SELECT * FROM sys.dm_os_memory_clerks WHERE type LIKE '%XTP%'

sys.dm_xtp_system_memory_consumers ではテーブル単位でメモリの使用量を確認することができます。

image

また、sys.dm_os_memory_clerks からも確認をすることができます。

image

In Memory OLTP 向けのメモリークラークは MEMORYCLERK_XTP となり、これはデータベース単位で管理がされています。

以下でもメモリの状態を確認できます。

# DBCC MEMORYSTATUS でも XTP は確認できます。

SELECT * FROM sys.dm_os_memory_objects WHERE type LIKE '%xtp%'

 

In Memory OLTP 用のパフォーマンスモニターのカウンターについても XTP 系のカウンターから取得できます。

SELECT * FROM  sys.dm_os_performance_counters 
WHERE object_name LIKE '%XTP%'

 

パフォーマンスモニターのカウンターについては処理系のカウンターが多いようでメモリ系に関してはあまり見れなさそうでした。

In Memory OLTP の性能評価をする際に見ないといけない項目の整理はこれからしていかないといけないなと。

Written by masayuki.ozawa

11月 24th, 2013 at 9:38 pm

Posted in SQL Server

Tagged with ,

Leave a Reply

*