sys.dm_db_xtp_table_memory_stats (Transact-SQL)
Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure
Возвращает статистику использования памяти для каждой таблицы OLTP в памяти (пользователя и системы) в текущей базе данных. Системные таблицы имеют отрицательные идентификаторы объектов и используются для хранения сведений о времени выполнения для подсистемы OLTP в памяти. В отличие от пользовательских объектов, системные таблицы являются внутренними и существуют только в памяти, поэтому недоступны для просмотра через представления каталога. Системные таблицы используются для хранения таких данных, как метаданные для всех файлов данных или разностных файлов в хранилище, запросы слияния, подложки для разностных файлов для фильтрации строк, удаленных таблиц и соответствующих сведений для восстановления и резервного копирования. Учитывая, что подсистема OLTP в памяти может иметь до 8192 пар данных и разностных файлов для больших баз данных в памяти, память, взятая системными таблицами, может составлять несколько мегабайтов.
Дополнительные сведения см. в разделе In-Memory OLTP (оптимизация в памяти).
Имя столбца | Тип данных | Description |
---|---|---|
object_id | int | Идентификатор объекта таблицы. NULL для системных таблиц OLTP в памяти. |
memory_allocated_for_table_kb | bigint | Память, выделенная для этой таблицы. |
memory_used_by_table_kb | bigint | Объем памяти, используемый таблицей, включая версии строк. |
memory_allocated_for_indexes_kb | bigint | Память, выделенная для индексов в этой таблице. |
memory_used_by_indexes_kb | bigint | Объем памяти, используемый для индексов в этой таблице. |
Разрешения
Если имеется разрешение VIEW DATABASE STATE в текущей базе данных, возвращаются все строки. В противном случае возвращается пустой набор строк.
Если разрешения VIEW DATABASE нет, возвращаются все столбцы для строк в таблицах, для которых включено разрешение SELECT.
Системные таблицы возвращаются только для пользователей с разрешением VIEW DATABASE STATE.
Разрешения для SQL Server 2022 и более поздних версий
Требуется разрешение VIEW DATABASE PERFORMANCE STATE для базы данных.
Примеры
Для получения объема выделенной памяти для таблиц и индексов из базы данных можно выполнить запрос к следующему динамическому административному представлению:
-- finding memory for objects
SELECT OBJECT_NAME(object_id), *
FROM sys.dm_db_xtp_table_memory_stats;
Определение объема памяти для всех объектов в базе данных
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;
Пользовательский сценарий
Во-первых, задайте максимальный объем памяти сервера в виде 4 ГБ в качестве меры безопасности. Возможно, вы хотите рассмотреть другое значение для вашей среды.
-- set max server memory to 4 GB
EXEC sp_configure 'max server memory (MB)', 4048
go
RECONFIGURE
go
Создайте пул ресурсов для базы данных, содержащей оптимизированные для памяти объекты.
-- 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
Привязите пул ресурсов PoolHkdb1 к базе данных HkDb1. Для связывания пула требуется использовать базу данных в автономном режиме или в сети.
--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
Создайте следующие таблицы в базе данных с именем 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
Загрузите данные в таблицу.
-- load 150K rows
DECLARE @i int = 0
WHILE (@i <= 150000)
BEGIN
insert t1 values (@i, 'a', replicate ('b', 8000))
set @i += 1;
END
GO
При загрузке данных в таблицу можно увидеть пользовательские таблицы и объем используемого хранилища. Например, каждая строка таблицы может занимать приблизительно 8070 байт (выделяемый размер — 8 K (8192 байта)). Можно просмотреть индексы для таблицы и объем хранилища, используемого индексом. Например, 1 МБ — это 100 000 записей с округлением до следующей степени 2, (2**17) = 131 072 по 8 байт каждая. У таблицы может не быть индекса. В этом случае для нее отображается объем выделенной для индекса памяти. Другие строки могут представлять системные таблицы.
select convert(char(10), object_name(object_id)) as Name,*
from sys.dm_db_xtp_table_memory_stats;
Здесь приводятся выходные данные из 2 частей.
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
Выходные данные
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;
есть:
total_allocated_MB total_used_MB
-------------------- --------------------
1357 1191
Далее изучим выходные данные из пула ресурсов. Обратите внимание, что память, используемая из пула, составляет 1356 МБ.
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;
Результаты:
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
Связанный контент
- Введение в таблицы, оптимизированные для памяти
- Динамические административные представления таблиц, оптимизированные для памяти
- Обзор и сценарии использования OLTP в памяти
- Оптимизация производительности с помощью технологий в памяти в База данных SQL Azure
- Оптимизация производительности с помощью технологий в памяти в Управляемый экземпляр SQL Azure