sys.dm_db_xtp_table_memory_stats (Transact-SQL)sys.dm_db_xtp_table_memory_stats (Transact-SQL)

APLICA-SE A: simSQL Server simBanco de Dados SQL do Azure SQL nãoAzure Synapse Analytics (SQL DW) nãoData Warehouse Paralelo APPLIES TO: yesSQL Server yesAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Retorna estatísticas de uso da memória para cada tabela OLTP na memóriaIn-Memory OLTP (usuário e sistema) no banco de dados atual.Returns memory usage statistics for each OLTP na memóriaIn-Memory OLTP table (user and system) in the current database. As tabelas do sistema têm IDs de objeto negativas e são usadas para armazenar informações de tempo de execução do mecanismo OLTP na memóriaIn-Memory OLTP.The system tables have negative object IDs and are used to store run-time information for the OLTP na memóriaIn-Memory OLTP engine. Diferentemente dos objetos de usuário, as tabelas do sistema são internas e só existem na memória, portanto, não podem ser visualizadas por meio de exibições do catálogo.Unlike user objects, system tables are internal and only exist in-memory, therefore, they are not visible through catalog views. As tabelas do sistema são usadas para armazenar informações como metadados de todos os arquivos de dados/delta no armazenamento, mesclar solicitações, marcas d'água para arquivos delta para filtros de linha, tabelas removidas e informações relevantes para recuperação e backups.System tables are used to store information such as meta-data for all data/delta files in storage, merge requests, watermarks for delta files to filter rows, dropped tables, and relevant information for recovery and backups. Considerando que o mecanismo OLTP na memóriaIn-Memory OLTP pode ter até 8.192 pares de arquivos de dados e delta, para bancos de dados grandes na memória, a memória usada pelas tabelas do sistema podem ter alguns megabytes.Given that the OLTP na memóriaIn-Memory OLTP engine can have up to 8,192 data and delta file pairs, for large in-memory databases, the memory taken by system tables can be a few megabytes.

Para obter mais informações, veja OLTP in-memory (Otimização na memória).For more information, see In-Memory OLTP (In-Memory Optimization).

Nome da colunaColumn name Tipo de dadosData type DESCRIÇÃODescription
object_idobject_id intint A ID de objeto da tabela.The object ID of the table. NULL para tabelas do sistema OLTP na memória.NULL for In-Memory OLTP system tables.
memory_allocated_for_table_kbmemory_allocated_for_table_kb bigintbigint Memória alocada para essa tabela.Memory allocated for this table.
memory_used_by_table_kbmemory_used_by_table_kb bigintbigint Memória usada pela tabela, incluindo versões de linha.Memory used by table, including row versions.
memory_allocated_for_indexes_kbmemory_allocated_for_indexes_kb bigintbigint Memória alocada para índices nessa tabela.Memory allocated for indexes on this table.
memory_used_by_indexes_kbmemory_used_by_indexes_kb bigintbigint Memória consumida para índices nessa tabela.Memory consumed for indexes on this table.

PermissõesPermissions

Todas as linhas são retornadas se você tiver a permissão VIEW DATABASE STATE no banco de dados atual.All rows are returned if you have VIEW DATABASE STATE permission on the current database. Caso contrário, um conjunto de linhas vazio será retornado.Otherwise, an empty rowset is returned.

Se você não tiver permissão VIEW DATABASE, todas as colunas serão retornadas para as linhas nas tabelas nas quais você tiver permissão SELECT.If you do not have VIEW DATABASE permission, all columns will be returned for rows in tables that you have SELECT permission on.

As tabelas do sistema são retornadas apenas para usuários com permissão VIEW DATABASE STATE.System tables are returned only for users with VIEW DATABASE STATE permission.

ExemplosExamples

Você pode consultar a seguinte DMV para obter a memória alocada para as tabelas e os índices no banco de dados:You can query the following DMV to get the memory allocated for the tables and indexes within the database:

-- finding memory for objects  
SELECT OBJECT_NAME(object_id), *   
FROM sys.dm_db_xtp_table_memory_stats;  

Para localizar a memória de todos os objetos no banco de dados:To find memory for all objects within the 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;  

Cenário de usoUser Scenario

Primeiro crie as seguintes tabelas em um banco de dados chamado HkDb1.First create the following tables in a database called HkDb1.

-- set max server memory to 4 GB  
EXEC sp_configure 'max server memory (MB)', 4048  
go  
  
RECONFIGURE  
go  
  
-- create a resource pool for database with memory-optimized objects  
CREATE RESOURCE POOL PoolHkDb1 WITH (MAX_MEMORY_PERCENT = 50);  
ALTER RESOURCE GOVERNOR RECONFIGURE;  
go  
  
--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  
  
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  

Quando os dados forem carregados em uma tabela, você poderá consultar as tabelas definidas pelo usuário e a quantidade de armazenamento que eles estão usando.When data is loaded into a table, you can see user defined tables and how much storage it is using. Por exemplo, cada linha de uma tabela pode ter aproximadamente 8070 bytes (o tamanho da alocação é 8.000 (8192 bytes)).For example, each row of a table could be approximately 8070 bytes (allocation size is 8K (8192 bytes)). Você pode consultar índices por tabela e a quantidade de armazenamento usada pelo índice.You can see indexes per table and how much storage the index uses. Por exemplo, 1 MB representa 100.000 entradas arredondadas para a próxima potência de 2 (2 * * 17) = 131072 de 8 bytes cada um.For example, 1MB is 100K entries rounded to the next power of 2 (2**17) = 131072 of 8 bytes each. Uma tabela não pode ter um índice; nesse caso, ela mostrará a alocação de memória do índice.A table may not have an index, in which case it will show memory allocation for the index. Outras linhas podem representar tabelas do sistemaOther rows may represent system tables

select convert(char(10), object_name(object_id)) as Name,*   
from sys.dm_db_xtp_table_memory_stats  

Aqui estão as saídas, em duas partes:Here is the output, in two parts:

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 deThe output of,

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  

Em seguida, vamos examinar a saída do pool de recursos.Next, let's look at the output from the resource pool. Observe que a memória usada pelo pool é 1356 MBNote, that memory used from the pool 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  

este é o resultado:here is the output:

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  

Consulte TambémSee Also

Exibições de gerenciamento dinâmico de tabela com otimização de memória (Transact-SQL)Memory-Optimized Table Dynamic Management Views (Transact-SQL)