Usar o OLTP in-memory no Banco de Dados SQL do Azure para melhorar o desempenho do aplicativo
Aplica-se a: Banco de Dados SQL do Azure
O OLTP in-memory pode ser usado para melhorar o desempenho do processamento de transações, a ingestão de dados e os cenários de dados transitórios sem aumentar o objetivo de serviço do banco de dados ou do pool elástico.
- Os bancos de dados e os pools elásticos nas camadas de serviço Premium (DTU) e Comercialmente Crítico (vCore) são compatíveis com o OLTP in-memory.
- A camada de serviço de hiperescala é compatível com um subconjunto de objetos OLTP in-memory, mas não inclui tabelas com otimização de memória. Para obter mais informações, consulte Limitações da hiperescala.
Siga estas etapas para começar a usar o OLTP in-memory em seus bancos de dados existentes.
Etapa 1: Verifique se que você estivá usando um banco de dados de camada Premium ou Comercialmente Crítico
O OLTP in-memory terá suporte se o resultado da seguinte consulta for 1
(não 0
):
SELECT DATABASEPROPERTYEX(DB_NAME(), 'IsXTPSupported');
XTP significa Extreme Transaction Processing, que é um nome informal do recurso OLTP in-memory.
Etapa 2: Identificar os objetos para migrar para o OLTP Na Memória
O SSMS (SQL Server Management Studio) inclui um relatório Visão Geral da Análise do Desempenho da Transação que pode ser executado em um banco de dados com uma carga de trabalho ativa. O relatório identifica as tabelas e os procedimentos armazenados candidatos à migração para OLTP Na Memória.
No SSMS, para gerar o relatório:
- No Pesquisador de Objetos, clique com o botão direito do mouse no nó do banco de dados.
- Selecione Relatórios>Relatórios Padrão>Visão Geral da Análise de Desempenho da Transação.
Para saber mais sobre como acessar os benefícios do OLTP in-memory, confira Determinando se uma tabela ou um procedimento armazenado deve ser transportado para o OLTP Na Memória.
Etapa 3: Criar um banco de dados de teste comparável
Suponha que o relatório indique que o banco de dados tem uma tabela que pode se beneficiar do que está sendo convertido em uma tabela com otimização de memória. É recomendável que você primeiro teste para confirmar a indicação.
Você precisa de uma cópia de teste do seu banco de dados de produção. O banco de dados de teste deve estar no mesmo nível da camada de serviço que o banco de dados de produção.
Para facilitar o teste, ajuste seu banco de dados de teste da seguinte maneira:
Conecte-se ao banco de dados de teste usando o SQL Server Management Studio (SSMS).
Para evitar a necessidade da opção
WITH (SNAPSHOT)
em consultas, defina a opçãoMEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT
do banco de dados atual, como mostrado na seguinte instrução T-SQL:ALTER DATABASE CURRENT SET MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT = ON;
Etapa 4: migrar tabelas
Você deve criar e preencher uma cópia com otimização de memória da tabela que você deseja testar. Você pode criá-la usando:
Assistente de Otimização de Memória no SSMS
Para usar essa opção de migração:
Conecte-se ao banco de dados de teste com o SSMS.
No Pesquisador de Objetos, clique com o botão direito do mouse na tabela e selecione Supervisor de Otimização de Memória.
O assistente Supervisor Otimizador de Memória da Tabela é exibido.
No assistente, selecione Validação de migração (ou no botão Avançar) para ver se a tabela tem algum recurso sem suporte nas tabelas com otimização de memória. Para saber mais, veja:
- A lista de verificação de otimização de memória no Supervisor de Otimização de Memória.
- Construções Transact-SQL sem suporte do OLTP Na Memória.
- Migrando para o OLTP Na Memória.
Se a tabela não tiver recursos sem suporte, o supervisor poderá executar o esquema e a migração de dados reais para você.
T-SQL Manual
Para usar essa opção de migração:
- Conecte-se ao seu banco de dados de teste usando o SSMS.
- Obtenha o script T-SQL completo para a tabela e as respectivas restrições e índices.
- No SSMS, clique com o botão direito do mouse no nó da sua tabela.
- Selecione Script de Tabela como>CRIAR Para>Nova Janela de Consulta.
- Na janela de script, adicione
WITH (MEMORY_OPTIMIZED = ON)
à instruçãoCREATE TABLE
. Para obter mais informações, consulte Sintaxe para tabelas com otimização de memória. - Se houver um índice CLUSTERED, altere-o para NONCLUSTERED.
- Renomeie a tabela existente usando sp_rename.
- Crie a nova cópia da tabela com otimização de memória executando o script
CREATE TABLE
editado. - Copie os dados para sua tabela com otimização de memória usando
INSERT...SELECT * INTO
:INSERT INTO [<new_memory_optimized_table>] SELECT * FROM [<old_disk_based_table>];
Etapa 5 (opcional): migrar procedimentos armazenados
O OLTP in-memory também permite procedimentos armazenados compilados nativamente, o que pode melhorar o desempenho do T-SQL.
Considerações sobre procedimentos armazenados compilados nativamente
Um procedimento armazenado compilado nativamente deve ter as seguintes opções na sua cláusula WITH
do T-SQL:
- NATIVE_COMPILATION: significa que as instruções Transact-SQL no procedimento são todas compiladas em código nativo para uma execução eficiente.
- SCHEMABINDING: significa que as tabelas referenciadas no procedimento armazenado não pode ter suas definições alteradas de alguma forma que afete o próprio procedimento armazenado, a menos que você o descarte.
Um módulo compilado de forma nativa deve usar um bloco ATOMIC para o gerenciamento de transações. Não há uso de declarações BEGIN TRANSACTION
ou ROLLBACK TRANSACTION
explícitas. Seu código pode encerrar o bloco atômico com uma instrução THROW, por exemplo, se detectar uma violação de regra de negócios.
Um exemplo de um procedimento armazenado nativamente compilado
O T-SQL para criar um procedimento armazenado nativamente compilado é semelhante ao seguinte modelo:
CREATE PROCEDURE schemaname.procedurename
@param1 type1, ...
WITH NATIVE_COMPILATION, SCHEMABINDING
AS
BEGIN ATOMIC WITH
(
TRANSACTION ISOLATION LEVEL = SNAPSHOT,
LANGUAGE = N'<desired sys.syslanuages.sysname value>'
)
...
END;
- Para
TRANSACTION_ISOLATION_LEVEL
, oSNAPSHOT
é o valor mais comum para os procedimentos armazenados nativamente compilados. No entanto, também há suporte para um subconjunto dos outros valores:REPEATABLE READ
SERIALIZABLE
- O valor
LANGUAGE
deve estar presente na exibiçãosys.syslanguages
, na colunaname
. Por exemplo,N'us_english'
.
Como migrar um procedimento armazenado para usar a compilação nativa
As etapas de migração são:
- Obtenha o script
CREATE PROCEDURE
para o procedimento armazenado (interpretado) regular. - Reescreva o cabeçalho para que ele corresponda ao modelo anterior.
- Determinar se o código T-SQL de procedimento armazenado usa os recursos sem suporte para procedimentos armazenados compilados nativamente. Implemente soluções alternativas, se necessário. Para saber mais, veja Problemas de migração para procedimentos armazenados compilados nativamente.
- Renomeie o antigo procedimento armazenado usando sp_rename ou descarte-o.
- Execute o script T-SQL
CREATE PROCEDURE
editado.
Etapa 6: executar sua carga de trabalho no teste
Execute uma carga de trabalho em seu banco de dados de teste que seja semelhante à carga de trabalho executada em seu banco de dados de produção. Isso deve revelar o ganho de desempenho obtido pelo uso do OLTP in-memory para tabelas e procedimentos armazenados.
Os principais atributos da carga de trabalho são:
- Número de conexões simultâneas.
- Taxa de leitura/gravação.
Para personalizar e executar a carga de trabalho de teste, considere usar a ferramenta ostress.exe
do grupo de ferramentas Utilitários RML. Para obter mais informações, consulte Exemplo de In-Memory no Banco de Dados SQL do Azure.
Para minimizar a latência da rede, execute ostress.exe
na mesma região do Azure em que está o banco de dados.
Etapa 7: Monitoramento pós-implementação
Considere monitorar os efeitos de desempenho de sua implementação do OLTP in-memory em produção: