Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Zwraca statystyki zużycia pamięci dla każdej In-Memory tabeli OLTP (użytkownika i systemu) w aktualnej bazie danych. Tabele systemowe mają ujemne identyfikatory obiektów i służą do przechowywania informacji w czasie działania dla silnika OLTP In-Memory. W przeciwieństwie do obiektów użytkownika, tabele systemowe są wewnętrzne i istnieją tylko w pamięci, dlatego nie są widoczne w widokach katalogowych. Tabele systemowe służą do przechowywania informacji takich jak metadane wszystkich plików danych/delta w pamięci, żądania scalania, znaki wodne dla plików delta do filtrowania wierszy, porzucone tabele oraz istotne informacje do odzyskiwania i tworzenia kopii zapasowych. Biorąc pod uwagę, że silnik OLTP In-Memory może mieć do 8 192 par plików danych i delta, dla dużych baz danych w pamięci pamięć zajmowana przez tabele systemowe może wynosić kilka megabajtów.
Aby uzyskać więcej informacji, zobacz In-Memory OLTP (In-Memory Optimization).
| Nazwa kolumny | Typ danych | Description |
|---|---|---|
| object_id | int | Identyfikator obiektu tabeli.
NULL dla In-Memory tabel systemowych OLTP. |
| memory_allocated_for_table_kb | bigint | Pamięć przydzielona dla tej tabeli. |
| memory_used_by_table_kb | bigint | Pamięć używana przez tabelę, w tym wersje wierszowe. |
| memory_allocated_for_indexes_kb | bigint | Pamięć przydzielona na indeksy w tej tabeli. |
| memory_used_by_indexes_kb | bigint | Pamięć zużyta na indeksy w tej tabeli. |
Permissions
Wszystkie wiersze są zwracane, jeśli masz uprawnienia VIEW DATABASE STATE na bieżącej bazie danych. W przeciwnym razie zwracany jest pusty zestaw wierszy.
Jeśli nie masz uprawnień VIEW DATABASE, wszystkie kolumny będą zwracane dla wierszy w tabelach, na które masz uprawnienia SELECT.
Tabele systemowe zwracane są tylko dla użytkowników z uprawnieniami VIEW DATABASE STATE.
Uprawnienia dla programu SQL Server 2022 i nowszych
Wymaga uprawnienia WYŚWIETL STAN WYDAJNOŚCI BAZY DANYCH dla bazy danych.
Przykłady
Możesz zapytać do następującego DMV, aby uzyskać przydzieloną pamięć dla tabel i indeksów w bazie danych:
-- finding memory for objects
SELECT OBJECT_NAME(object_id), *
FROM sys.dm_db_xtp_table_memory_stats;
Aby znaleźć pamięć dla wszystkich obiektów w bazie danych:
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;
Scenariusz użytkownika
Po pierwsze, ustaw maksymalną pamięć serwera na 4GB dla zabezpieczeń. Możesz rozważyć inną wartość dla swojego środowiska.
-- set max server memory to 4 GB
EXEC sp_configure 'max server memory (MB)', 4048
go
RECONFIGURE
go
Stwórz pulę zasobów dla bazy danych, która zawiera obiekty zoptymalizowane pod pamięć.
-- 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
Powiąż pulę zasobów 'PoolHkdb1' z bazą danych 'HkDb1'. Wymaga to wyłączenia bazy danych lub połączenia online, aby powiązać pulę.
--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
Stwórz następujące tabele w bazie danych o nazwie 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
Załaduj dane do tabeli.
-- load 150K rows
DECLARE @i int = 0
WHILE (@i <= 150000)
BEGIN
insert t1 values (@i, 'a', replicate ('b', 8000))
set @i += 1;
END
GO
Gdy dane są ładowane do tabeli, możesz zobaczyć tabele zdefiniowane przez użytkownika i ile miejsca są one zajmowane. Na przykład każdy wiersz tabeli może mieć około 8070 bajtów (rozmiar alokacji to 8K (8192 bajty)). Możesz zobaczyć indeksy w każdej tabeli oraz ilość miejsca na dane w tym indeksie. Na przykład 1MB to 100K wpisów zaokrąglonych do następnej potęgi 2 (2**17) = 131072 po 8 bajtów każda. Tabela może nie mieć indeksu, w takim przypadku pokaże przydział pamięci dla tego indeksu. Inne wiersze mogą reprezentować tabele systemowe
select convert(char(10), object_name(object_id)) as Name,*
from sys.dm_db_xtp_table_memory_stats;
Oto efekt końcowy, podzielony na dwie części:
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
Efekt wyników,
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;
jest:
total_allocated_MB total_used_MB
-------------------- --------------------
1357 1191
Następnie przyjrzyjmy się wynikom z puli zasobów. Należy zauważyć, że pamięć używana z puli wynosi 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;
Dane wyjściowe:
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
Treści powiązane
- Wprowadzenie do tabel zoptymalizowanych pod kątem pamięci
- Memory-Optimized Dynamiczne widoki zarządzania tabelą
- In-Memory Przegląd i scenariusze użycia OLTP
- Optymalizowanie wydajności przy użyciu technologii w pamięci w usłudze Azure SQL Database
- Optymalizowanie wydajności przy użyciu technologii w pamięci w usłudze Azure SQL Managed Instance