Megosztás a következőn keresztül:


sys.memory_optimized_tables_internal_attributes (Transact-SQL)

Vonatkozik a következőkre: SQL Server 2016 (13.x) és későbbi verziók Azure SQL DatabaseAzure SQL Managed InstanceSQL database in Microsoft Fabric

A felhasználó memóriaoptimalizált tábláinak tárolására használt minden belső memóriaoptimalizált tábla sorát tartalmazza. Minden felhasználói tábla egy vagy több belső táblának felel meg. A rendszer egyetlen táblát használ az alapvető adattároláshoz. További belső táblákat használnak olyan funkciók támogatásához, mint például az időbeli, oszlopcentrikus index és a soron kívüli (LOB) tárolás a memóriaoptimalizált táblákhoz.

Oszlop név Adattípus Description
object_id int A felhasználói tábla azonosítója. A felhasználói táblákat támogató belső memóriaoptimalizált táblák (például a soron kívüli tárolás vagy a törölt sorok Hk/Columnstore kombinációk esetén) ugyanazzal a object_id rendelkeznek, mint a szülőjük.
xtp_object_id bigint In-Memory a felhasználói tábla támogatásához használt belső memóriaoptimalizált táblának megfelelő OLTP-objektumazonosítót. Az adatbázison belül egyedi, és az objektum élettartama alatt változhat.
típus int A belső táblázat típusa.

0 => DELETED_ROWS_TABLE
1 => USER_TABLE
2 => DICTIONARIES_TABLE
3 => SEGMENTS_TABLE
4 => ROW_GROUPS_INFO_TABLE
5 => BELSŐ OFF-ROW ADATTÁBLA
252 => INTERNAL_TEMPORAL_HISTORY_TABLE
leírás típusa nvarchar(60) A típus leírása

DELETED_ROWS_TABLE –> Oszlopcentrikus index törölt sorainak belső táblakövetése
USER_TABLE –> A soron belüli felhasználói adatokat tartalmazó táblázat
DICTIONARIES_TABLE –> Oszlopcentrikus index szótárai
SEGMENTS_TABLE –> Oszlopcentrikus index tömörített szegmensei
ROW_GROUPS_INFO_TABLE –> Metaadatok egy oszlopcentrikus index tömörített sorcsoportjairól
INTERNAL OFF-ROW DATA TABLE –> Egy soron kívüli oszlop tárolására használt belső tábla. Ebben az esetben minor_id tükrözi a column_id.
INTERNAL_TEMPORAL_HISTORY_TABLE –> A lemezalapú előzménytábla gyakori elérésű farka. Az előzményekbe beszúrt sorok először ebbe a belső memóriaoptimalizált táblába lesznek beszúrva. Van egy háttérfeladat, amely aszinkron módon áthelyezi a sorokat ebből a belső táblából a lemezalapú előzménytáblába.
minor_id int A 0 egy felhasználót vagy egy belső táblát jelöl

A non-0 egy soron kívül tárolt oszlop azonosítóját jelzi. A sys.columns column_id összekapcsolása.

Minden soron kívül tárolt oszlopnak van egy megfelelő sora ebben a rendszernézetben.

Permissions

A katalógusnézetekben a metaadatok láthatósága olyan biztonságos adatokra korlátozódik, amelyek egy felhasználó tulajdonában vannak, vagy amelyeken a felhasználó engedélyt kapott. További információ: Metaadatok láthatóságának konfigurációja.

Példák

A. A soron kívül tárolt összes oszlop visszaadása

A következő T-SQL-szkript egy táblát mutat be, amely több nagy, nem LOB oszlopot és egyetlen LOB oszlopot tartalmaz:

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

Az alábbi lekérdezés a soron kívül tárolt összes oszlopot és azok méretét jeleníti meg. A -1 mérete egy LOB oszlopot jelöl. A rendszer minden LOB-oszlopot soron kívül tárol.

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. A soron kívül tárolt összes oszlop memóriahasználatának visszaadása

A soron kívüli oszlopok memóriahasználatával kapcsolatos további információkért használja az alábbi lekérdezést, amely a soron kívüli oszlopok tárolására használt összes belső tábla és index memóriahasználatát mutatja be:

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. Az oszlopcentrikus indexek memóriahasználatának visszaadása memóriaoptimalizált táblákon

A következő lekérdezés használatával megjelenítheti az oszlopcentrikus indexek memóriahasználatát a memóriaoptimalizált táblákon:

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;

A következő lekérdezésben bontsa le a memóriahasználatot a memóriaoptimalizált táblák oszlopcentrikus indexeihez használt belső struktúrák között:

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)