Usar o OLTP in-memory na Instância Gerenciada de SQL para melhorar o desempenho de aplicativos
Aplica-se a: Instância Gerenciada de 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. A camada de serviço Comercialmente Crítico inclui uma certa quantidade de Memória OLTP In-Memory máxima, um limite determinado pelo número de vCores.
Siga estas etapas para adotar o in-memory OLTP no banco de dados existente na Instância Gerenciada de SQL do Azure.
Etapa 1 identificar os objetos para migrar para o OLTP in-memory
O SQL Server Management Studio (SSMS) 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 In-Memory.
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 2: 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 na mesma camada de serviço (Comercialmente Crítico) e a contagem de vCore 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 3: 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 In-Memory.
- Migrando para o OLTP In-Memory.
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 banco de dados de teste usando o SSMS (ou um utilitário semelhante).
- Obtenha o script T-SQL completo para a tabela e seus í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
. - 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 4 (opcional): migrar procedimentos armazenados
O recurso In-Memory também pode modificar um procedimento armazenado para melhorar o desempenho.
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 tabelas cujas definições de coluna o procedimento armazenado não pode alterar de alguma forma que afete o próprio procedimento armazenado, a menos que você descarte o procedimento armazenado.
Um módulo nativo deve usar grandes blocos ATOMIC para o gerenciamento de transações. Não há função para BEGIN TRANSACTION
ou ROLLBACK TRANSACTION.
explícitos Se seu código detectar uma violação de uma regra de negócio, poderá finalizar o bloco atômico com uma instrução THROW.
CREATE PROCEDURE típico para compilados nativamente
Normalmente, 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
, o SNAPSHOT é o valor mais comum para o procedimento armazenado nativamente compilado. 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
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 simplesmente descarte-o usando DROP.
- Execute o script T-SQL
CREATE PROCEDURE
editado.
Etapa 5: 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 com o uso do recurso Na Memória 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 ajustar e executar a carga de trabalho de teste, considere usar a ferramenta útil ostress.exe.
Para minimizar a latência de rede, execute o teste na mesma região geográfica do Azure onde está o banco de dados.
Etapa 6: Monitoramento pós-implementação
Considere monitorar os efeitos de desempenho de suas implementações de Na Memória em produção: