Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Minden In-Memory OLTP táblára (felhasználó és rendszer) a jelenlegi adatbázisban visszaadja a memóriahasználati statisztikákat. A rendszertáblák negatív objektumazonosítóval rendelkeznek, és az In-Memory OLTP motor futási idejű adatainak tárolására szolgálnak. A felhasználói objektumokkal ellentétben a rendszertáblák belsőek, és csak memóriában léteznek, ezért nem láthatók a katalógusnézetekben. A rendszertáblák olyan információk tárolására szolgálnak, mint például az összes adat/delta fájl metaadatai tárolására, összevonási kérésekre, vízjelekre a delta fájlokhoz a sorok szűréséhez, kidobott táblák, valamint a helyreállításhoz és mentéshez szükséges releváns információkhoz. Mivel a In-Memory OLTP motor akár 8 192 adatot és delta fájlpárt is tartalmazhat, nagy memórián belüli adatbázisokban a rendszer táblák által használt memória akár néhány megabájt is lehet.
További információ: In-Memory OLTP (In-Memory Optimalizálás).
| Oszlop név | Adattípus | Description |
|---|---|---|
| object_id | int | A táblázat objektumazonosítója.
NULL In-Memory OLTP rendszer táblákhoz. |
| memory_allocated_for_table_kb | bigint | Memória erre a táblázatra van kijelölve. |
| memory_used_by_table_kb | bigint | A táblázat által használt memória, beleértve a sorverziókat is. |
| memory_allocated_for_indexes_kb | bigint | Az indexek számára kijelölt memória ezen a táblázaton. |
| memory_used_by_indexes_kb | bigint | Az indexek számára használt memória ezen a táblázaton. |
Permissions
Minden sor visszatér, ha a jelenlegi adatbázisban VIEW DATABASE STATE engedélyed van. Ellenkező esetben egy üres sorhalmaz jelenik meg.
Ha nincs VIEW DATABASE engedélyed, akkor minden oszlop visszakerül azokhoz a sorokhoz a táblázatokban, amelyekre SELECT engedélyed van.
A rendszertáblák csak azok a felhasználók kapnak vissza, akiknek VIEW DATABASE STATE engedélyük van.
Engedélyek az SQL Server 2022-hez és újabb verziókhoz
Az adatbázishoz a VIEW DATABASE PERFORMANCE STATE engedélyre van szükség.
Példák
Az alábbi DMV-t kérheted le, hogy megkapd a táblák és indexek számára kijelölt memóriát az adatbázisban:
-- finding memory for objects
SELECT OBJECT_NAME(object_id), *
FROM sys.dm_db_xtp_table_memory_stats;
Az adatbázis összes objektumának memóriájának megtalálásához:
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;
Felhasználói forgatókönyv
Először is, állítsd a maximális szervermemóriát 4GB-ra biztonsági intézkedésként. Érdemes lehet egy másik értéket fontolóra venni a környezeted számára.
-- set max server memory to 4 GB
EXEC sp_configure 'max server memory (MB)', 4048
go
RECONFIGURE
go
Hozz létre egy erőforrás-poolot az adatbázishoz, amely tartalmazza a memóriaoptimalizált objektumokat.
-- 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
Kötd a 'PoolHkdb1' erőforrás poolt a 'HkDb1' adatbázishoz. Ez azt jelenti, hogy az adatbázist offline vagy online módon kezeljük, hogy összekapcsoljuk a poolt.
--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
Hozza létre a következő táblákat egy adatbázisban, amelynek nevén 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
Adatok betöltése a táblába.
-- load 150K rows
DECLARE @i int = 0
WHILE (@i <= 150000)
BEGIN
insert t1 values (@i, 'a', replicate ('b', 8000))
set @i += 1;
END
GO
Amikor az adatokat betöltik egy táblába, láthatod a felhasználó által definiált táblákat és az adott tárhelyet. Például egy táblázat minden sora körülbelül 8070 bájt lehet (az allokáció mérete 8K (8192 bájt)). Láthatod az indexeket táblánként, és hogy mennyi tárhelyet használ az index. Például az 1MB 100 ezer bejegyzést kerekítve a következő hatványra 2 (2**17) = 131072 8 bájtos szintre. Egy táblának nem feltétlenül van indexe, ebben az esetben az index memória allokációját mutatja. Más sorok rendszertáblákat ábrázolhatnak
select convert(char(10), object_name(object_id)) as Name,*
from sys.dm_db_xtp_table_memory_stats;
Íme a kimenet, két részben:
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
Az eredmény,
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;
van:
total_allocated_MB total_used_MB
-------------------- --------------------
1357 1191
Ezután nézzük meg az erőforrás-pool kimenetét. Fontos megjegyezni, hogy a poolból használt memória 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;
A kimenet:
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
Kapcsolódó tartalom
- Bevezetés a Memory-Optimized-táblák használatába
- Memory-Optimized Table dinamikus menedzsment nézetek
- In-Memory OLTP áttekintése és használati forgatókönyvek
- Teljesítmény optimalizálása memóriabeli technológiákkal az Azure SQL Database
- Teljesítmény optimalizálása memóriabeli technológiákkal a felügyelt Azure SQL-példányokban