Partilhar via


Otimizar o desempenho usando tecnologias na memória na Instância Gerenciada SQL do Azure

Aplica-se a: de Instância Gerenciada SQL do Azure

As tecnologias na memória permitem melhorar o desempenho do seu aplicativo e, potencialmente, reduzir o custo da sua instância gerenciada pelo SQL. O OLTP na memória está disponível na camada de serviço Business Critical da Instância Gerenciada SQL do Azure.

Quando usar tecnologias em memória

Usando tecnologias in-memory, você pode obter melhorias de desempenho com várias cargas de trabalho:

  • transacional (processamento transacional online (OLTP)) onde a maioria das solicitações lê ou atualiza um conjunto menor de dados, por exemplo, operações create/read/update/delete (CRUD).
  • analítico (processamento analítico on-line (OLAP)) onde a maioria das consultas tem cálculos complexos com o objetivo de geração de relatórios, e também processos regularmente agendados que executam operações de carga (ou carga em massa) e/ou registam alterações nos dados em tabelas existentes. Muitas vezes, as cargas de trabalho OLAP são atualizadas periodicamente a partir de cargas de trabalho OLTP.
  • mista (transação híbrida/processamento analítico (HTAP)) em que as consultas OLTP e OLAP são executadas no mesmo conjunto de dados.

As tecnologias na memória podem melhorar o desempenho dessas cargas de trabalho mantendo os dados que devem ser processados na memória, usando compilação nativa das consultas ou processamento avançado, como processamento em lote e instruções SIMD disponíveis no hardware subjacente.

Visão geral

A Instância Gerenciada SQL do Azure dá suporte às seguintes tecnologias na memória:

  • OLTP na memória aumenta o número de transações por segundo e reduz a latência para o processamento de transações. Os cenários que se beneficiam do OLTP na memória são: processamento de transações de alta taxa de processamento, como negociação e jogos, ingestão de dados de eventos ou dispositivos IoT, armazenamento em cache, carga de dados e cenários de tabelas temporárias e variáveis de tabela.
  • Os índices columnstore agrupados reduzem o espaço ocupado pelo armazenamento (até 10 vezes) e melhoram o desempenho para consultas de relatórios e análises. Você pode usá-lo com tabelas de fatos nos seus data marts para acomodar mais dados no seu banco de dados e melhorar o desempenho. Além disso, você pode usá-lo com dados históricos em seu banco de dados operacional para arquivar e ser capaz de consultar até 10 vezes mais dados.
  • índices columnstore não clusterizados para HTAP ajudam você a obter insights em tempo real sobre sua empresa consultando o banco de dados operacional diretamente, sem a necessidade de executar um processo caro de extração, transformação e carregamento (ETL) e esperar que o data warehouse seja preenchido. Os índices columnstore não clusterizados permitem a execução rápida de consultas analíticas no banco de dados OLTP, reduzindo o impacto na carga de trabalho operacional.
  • Índices columnstore clusterizados otimizados para memória para HTAP permite que você execute um processamento rápido de transações e simultaneamente execute consultas de análise muito rapidamente nos mesmos dados.

Os índices Columnstore e o OLTP na memória foram introduzidos no SQL Server em 2012 e 2014, respectivamente. O Banco de Dados SQL do Azure, a Instância Gerenciada SQL do Azure e o SQL Server compartilham a mesma implementação de tecnologias na memória.

Observação

Para obter um tutorial passo a passo detalhado para demonstrar as vantagens de desempenho da tecnologia OLTP na memória, usando o banco de dados de exemplo AdventureWorksLT e ostress.exe, consulte Exemplo na memória no Azure SQL Managed Instance.

Benefícios da tecnologia in-memory

Devido ao processamento mais eficiente de consultas e transações, as tecnologias in-memory também ajudam a reduzir custos. Uma vez na camada de serviço Business Critical da Instância Gerenciada SQL do Azure, normalmente não é necessário atualizar a instância gerenciada SQL para obter ganhos de desempenho. Em alguns casos, poderá até mesmo reduzir o escalão de preços, mantendo ainda melhorias de desempenho com tecnologias em memória.

