다음을 통해 공유


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)