sys.memory_optimized_tables_internal_attributes (Transact-SQL)
적용 대상: SQL Server 2016(13.x) 이상 Azure SQL 데이터베이스 Azure SQL Managed Instance
사용자 메모리 최적화 테이블을 저장하는 데 사용되는 각 내부 메모리 최적화 테이블에 대한 행을 포함합니다. 각 사용자 테이블은 하나 이상의 내부 테이블에 해당합니다. 단일 테이블은 핵심 데이터 스토리지에 사용됩니다. 추가 내부 테이블은 메모리 최적화 테이블을 위한 temporal, columnstore 인덱스 및 LOB(행 외부) 스토리지와 같은 기능을 지원하는 데 사용됩니다.
열 이름 | 데이터 형식 | 설명 |
---|---|---|
object_id | int | 사용자 테이블의 ID입니다. 사용자 테이블을 지원하는 데 필요한 내부 메모리 최적화 테이블(예: Hk/Columnstore 조합의 경우 행 외부 스토리지 또는 삭제된 행)에는 부모와 동일한 object_id가 있습니다. |
xtp_object_id | bigint | 사용자 테이블을 지원하는 데 사용되는 내부 메모리 최적화 테이블에 해당하는 메모리 내 OLTP 개체 ID입니다. 데이터베이스 내에서 고유하며 개체의 수명 주기 동안 변경할 수 있습니다. |
type | int | 내부 테이블의 형식입니다. 0 => DELETED_ROWS_TABLE 1 => USER_TABLE 2 => DICTIONARIES_TABLE 3 => SEGMENTS_TABLE 4 => ROW_GROUPS_INFO_TABLE 5 => 내부 OFF-행 데이터 테이블 252 => INTERNAL_TEMPORAL_HISTORY_TABLE |
type_desc | nvarchar(60) | 유형에 대한 설명 DELETED_ROWS_TABLE -> columnstore 인덱스에 대해 삭제된 행을 추적하는 내부 테이블 USER_TABLE -> 행 내 사용자 데이터가 포함된 테이블 DICTIONARIES_TABLE -> columnstore 인덱스 사전 SEGMENTS_TABLE -> columnstore 인덱스에 대한 압축 세그먼트 ROW_GROUPS_INFO_TABLE -> columnstore 인덱스의 압축된 행 그룹에 대한 메타데이터 내부 OFF-ROW DATA TABLE -> 행 외부 열의 스토리지에 사용되는 내부 테이블입니다. 이 경우 minor_id column_id 반영합니다. INTERNAL_TEMPORAL_HISTORY_TABLE -> 디스크 기반 기록 테이블의 핫 테일입니다. 기록에 삽입된 행은 먼저 이 내부 메모리 최적화 테이블에 삽입됩니다. 이 내부 테이블에서 디스크 기반 기록 테이블로 행을 비동기적으로 이동하는 백그라운드 작업이 있습니다. |
minor_id | int | 0은 사용자 또는 내부 테이블을 나타냅니다. 0이 아닌 경우 행에서 벗어난 상태로 저장된 열의 ID를 나타냅니다. sys.columns에서 column_id 조인합니다. 행을 벗어난 상태로 저장된 각 열에는 이 시스템 보기에 해당 행이 있습니다. |
사용 권한
사용자가 소유하고 있거나 사용 권한을 부여 받은 보안 개체에 대해서만 카탈로그 뷰의 메타데이터를 볼 수 있습니다. 자세한 내용은 Metadata Visibility Configuration을 참조하세요.
예제
A. 행에서 벗어난 상태로 저장된 모든 열 반환
다음 T-SQL 스크립트는 LOB가 아닌 여러 열과 단일 LOB 열이 있는 테이블을 보여 줍니다.
CREATE TABLE dbo.LargeTableSample
(
Id int IDENTITY PRIMARY KEY NONCLUSTERED,
C1 nvarchar(4000),
C2 nvarchar(4000),
C3 nvarchar(4000),
C4 nvarchar(4000),
Misc nvarchar(max)
) WITH (MEMORY_OPTIMIZED = ON);
GO
다음 쿼리는 행 외에 저장된 모든 열과 해당 크기를 보여 줍니다. -1의 크기는 LOB 열을 나타냅니다. 모든 LOB 열은 행에서 벗어난 곳에 저장됩니다.
SELECT
QUOTENAME(SCHEMA_NAME(o.schema_id)) + N'.' + QUOTENAME(OBJECT_NAME(moa.object_id)) AS 'table',
c.name AS 'column',
c.max_length
FROM sys.memory_optimized_tables_internal_attributes moa
JOIN sys.columns c ON moa.object_id = c.object_id AND moa.minor_id=c.column_id
JOIN sys.objects o on moa.object_id=o.object_id
WHERE moa.type=5;
B. 행에서 벗어난 상태로 저장된 모든 열의 메모리 사용량 반환
행 외부 열의 메모리 사용량에 대한 자세한 내용을 보려면 다음 쿼리를 사용하면 모든 내부 테이블의 메모리 사용량과 행 외부 열을 저장하는 데 사용되는 인덱스를 보여 줍니다.
SELECT
QUOTENAME(SCHEMA_NAME(o.schema_id)) + N'.' + QUOTENAME(OBJECT_NAME(moa.object_id)) AS 'table',
c.name AS 'column',
c.max_length,
mc.memory_consumer_desc,
mc.index_id,
mc.allocated_bytes,
mc.used_bytes
FROM sys.memory_optimized_tables_internal_attributes moa
JOIN sys.columns c ON moa.object_id = c.object_id AND moa.minor_id=c.column_id
JOIN sys.dm_db_xtp_memory_consumers mc ON moa.xtp_object_id=mc.xtp_object_id
JOIN sys.objects o on moa.object_id=o.object_id
WHERE moa.type=5;
C. 메모리 최적화 테이블에서 columnstore 인덱스의 메모리 사용량 반환
다음 쿼리를 사용하여 메모리 최적화 테이블에서 columnstore 인덱스의 메모리 사용량을 표시합니다.
SELECT
QUOTENAME(SCHEMA_NAME(o.schema_id)) + N'.' + QUOTENAME(OBJECT_NAME(moa.object_id)) AS 'table',
i.name AS 'columnstore index',
SUM(mc.allocated_bytes) / 1024 as [allocated_kb],
SUM(mc.used_bytes) / 1024 as [used_kb]
FROM sys.memory_optimized_tables_internal_attributes moa
JOIN sys.indexes i ON moa.object_id = i.object_id AND i.type in (5,6)
JOIN sys.dm_db_xtp_memory_consumers mc ON moa.xtp_object_id=mc.xtp_object_id
JOIN sys.objects o on moa.object_id=o.object_id
WHERE moa.type IN (0, 2, 3, 4)
GROUP BY o.schema_id, moa.object_id, i.name;
다음 쿼리를 사용하여 메모리 최적화 테이블의 columnstore 인덱스에 사용되는 내부 구조에서 메모리 사용량을 분석합니다.
SELECT
QUOTENAME(SCHEMA_NAME(o.schema_id)) + N'.' + QUOTENAME(OBJECT_NAME(moa.object_id)) AS 'table',
i.name AS 'columnstore index',
moa.type_desc AS 'internal table',
mc.index_id AS 'index',
mc.memory_consumer_desc,
mc.allocated_bytes / 1024 as [allocated_kb],
mc.used_bytes / 1024 as [used_kb]
FROM sys.memory_optimized_tables_internal_attributes moa
JOIN sys.indexes i ON moa.object_id = i.object_id AND i.type in (5,6)
JOIN sys.dm_db_xtp_memory_consumers mc ON moa.xtp_object_id=mc.xtp_object_id
JOIN sys.objects o on moa.object_id=o.object_id
WHERE moa.type IN (0, 2, 3, 4)