Este artigo descreve aspetos dos índices OLTP e columnstore na memória que são específicos da Instância Gerenciada SQL do Azure e também inclui exemplos:

  • Você verá o impacto dessas tecnologias nos limites de armazenamento e tamanho de dados.
  • Você verá como gerenciar a movimentação de bancos de dados que usam essas tecnologias entre os diferentes níveis de preços.
  • Você verá dois exemplos que ilustram o uso de OLTP em memória, assim como índices armazenados em colunas.

Para obter mais informações sobre OLTP na memória no SQL Server, consulte:

OLTP na memória

A tecnologia OLTP na memória fornece operações de acesso a dados extremamente rápidas, mantendo todos os dados na memória. Ele também usa índices especializados, compilação nativa de consultas e acesso a dados sem trava para melhorar o desempenho da carga de trabalho OLTP. Há duas maneiras de organizar seus dados OLTP na memória:

  • Formato de armazenamento de linha otimizado para memória, em que cada linha é um objeto de memória separado. Este é um formato OLTP clássico na memória otimizado para cargas de trabalho OLTP de alto desempenho. Há dois tipos de tabelas com otimização de memória que podem ser usadas no formato de armazenamento de linha com otimização de memória:

    • Tabelas duráveis (SCHEMA_AND_DATA) onde as linhas colocadas na memória são preservadas após a reinicialização do servidor. Este tipo de tabelas comporta-se como uma tabela tradicional de armazenamento em linhas, com os benefícios adicionais das otimizações em memória.
    • Tabelas não duráveis (SCHEMA_ONLY) onde as linhas não são preservadas após a reinicialização. Esse tipo de tabela foi projetado para dados temporários (por exemplo, substituição de tabelas temporárias) ou tabelas em que você precisa carregar dados rapidamente antes de movê-los para alguma tabela persistente (as chamadas tabelas de preparo).
  • Formato Columnstore otimizado para memória onde os dados são organizados num formato colunar. Essa estrutura foi projetada para cenários HTAP em que você precisa executar consultas analíticas na mesma estrutura de dados em que sua carga de trabalho OLTP está sendo executada.

Observação

A tecnologia OLTP na memória foi projetada para as estruturas de dados que podem residir totalmente na memória. Como os dados na memória não podem ser descarregados para o disco, verifique se você está usando uma instância gerenciada pelo SQL que tenha memória suficiente. Para obter mais informações, consulte Tamanho de dados e limite de armazenamento para OLTP na memória.

Tamanho de dados e limite de armazenamento para OLTP na memória

OLTP na memória inclui tabelas com otimização de memória, que são usadas para armazenar dados do usuário. Essas tabelas são necessárias para caber na memória. Essa ideia é conhecida como de armazenamento OLTP na memória.

A camada de serviço Business Critical inclui uma certa quantidade de de memória OLTP Max In-Memory determinada pelo número de vCores.

Os seguintes itens contam para o limite de armazenamento OLTP na memória:

  • Linhas de dados de utilizadores ativos em tabelas otimizadas para memória e variáveis de tabela. As versões antigas de registo não contam para o limite.
  • Índices em tabelas com otimização de memória.
  • Sobrecarga operacional das operações ALTER TABLE.

Se atingir o limite, receberá um erro de cota excedida e não poderá mais inserir ou atualizar dados. Para atenuar esse erro, exclua dados ou aumente a camada de preços do banco de dados ou pool.

Para obter detalhes sobre como monitorar a utilização do armazenamento OLTP na memória e configurar alertas quando você quase atinge o limite, consulte Monitor de armazenamento na memória.

Alterar a configuração de hardware ou a contagem de vCore

O downgrade da configuração de hardware ou da contagem de vCore pode afetar negativamente a sua instância gerida pelo SQL.

Os dados em tabelas com otimização de memória devem caber dentro do limite de armazenamento OLTP na memória para sua configuração de hardware e contagem de vCore. Se você tentar reduzir para uma configuração que não tenha armazenamento OLTP suficiente disponível na memória, a operação falhará.

Determinar se existem objetos na memória

Há uma maneira programática de entender se um determinado banco de dados em sua instância gerenciada SQL oferece suporte a OLTP na memória. Você pode executar a seguinte consulta Transact-SQL:

SELECT DatabasePropertyEx(DB_NAME(), 'IsXTPSupported');

Se a consulta retornar 1, OLTP na memória é suportado neste banco de dados.

