Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro: SQL Server
Azure SQL Database
Azure SQL Managed Instance
Vrací statistiky využití paměti pro každou In-Memory tabulku OLTP (uživatel a systém) v aktuální databázi. Systémové tabulky mají záporné ID objektů a slouží k ukládání informací za běhu pro In-Memory OLTP engine. Na rozdíl od uživatelských objektů jsou systémové tabulky interní a existují pouze v paměti, proto nejsou viditelné v katalogových pohledech. Systémové tabulky se používají k ukládání informací, jako jsou metadata pro všechny datové/delta soubory v úložišti, požadavky na sloučení, vodoznaky pro delta soubory pro filtrování řádků, ztracené tabulky a relevantní informace pro obnovu a zálohování. Vzhledem k tomu, že engine OLTP In-Memory může mít až 8 192 datových a delta dvojic souborů, u velkých databází v paměti může být paměť zabíraná systémovými tabulkami jen několik megabajtů.
Další informace najdete v tématu In-Memory OLTP (optimalizaceIn-Memory).
| Název sloupce | Datový typ | Description |
|---|---|---|
| object_id | int | ID objektu tabulky.
NULL pro In-Memory tabulky systému OLTP. |
| memory_allocated_for_table_kb | bigint | Paměť přidělená pro tuto tabulku. |
| memory_used_by_table_kb | bigint | Paměť používaná tabulkou, včetně verzí v řádku. |
| memory_allocated_for_indexes_kb | bigint | Paměť přidělená pro indexy v této tabulce. |
| memory_used_by_indexes_kb | bigint | Paměť spotřebovaná pro indexy v této tabulce. |
Povolení
Všechny řádky se vrátí, pokud máte v aktuální databázi povolení ZOBRAZIT STAV DATABÁZE. Jinak se vrátí prázdná sada řádků.
Pokud nemáte oprávnění ZOBRAZIT DATABÁZI, všechny sloupce se vrátí pro řádky v tabulkách, na které máte povolení VYBRAT.
Systémové tabulky se vracejí pouze uživatelům s oprávněním ZOBRAZIT STAV DATABÁZE.
Oprávnění pro SQL Server 2022 a novější
Vyžaduje oprávnění ZOBRAZIT STAV VÝKONU DATABÁZE pro databázi.
Examples
Můžete se dotazovat na následující DMV, abyste získali paměť přidělenou pro tabulky a indexy v databázi:
-- finding memory for objects
SELECT OBJECT_NAME(object_id), *
FROM sys.dm_db_xtp_table_memory_stats;
Pro nalezení paměti pro všechny objekty v databázi:
SELECT SUM( memory_allocated_for_indexes_kb + memory_allocated_for_table_kb) AS
memoryallocated_objects_in_kb
FROM sys.dm_db_xtp_table_memory_stats;
Uživatelský scénář
Nejprve nastavte maximální serverovou paměť na 4GB jako bezpečnostní opatření. Možná byste měli zvážit jinou hodnotu pro své životní prostředí.
-- set max server memory to 4 GB
EXEC sp_configure 'max server memory (MB)', 4048
go
RECONFIGURE
go
Vytvořte zdrojový fond pro databázi, který obsahuje objekty optimalizované pro paměť.
-- create a resource pool for the database with memory-optimized objects
CREATE RESOURCE POOL PoolHkDb1 WITH (MAX_MEMORY_PERCENT = 50);
ALTER RESOURCE GOVERNOR RECONFIGURE;
go
Připojte resource pool 'PoolHkdb1' k databázi 'HkDb1'. To vyžaduje převedení databáze offline/online pro přiřazení poolu.
--bind the pool to the database
EXEC sp_xtp_bind_db_resource_pool 'HkDb1', 'PoolHkdb1'
go
-- take database offline/online to associate the pool
use master
go
alter database HkDb1 set offline
go
alter database HkDb1 set online
go
Vytvořte následující tabulky v databázi nazvané HkDb1.
USE HkDb1
GO
CREATE TABLE dbo.t1 (
c1 int NOT NULL,
c2 char(40) NOT NULL,
c3 char(8000) NOT NULL,
CONSTRAINT [pk_t1_c1] PRIMARY KEY NONCLUSTERED HASH (c1) WITH (BUCKET_COUNT = 100000)
) WITH (MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_AND_DATA);
GO
CREATE TABLE dbo.t2 (
c1 int NOT NULL,
c2 char(40) NOT NULL,
c3 char(8000) NOT NULL,
CONSTRAINT [pk_t2_c1] PRIMARY KEY NONCLUSTERED HASH (c1) WITH (BUCKET_COUNT = 100000)
) WITH (MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_AND_DATA);
GO
CREATE TABLE dbo.t3 (
c1 int NOT NULL,
c2 char(40) NOT NULL,
c3 char(8000) NOT NULL,
CONSTRAINT [pk_t3_c1] PRIMARY KEY NONCLUSTERED HASH (c1) WITH (BUCKET_COUNT = 1000000)
) WITH (MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_AND_DATA)
GO
Načtěte data do tabulky.
-- load 150K rows
DECLARE @i int = 0
WHILE (@i <= 150000)
BEGIN
insert t1 values (@i, 'a', replicate ('b', 8000))
set @i += 1;
END
GO
Když se data načítají do tabulky, můžete vidět uživatelem definované tabulky a kolik úložiště zabírají. Například každý řádek tabulky může mít přibližně 8070 bajtů (velikost alokace je 8K (8192 bajtů)). Můžete vidět indexy pro tabulku a kolik úložiště index zabírá. Například 1MB je 100K položek zaokrouhlených na další mocninu 2 (2**17) = 131072 8 bajtů každý. Tabulka nemusí mít index, v takovém případě zobrazí alokaci paměti pro daný index. Další řádky mohou reprezentovat systémové tabulky
select convert(char(10), object_name(object_id)) as Name,*
from sys.dm_db_xtp_table_memory_stats;
Zde je výstup, rozdělený do dvou částí:
Name object_id memory_allocated_for_table_kb memory_used_by_table_kb
---------- ----------- ----------------------------- -----------------------
t3 629577281 0 0
t1 565577053 1372928 1202351
t2 597577167 0 0
NULL -6 0 0
NULL -5 0 0
NULL -4 0 0
NULL -3 0 0
NULL -2 192 25
memory_allocated_for_indexes_kb memory_used_by_indexes_kb
------------------------------- -------------------------
8192 8192
1024 1024
8192 8192
2 2
24 24
2 2
2 2
16 16
Výstup,
select sum(allocated_bytes)/(1024*1024) as total_allocated_MB,
sum(used_bytes)/(1024*1024) as total_used_MB
from sys.dm_db_xtp_memory_consumers;
je:
total_allocated_MB total_used_MB
-------------------- --------------------
1357 1191
Dále se podívejme na výstup ze zdrojového fondu. Poznámka: paměť používaná z poolu je 1356 MB.
select pool_id,convert(char(10), name) as Name, min_memory_percent, max_memory_percent,
max_memory_kb/1024 as max_memory_mb
from sys.dm_resource_governor_resource_pools;
select used_memory_kb/1024 as used_memory_mb ,target_memory_kb/1024 as target_memory_mb
from sys.dm_resource_governor_resource_pools;
Výstup:
pool_id Name min_memory_percent max_memory_percent max_memory_mb
----------- ---------- ------------------ ------------------ --------------------
1 internal 0 100 3845
2 default 0 100 3845
259 PoolHkDb1 0 100 3845
used_memory_mb target_memory_mb
-------------------- --------------------
125 3845
32 3845
1356 3845