Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Um pool de recursos representa um subconjunto de recursos físicos que podem ser controlados. Por padrão, os bancos de dados do SQL Server são associados e consomem os recursos do pool de recursos padrão. Para proteger o SQL Server de ter seus recursos consumidos por uma ou mais tabelas com otimização de memória e impedir que outros usuários de memória consumam a memória necessária para tabelas com otimização de memória, você deve criar um pool de recursos separado para gerenciar o consumo de memória para o banco de dados com tabelas com otimização de memória.
Um banco de dados pode ser associado a apenas um pool de recursos. No entanto, você pode associar vários bancos de dados ao mesmo pool. O SQL Server permite associar um banco de dados sem tabelas com otimização de memória a um pool de recursos, mas não tem efeito. Talvez você queira associar um banco de dados a um pool de recursos nomeado se, no futuro, desejar criar tabelas com otimização de memória no banco de dados.
Antes de associar um banco de dados a um pool de recursos, o banco de dados e o pool de recursos devem existir. A associação entra em vigor na próxima vez que o banco de dados for colocado online. Consulte Estados de Banco de Dados para obter mais informações.
Para obter informações sobre pools de recursos, consulte o Pool de Recursos do Administrador de Recursos.
Criar o banco de dados e o pool de recursos
Você pode criar o banco de dados e o pool de recursos em qualquer ordem. O que importa é que ambos existem antes de associar o banco de dados ao pool de recursos.
Criar o banco de dados
O Transact-SQL a seguir cria um banco de dados chamado IMOLTP_DB que conterá uma ou mais tabelas com otimização de memória. O caminho <driveAndPath> deve existir antes de executar este comando.
CREATE DATABASE IMOLTP_DB
GO
ALTER DATABASE IMOLTP_DB ADD FILEGROUP IMOLTP_DB_fg CONTAINS MEMORY_OPTIMIZED_DATA
ALTER DATABASE IMOLTP_DB ADD FILE( NAME = 'IMOLTP_DB_fg' , FILENAME = 'c:\data\IMOLTP_DB_fg') TO FILEGROUP IMOLTP_DB_fg;
GO
Determinar o valor mínimo para MIN_MEMORY_PERCENT e MAX_MEMORY_PERCENT
Depois de determinar as necessidades de memória para suas tabelas com otimização de memória, você precisará determinar qual porcentagem de memória disponível você precisa e definir os percentuais de memória para esse valor ou superior.
Exemplo:
Para este exemplo, presumiremos que, de seus cálculos, você determinou que suas tabelas e índices com otimização de memória precisam de 16 GB de memória. Suponha que você tenha 32 GB de memória alocada para seu uso.
À primeira vista, pode parecer que você precisa definir MIN_MEMORY_PERCENT e MAX_MEMORY_PERCENT como 50 (16 é 50% de 32). No entanto, isso não daria memória suficiente às tabelas com otimização de memória. Examinando a tabela abaixo (porcentagem de memória disponível para tabelas e índices com otimização de memória), vemos que, se houver 32 GB de memória confirmada, apenas 80% estão disponíveis para tabelas e índices com otimização de memória. Portanto, calculamos os percentuais mínimo e máximo com base na memória disponível, não na memória confirmada.
memoryNeedeed = 16
memoryCommitted = 32
availablePercent = 0.8
memoryAvailable = memoryCommitted * availablePercent
percentNeeded = memoryNeeded / memoryAvailable
Inserindo números reais
percentNeeded = 16 / (32 * 0.8) = 16 / 25.6 = 0.625
Portanto, você precisa de pelo menos 62,5% da memória disponível para atender ao requisito de 16 GB de suas tabelas e índices com otimização de memória. Como os valores de MIN_MEMORY_PERCENT e MAX_MEMORY_PERCENT devem ser inteiros, definimos-os como pelo menos 63%.
Criar um pool de recursos e configurar a memória
Ao configurar a memória para tabelas com otimização de memória, o planejamento de capacidade deve ser feito com base em MIN_MEMORY_PERCENT, não em MAX_MEMORY_PERCENT. Consulte ALTER RESOURCE POOL (Transact-SQL) para obter informações sobre MIN_MEMORY_PERCENT e MAX_MEMORY_PERCENT. Isso fornece uma disponibilidade de memória mais previsível para tabelas com otimização de memória, pois MIN_MEMORY_PERCENT causa pressão de memória para outros pools de recursos para garantir que ela seja respeitada. Para garantir que a memória esteja disponível e ajudar a evitar condições fora da memória, os valores para MIN_MEMORY_PERCENT e MAX_MEMORY_PERCENT devem ser os mesmos. Consulte Porcentagem de memória disponível para tabelas e índices com otimização de memória abaixo para obter o percentual de memória disponível para tabelas com otimização de memória com base na quantidade de memória confirmada.
Consulte as práticas recomendadas: usando In-Memory OLTP em um ambiente de VM para obter mais informações ao trabalhar em um ambiente de VM.
O código Transact-SQL a seguir cria um pool de recursos chamado Pool_IMOLTP com metade da memória disponível para uso. Depois que o pool é criado, o Resource Governor é reconfigurado para incluir Pool_IMOLTP.
-- set MIN_MEMORY_PERCENT and MAX_MEMORY_PERCENT to the same value
CREATE RESOURCE POOL Pool_IMOLTP
WITH
( MIN_MEMORY_PERCENT = 63,
MAX_MEMORY_PERCENT = 63 );
GO
ALTER RESOURCE GOVERNOR RECONFIGURE;
GO
Associar o banco de dados ao pool
Use a função sp_xtp_bind_db_resource_pool do sistema para associar o banco de dados ao pool de recursos. A função usa dois parâmetros: o nome do banco de dados e o nome do pool de recursos.
O Transact-SQL a seguir define uma associação do banco de dados IMOLTP_DB ao pool de recursos Pool_IMOLTP. A associação não se torna eficaz até que você deixe o banco de dados online.
EXEC sp_xtp_bind_db_resource_pool 'IMOLTP_DB', 'Pool_IMOLTP'
GO
A função do sistema sp_xtp_bind_db_resource_pool usa dois parâmetros de texto: database_name e pool_name.
Confirmar a associação
Confirme a associação, observando a ID do pool de recursos para IMOLTP_DB. Não deve ser nulo.
SELECT d.database_id, d.name, d.resource_pool_id
FROM sys.databases d
GO
Tornar o vínculo eficaz
Você deve colocar o banco de dados offline e voltar a ficar online depois de vinculá-lo ao pool de recursos para que a associação entre em vigor. Se o banco de dados tiver sido associado a um pool diferente anteriormente, isso removerá a memória alocada do pool de recursos anterior e as alocações de memória para sua tabela com otimização de memória e os índices agora virão do pool de recursos associado recentemente ao banco de dados.
USE master
GO
ALTER DATABASE IMOLTP_DB SET OFFLINE
GO
ALTER DATABASE IMOLTP_DB SET ONLINE
GO
USE IMOLTP_DB
GO
E agora, o banco de dados está associado ao pool de recursos.
Alterar MIN MEMORY PERCENT e MAX MEMORY PERCENT em um pool existente
Se você adicionar memória adicional ao servidor ou a quantidade de memória necessária para as alterações de tabelas com otimização de memória, talvez seja necessário alterar o valor de MIN_MEMORY_PERCENT e MAX_MEMORY_PERCENT. As etapas a seguir mostram como alterar o valor de MIN_MEMORY_PERCENT e MAX_MEMORY_PERCENT em um pool de recursos. Consulte a seção abaixo para obter diretrizes sobre quais valores usar para MIN_MEMORY_PERCENT e MAX_MEMORY_PERCENT. Consulte o tópico Práticas Recomendadas: Usando In-Memory OLTP em um ambiente de VM para obter mais informações.
Use
ALTER RESOURCE POOLpara alterar o valor de MIN_MEMORY_PERCENT e MAX_MEMORY_PERCENT.Use
ALTER RESURCE GOVERNORpara reconfigurar o Resource Governor com os novos valores.
de código de exemplo
ALTER RESOURCE POOL Pool_IMOLTP
WITH
( MIN_MEMORY_PERCENT = 70,
MAX_MEMORY_PERCENT = 70 )
GO
-- reconfigure the Resource Governor
ALTER RESOURCE GOVERNOR RECONFIGURE
GO
Porcentagem de memória disponível para índices e tabelas com otimização de memória
Se você mapear um banco de dados com tabelas com otimização de memória e uma carga de trabalho do SQL Server para o mesmo pool de recursos, o Administrador de Recursos definirá um limite interno para In-Memory uso do OLTP para que os usuários do pool não tenham conflitos sobre o uso do pool. De um modo geral, o limite para In-Memory uso de OLTP é de cerca de 80% do pool. A tabela a seguir mostra os limites reais para vários tamanhos de memória.
Ao criar um pool de recursos dedicado para o banco de dados OLTP In-Memory, você precisa estimar a quantidade de memória física necessária para as tabelas na memória após a contabilização de versões de linha e crescimento de dados. Depois de estimar a memória necessária, você criará um pool de recursos com um percentual da memória de destino de confirmação para a Instância de SQL, conforme refletido pela coluna 'committed_target_kb' na DMV sys.dm_os_sys_info (consulte sys.dm_os_sys_info). Por exemplo, você pode criar um pool de recursos P1 com 40% do total de memória disponível para a instância. Destes 40%, uma porcentagem menor é atribuída ao mecanismo OLTP In-Memory para armazenar dados OLTP In-Memory. Isso é feito para garantir que In-Memory OLTP não consuma toda a memória desse pool. Esse valor do percentual menor depende da memória comprometida de destino. A tabela a seguir descreve a memória disponível para o banco de dados OLTP In-Memory em um pool de recursos (nomeado ou padrão) antes de um erro de OOM ser gerado.
| Memória confirmada de destino | Porcentagem disponível para tabelas na memória |
|---|---|
| <= 8 GB | 70% |
| <= 16 GB | 75% |
| <= 32 GB | 80% |
| <= 96 GB | 85% |
| >96 GB | 90% |
Por exemplo, se sua "memória comprometida de destino" for de 100 GB e você estimar que suas tabelas e índices otimizados para memória precisam de 60 GB de memória, então você pode criar um pool de recursos com MAX_MEMORY_PERCENT = 67 (60 GB necessários / 0,90 = 66,667 GB - arredondar para 67 GB; 67 GB / 100 GB instalados = 67%) para garantir que seus objetos OLTP In-Memory tenham os 60 GB necessários.
Depois que um banco de dados tiver sido associado a um pool de recursos nomeado, use a consulta a seguir para ver alocações de memória em diferentes pools de recursos.
SELECT pool_id
, Name
, min_memory_percent
, max_memory_percent
, max_memory_kb/1024 AS max_memory_mb
, used_memory_kb/1024 AS used_memory_mb
, target_memory_kb/1024 AS target_memory_mb
FROM sys.dm_resource_governor_resource_pools
Esta saída de exemplo mostra que a memória utilizada por objetos otimizados para memória é de 1356 MB no pool de recursos, PoolIMOLTP, com um limite máximo de 2307 MB. Esse limite superior controla a memória total que pode ser obtida por objetos com otimização de memória do usuário e do sistema mapeados para esse pool.
Saída de exemplo
Essa saída é do banco de dados e das tabelas que criamos acima.
pool_id Name min_memory_percent max_memory_percent max_memory_mb used_memory_mb target_memory_mb
----------- ----------- ------------------ ------------------ ------------- -------------- ----------------
1 internal 0 100 3845 125 3845
2 default 0 100 3845 32 3845
259 PoolIMOLTP 0 100 3845 1356 2307
Para obter mais informações , consulte sys.dm_resource_governor_resource_pools (Transact-SQL).
Se você não associar seu banco de dados a um pool de recursos nomeado, ele será associado ao pool 'padrão'. Como o pool de recursos padrão é usado pelo SQL Server para a maioria das outras alocações, você não poderá monitorar com precisão a memória consumida por tabelas otimizadas para memória usando a DMV sys.dm_resource_governor_resource_pools no banco de dados de interesse.
Consulte Também
sys.sp_xtp_bind_db_resource_pool (Transact-SQL)
sys.sp_xtp_unbind_db_resource_pool (Transact-SQL)
Administrador de Recursos
Pool de recursos do Resource Governor
Criar um pool de recursos
Alterar configurações do pool de recursos
Excluir um pool de recursos