As consultas a seguir identificam todos os objetos usando a tecnologia in-memory:

SELECT * FROM sys.tables WHERE is_memory_optimized=1
SELECT * FROM sys.table_types WHERE is_memory_optimized=1
SELECT * FROM sys.sql_modules WHERE uses_native_compilation=1

Armazenamento de colunas em memória

A tecnologia de armazenamento em coluna em memória permite-lhe armazenar e consultar uma grande quantidade de dados nas tabelas. A tecnologia Columnstore usa o formato de armazenamento de dados baseado em colunas e o processamento de consultas em lote para obter um ganho de até 10 vezes o desempenho da consulta em cargas de trabalho OLAP em relação ao armazenamento tradicional orientado a linhas. Você também pode obter ganhos de até 10 vezes a compactação de dados em relação ao tamanho de dados não compactados.

Há dois tipos de modelos columnstore que você pode usar para organizar seus dados:

  • Coluna agrupada de armazenamento onde todos os dados na tabela são organizados em formato de colunas. Neste modelo, todas as linhas da tabela são colocadas em formato colunar que comprime altamente os dados e permite executar consultas analíticas e relatórios rápidos na tabela. Dependendo da natureza dos seus dados, o tamanho dos seus dados pode ser reduzido 10x-100x. O modelo columnstore clusterizado também permite a ingestão rápida de uma grande quantidade de dados (carga em massa), uma vez que grandes lotes de dados superiores a 100.000 linhas são compactados antes de serem armazenados no disco. Este modelo é uma boa escolha para os cenários clássicos de armazém de dados.
  • Armazém de colunas não-clusterizado onde os dados são armazenados numa tabela tradicional de armazenamento em linha e há um índice no formato de armazém de colunas que é usado para consultas analíticas. Esse modelo permite o Processamento Híbrido Transactional-Analytic (HTAP): a capacidade de executar análises em tempo real de elevado desempenho sobre uma carga de trabalho transacional. As consultas OLTP são executadas na tabela rowstore otimizada para acessar um pequeno conjunto de linhas, enquanto as consultas OLAP são executadas no índice columnstore, que é a melhor opção para verificações e análises. O otimizador de consulta escolhe dinamicamente o formato rowstore ou columnstore com base na consulta. Os índices columnstore não clusterizados não diminuem o tamanho dos dados, uma vez que o conjunto de dados original é mantido na tabela de armazenamento de linhas original sem qualquer alteração. No entanto, o tamanho do índice columnstore adicional deve ser várias ordens de magnitude menor do que o índice B-tree equivalente.

Observação

A tecnologia columnstore na memória mantém apenas os dados necessários para processamento na memória, enquanto os dados que não cabem na memória são armazenados no disco. Portanto, a quantidade de dados em estruturas columnstore na memória pode exceder a quantidade de memória disponível.

Tamanho e armazenamento de dados para índices columnstore

Os índices Columnstore não precisam caber na memória. Portanto, o único limite no tamanho dos índices é o tamanho máximo geral do banco de dados. Para obter mais informações, consulte limites de recursos da Instância Gerenciada SQL do Azure. A Instância Gerenciada SQL do Azure dá suporte a índices columnstore em todas as camadas.

Quando você usa índices columnstore clusterizados, a compactação colunar é usada para o armazenamento da tabela base. Esta compressão pode reduzir significativamente o espaço de armazenamento dos dados dos utilizadores, o que significa que pode armazenar mais dados no banco de dados. E a compressão pode ser aumentada com compressão de arquivo colunar. A quantidade de compactação que você pode alcançar depende da natureza dos dados, mas 10 vezes a compactação não é incomum.

Por exemplo, se tiveres uma base de dados com um tamanho máximo de 1 terabyte (TB) e conseguires 10 vezes a compressão usando índices de armazenamento em colunas, podes acomodar até um total de 10 TB de dados de utilizador na base de dados.

Quando você usa índices columnstore não clusterizados, a tabela base ainda é armazenada no formato tradicional de armazenamento de linhas. Portanto, a economia de armazenamento não é tão significativa quanto com os índices columnstore clusterizados. No entanto, se você estiver substituindo muitos índices tradicionais não clusterizados por um único índice columnstore, ainda poderá ver uma economia geral no espaço de armazenamento da tabela.