Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Geeft geheugengebruiksstatistieken terug voor elke In-Memory OLTP-tabel (gebruiker en systeem) in de huidige database. De systeemtabellen hebben negatieve object-ID's en worden gebruikt om runtime-informatie op te slaan voor de In-Memory OLTP-engine. In tegenstelling tot gebruikersobjecten zijn systeemtabellen intern en bestaan ze alleen in het geheugen, waardoor ze niet zichtbaar zijn via catalogusweergaven. Systeemtabellen worden gebruikt om informatie op te slaan zoals metadata voor alle data/deltabestanden in opslag, mergeverzoeken, watermerken voor deltabestanden om rijen te filteren, verwijderde tabellen en relevante informatie voor herstel en back-ups. Aangezien de In-Memory OLTP-engine tot 8.192 data- en delta-bestandsparen kan bevatten, kan het geheugen dat systeemtabellen innemen voor grote in-memory databases enkele megabytes beslaan.
Zie In-Memory OLTP (In-Memory Optimization) voor meer informatie.
| Kolomnaam | Gegevenstype | Description |
|---|---|---|
| object_id | int | De object-ID van de tabel.
NULL voor In-Memory OLTP-systeemtabellen. |
| memory_allocated_for_table_kb | bigint | Geheugen toegewezen voor deze tabel. |
| memory_used_by_table_kb | bigint | Geheugen dat door de tabel wordt gebruikt, inclusief rijversies. |
| memory_allocated_for_indexes_kb | bigint | Geheugen toegewezen voor indexen in deze tabel. |
| memory_used_by_indexes_kb | bigint | Geheugen verbruikt voor indexen in deze tabel. |
Permissions
Alle rijen worden teruggegeven als je de toestemming hebt VIEW DATABASE STATE op de huidige database. Anders wordt een lege rijset teruggegeven.
Als je geen VIEW DATABASE-percensie hebt, worden alle kolommen teruggegeven voor rijen in tabellen waarop je SELECT-toestemming hebt.
Systeemtabellen worden alleen teruggegeven voor gebruikers met de rechtenopvolging VIEW DATABASE STATE.
Machtigingen voor SQL Server 2022 en hoger
Hiervoor is de machtiging VIEW DATABASE PERFORMANCE STATE vereist voor de database.
Voorbeelden
Je kunt de volgende DMV opvragen om het geheugen te verkrijgen dat is toegewezen voor de tabellen en indexen binnen de database:
-- finding memory for objects
SELECT OBJECT_NAME(object_id), *
FROM sys.dm_db_xtp_table_memory_stats;
Om geheugen te vinden voor alle objecten binnen de database:
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;
Gebruikersscenario
Stel eerst het maximale servergeheugen in op 4GB als veiligheidsmaatregel. Je wilt misschien een andere waarde voor je omgeving overwegen.
-- set max server memory to 4 GB
EXEC sp_configure 'max server memory (MB)', 4048
go
RECONFIGURE
go
Maak een resourcepool voor de database die de geheugengeoptimaliseerde objecten bevat.
-- 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
Bind de resourcepool 'PoolHkdb1' aan de database 'HkDb1'. Dit vereist dat je de database offline of online brengt om de pool te koppelen.
--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
Maak de volgende tabellen aan in een database genaamd 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
Gegevens in de tabel laden.
-- load 150K rows
DECLARE @i int = 0
WHILE (@i <= 150000)
BEGIN
insert t1 values (@i, 'a', replicate ('b', 8000))
set @i += 1;
END
GO
Wanneer data in een tabel wordt geladen, kun je door de gebruiker gedefinieerde tabellen zien en hoeveel opslag die gebruiken. Bijvoorbeeld, elke rij van een tabel kan ongeveer 8070 bytes zijn (de allocatiegrootte is 8K (8192 bytes)). Je kunt indexen per tabel zien en hoeveel opslag de index verbruikt. Bijvoorbeeld, 1MB is 100K-invoer afgerond op de volgende macht van 2 (2**17) = 131072 van 8 bytes elk. Een tabel hoeft geen index te hebben, in welk geval de geheugentoewijzing voor de index wordt weergegeven. Andere rijen kunnen systeemtabellen vertegenwoordigen
select convert(char(10), object_name(object_id)) as Name,*
from sys.dm_db_xtp_table_memory_stats;
Hier is de uitvoer, in twee delen:
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
De output van,
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;
is:
total_allocated_MB total_used_MB
-------------------- --------------------
1357 1191
Laten we nu kijken naar de output van de resource pool. Let op, het geheugen dat uit de pool wordt gebruikt is 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;
De uitvoer:
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
Verwante inhoud
- Inleiding tot Memory-Optimized tabellen
- Memory-Optimized Dynamische Beheerweergaven van tabellen
- In-Memory OLTP Overzicht en Gebruiksscenario's
- Prestaties optimaliseren met behulp van in-memory technologieën in Azure SQL Database
- Prestaties optimaliseren met behulp van in-memory technologieën in Azure SQL Managed Instance