sys.memory_optimized_tables_internal_attributes(Transact-SQL)

적용 대상: SQL Server 2016(13.x) 이상 Azure SQL DatabaseAzure 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)