Aracılığıyla paylaş


sys.memory_optimized_tables_internal_attributes (Transact-SQL)

Şunlar için geçerlidir: SQL Server 2016 (13.x) ve sonraki sürümler Azure SQL DatabaseAzure SQL Managed InstanceSQL database in Microsoft Fabric

Kullanıcı belleği için iyileştirilmiş tabloları depolamak için kullanılan her iç bellek için iyileştirilmiş tablo için bir satır içerir. Her kullanıcı tablosu bir veya daha fazla iç tabloya karşılık gelir. Çekirdek veri depolama için tek bir tablo kullanılır. Ek iç tablolar, bellek için iyileştirilmiş tablolar için zamansal, columnstore dizini ve satır dışı (LOB) depolama gibi özellikleri desteklemek için kullanılır.

Sütun adı Veri türü Description
object_id int Kullanıcı tablosunun kimliği. Bir kullanıcı tablosunu (Hk/Columnstore birleşimleri durumunda satır dışı depolama veya silinen satırlar gibi) desteklemek için var olan iç bellek için iyileştirilmiş tablolar, üstleriyle aynı object_id sahiptir.
xtp_object_id bigint kullanıcı tablosunu desteklemek için kullanılan iç bellek için iyileştirilmiş tabloya karşılık gelen OLTP nesne kimliğini In-Memory. Veritabanında benzersizdir ve nesnenin ömrü boyunca değişebilir.
type int İç tablonun türü.

0 => DELETED_ROWS_TABLE
1 => USER_TABLE
2 => DICTIONARIES_TABLE
3 => SEGMENTS_TABLE
4 => ROW_GROUPS_INFO_TABLE
5 => İç OFF-ROW VERİ TABLOSU
252 => INTERNAL_TEMPORAL_HISTORY_TABLE
type_desc nvarchar(60) Türün açıklaması

DELETED_ROWS_TABLE -> Bir columnstore dizini için silinen satırları iç tablo izleme
USER_TABLE -> Satır içi kullanıcı verilerini içeren tablo
DICTIONARIES_TABLE -> Columnstore dizini için sözlükler
SEGMENTS_TABLE -> Columnstore dizini için sıkıştırılmış segmentler
ROW_GROUPS_INFO_TABLE -> Columnstore dizininin sıkıştırılmış satır grupları hakkındaki meta veriler
İÇ OFF-ROW VERİ TABLOSU -> Satır dışı bir sütunun depolanması için kullanılan iç tablo. Bu durumda, minor_id column_id yansıtır.
INTERNAL_TEMPORAL_HISTORY_TABLE -> Disk tabanlı geçmiş tablosunun sık erişimli kuyruğu. Geçmişe eklenen satırlar önce bu iç bellek için iyileştirilmiş tabloya eklenir. Bu iç tablodaki satırları zaman uyumsuz olarak disk tabanlı geçmiş tablosuna taşıyan bir arka plan görevi vardır.
minor_id int 0, bir kullanıcıyı veya iç tabloyu gösterir

0 olmayan, satır dışında depolanan bir sütunun kimliğini gösterir. sys.columns dosyasında column_id ile birleşir.

Satır dışında depolanan her sütunun bu sistem görünümünde karşılık gelen bir satırı vardır.

Permissions

Katalog görünümlerindeki meta verilerin görünürlüğü, kullanıcının sahip olduğu veya kullanıcıya bazı izinlerin verildiği güvenli hale getirilebilir öğelerle sınırlıdır. Daha fazla bilgi için bkz. meta veri görünürlüğü yapılandırması .

Örnekler

A. Satır dışında depolanan tüm sütunları döndürme

Aşağıdaki T-SQL betiğinde birden çok büyük LOB olmayan sütuna ve tek bir LOB sütununa sahip bir tablo gösterilmektedir:

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

Aşağıdaki sorgu, boyutlarıyla birlikte satır dışında depolanan tüm sütunları gösterir. -1 boyutu LOB sütununu gösterir. Tüm LOB sütunları satır dışına depolanır.

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. Satır dışında depolanan tüm sütunların bellek tüketimini döndürme

Satır dışı sütunların bellek tüketimi hakkında daha fazla bilgi edinmek için, tüm iç tabloların bellek tüketimini ve satır dışı sütunları depolamak için kullanılan dizinlerini gösteren aşağıdaki sorguyu kullanabilirsiniz:

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. Bellek için iyileştirilmiş tablolarda columnstore dizinlerinin bellek tüketimini döndürme

Bellek için iyileştirilmiş tablolarda columnstore dizinlerinin bellek tüketimini göstermek için aşağıdaki sorguyu kullanın:

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;

Bellek için iyileştirilmiş tablolarda columnstore dizinleri için kullanılan iç yapılar genelinde bellek tüketimini aşağıdaki sorguyu kullanın:

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)