Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Banco de Dados SQL do Azure
Instância Gerenciada SQL do Azure
Devolve estatísticas de utilização de memória para cada tabela OLTP In-Memory (utilizador e sistema) na base de dados atual. As tabelas do sistema têm IDs negativos de objetos e são usadas para armazenar informação em tempo de execução para o motor OLTP In-Memory. Ao contrário dos objetos de utilizador, as tabelas do sistema são internas e só existem na memória, pelo que não são visíveis através das visualizações de catálogo. As tabelas do sistema são usadas para armazenar informações como metadados de todos os ficheiros de dados/delta em armazenamento, pedidos de fusão, marcas de água para ficheiros delta para filtrar linhas, tabelas eliminadas e informações relevantes para recuperação e backups. Dado que o motor OLTP In-Memory pode ter até 8.192 pares de dados e ficheiros delta, para grandes bases de dados em memória, a memória ocupada pelas tabelas do sistema pode ser de alguns megabytes.
Para obter mais informações, consulte In-Memory OLTP (In-Memory Optimization).
| Nome da coluna | Tipo de dados | Description |
|---|---|---|
| object_id | int | O ID do objeto da tabela.
NULL para In-Memory tabelas do sistema OLTP. |
| memory_allocated_for_table_kb | bigint | Memória alocada para esta tabela. |
| memory_used_by_table_kb | bigint | Memória usada pela tabela, incluindo versões por linhas. |
| memory_allocated_for_indexes_kb | bigint | Memória alocada para índices nesta tabela. |
| memory_used_by_indexes_kb | bigint | Memória consumida para índices nesta tabela. |
Permissions
Todas as linhas são devolvidas se tiver permissão VER ESTADO DA BASE DE DADOS na base de dados atual. Caso contrário, um conjunto de linhas vazio é devolvido.
Se não tiver permissão VER BASE de DADOS, todas as colunas serão devolvidas para linhas em tabelas para as quais tem permissão SELECT.
As tabelas do sistema são devolvidas apenas para utilizadores com permissão VIEW DATABASE STATE.
Permissões para SQL Server 2022 e posterior
É necessária a permissão VIEW DATABASE PERFORMANCE STATE no banco de dados.
Examples
Pode consultar o seguinte IMT para obter a memória alocada para as tabelas e índices dentro da base de dados:
-- finding memory for objects
SELECT OBJECT_NAME(object_id), *
FROM sys.dm_db_xtp_table_memory_stats;
Para encontrar memória para todos os objetos dentro da base de dados:
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;
Cenário do Utilizador
Primeiro, defina a memória máxima do servidor para 4GB como medida de segurança. Pode querer considerar um valor diferente para o seu ambiente.
-- set max server memory to 4 GB
EXEC sp_configure 'max server memory (MB)', 4048
go
RECONFIGURE
go
Crie um pool de recursos para a base de dados que contenha os objetos otimizados para memória.
-- 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
Vincule o pool de recursos 'PoolHkdb1' à base de dados 'HkDb1'. Isto requer levar a base de dados offline/online para associar o pool.
--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
Crie as seguintes tabelas numa base de dados chamada 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
Carregue dados na tabela.
-- load 150K rows
DECLARE @i int = 0
WHILE (@i <= 150000)
BEGIN
insert t1 values (@i, 'a', replicate ('b', 8000))
set @i += 1;
END
GO
Quando os dados são carregados numa tabela, pode ver as tabelas definidas pelo utilizador e quanto armazenamento estão a usar. Por exemplo, cada linha de uma tabela pode ter aproximadamente 8070 bytes (o tamanho da alocação é 8K (8192 bytes)). Pode ver os índices por tabela e quanto espaço de armazenamento o índice utiliza. Por exemplo, 1MB são 100K entradas arredondadas para a potência seguinte de 2 (2**17) = 131072 de 8 bytes cada. Uma tabela pode não ter um índice, caso em que mostrará a alocação de memória para o índice. Outras linhas podem representar tabelas do sistema
select convert(char(10), object_name(object_id)) as Name,*
from sys.dm_db_xtp_table_memory_stats;
Aqui está o resultado, dividido em duas partes:
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
A saída de,
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
De seguida, vejamos a saída do pool de recursos. Note-se que a memória usada do pool é de 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 saída:
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
Conteúdo relacionado
- Introdução às tabelas Memory-Optimized
- Memory-Optimized Vistas de Gestão Dinâmica da Tabela
- In-Memory Visão Geral e Cenários de Utilização OLTP
- Otimizar o desempenho usando tecnologias na memória no Banco de Dados SQL do Azure
- Otimizar o desempenho usando tecnologias na memória no Azure SQL Managed Instance