Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 1311|Resposta: 1

[Fonte] Tabelas otimizadas para memória para bancos de dados SQL SERVER

[Copiar link]
Publicado em 10/05/2025 21:28:18 | | | |
Introdução às tabelas otimizadas para memória

Tabelas otimizadas para memória são tabelas criadas usando CREATE TABLE (Transact-SQL).

Por padrão, tabelas otimizadas para memória são totalmente persistentes. Assim como as transações em tabelas (tradicionais) baseadas em disco, as transações em tabelas otimizadas para memória são totalmente atômicas, consistentes, isoladas e persistentes (ACID). Tabelas otimizadas para memória e procedimentos armazenados compilados nativamente suportam apenas um subconjunto de recursos do Transact-SQL.

A partir do SQL Server 2016 e no Azure SQL Database, não há restrições para a colação ou páginas de código específicas de OLTP em memória.

A memória primária de uma tabela otimizada para memória é a memória primária. Leia as linhas da tabela de memória e escreva essas linhas na memória. Outra cópia dos dados da tabela é mantida em disco, mas apenas para fins de persistência. Para mais informações sobre tabelas persistentes, veja Criar e gerenciar armazenamento de objetos para otimização de memória. Os dados em tabelas otimizadas para memória são lidos do disco apenas durante a recuperação do banco de dados (por exemplo, após uma reinicialização do servidor).

Para maiores ganhos de desempenho, o OLTP em memória suporta tabelas persistentes com latência persistente transacional. Transações persistentes atrasadas são salvas no disco logo após a transação ser comprometida e o controle retorna ao cliente. Em troca de melhor desempenho, transações comprometidas que não são salvas no disco são perdidas em caso de falha do servidor ou failover.

Além das tabelas persistentes otimizadas para memória padrão, o SQL Server suporta tabelas não registradas e não otimizadas para memória persistente, e seus dados não são persistidos no disco. Isso significa que as transações nessas tabelas não requerem nenhuma E/S de disco, mas se ocorrer uma falha de servidor ou failover, os dados são perdidos.

O OLTP em memória se integra ao SQL Server para proporcionar uma experiência fluida em todos os aspectos, como desenvolvimento, implantação, gerenciabilidade e suporte. Um banco de dados pode conter tanto objetos em memória quanto objetos baseados em disco.

As linhas na tabela otimizada para memória são versionadas. Isso significa que cada linha da tabela pode ter múltiplas versões. Todas as versões de linha são mantidas na mesma estrutura de dados de tabela. O versionamento de linha é usado para permitir leituras e gravações concorrentes na mesma linha. Para mais informações sobre leituras e gravações concorrentes na mesma linha, veja Coisas na Tabela de Otimização de Memória.

Etapas aproximadas e limitações de uso

Passos:

(1) Criar um banco de dados e MEMORY_OPTIMIZED_DATA grupo de arquivos (alterar o banco de dados adicionar grupo de arquivos, cada banco de dados só pode ter um grupo de arquivos MEMORY_OPTIMIZED_DATA!!) )
(2) Adicionar uma pasta ao grupo de arquivos para armazenar os arquivos de dados (por favor, não crie essa pasta antecipadamente, use alterar database add file() to filegroup)
(3) Criar tabelas persistentes/não persistentes otimizadas para memória (SQL Server 2014 é persistido por padrão), e você também deve definir uma chave primária baseada em um índice hash não agregado. Índices hashados são o único tipo de índice suportado em tabelas otimizadas para memória.
(4) Utilizar procedimentos armazenados compilados localmente: Tabelas otimizadas para memória suportam procedimentos armazenados compilados localmente, desde que esses procedimentos armazenados apenas referenciam tabelas otimizadas para memória.

Limite:

(1) A tabela otimizada para memória deve ser colocada sob o banco de dados com o grupo de arquivos CONTAINS MEMORY_OPTIMIZED_DATA.
(2) A tabela otimizada para memória deve definir uma chave primária baseada em um índice de hash não agregado, e a tabela deve ser definidaA verificação de chave externa ou restrições não é suportada
(3) A tabela de otimização de memória deve ter memória suficiente, caso contrário, operações como inserir atualizações falharão.
(4) O SQL Server 2014 possui muitas limitações nessas tabelas. Por exemplo, eles não suportam chaves estrangeiras ou verificação de restrições (que parece semelhante ao mecanismo de armazenamento de memória do MySQL), elesCampos IDENTITY ou gatilhos DML também não são suportados

Use o tutorial

As versões do banco de dados são as seguintes:

Microsoft SQL Server 2022 (RTM-CU15-GDR) (KB5046059) - 16.0.4150.1 (X64)
        25 Set 2024 17:34:41
        Direitos autorais (C) 2022 Microsoft Corporation
        Edição Empresarial: Licenciamento baseado em núcleo (64 bits) no Linux (Ubuntu 22.04.4 LTS) <X64>

Primeiro, crie um banco de dados e um grupo de arquivos com o seguinte comando:

Se você não criar um grupo otimizado para memória, um erro será reportado ao criar uma tabela otimizada para memória:Não é possível criar tabelas otimizadas para memória. Para criar tabelas otimizadas para memória, o banco de dados deve ter um MEMORY_OPTIMIZED_FILEGROUP online e com pelo menos um contêiner.

Crie duas tabelas otimizadas para memória para testar, uma persistente e outra não persistente, com o seguinte comando:

A tabela de otimização de memória possui duas opções (DURABILIDADE = SCHEMA_AND_DATA), (DURABILIDADE = SCHEMA_ONLY)
Tabela de durabilidade: DURABILIDADE =SCHEMA_AND_DATA
Tabela não persistente: DURABILIDADE =SCHEMA_ONLY

Os testes são inseridos separadamente na tabela de otimização de memória100.000 artigos(na verdade 100002 itens) dados, o comando é o seguinte:





A persistência leva 28 segundos para ser ativada e 1 segundo sem persistência

Referência:

O login do hiperlink está visível.
O login do hiperlink está visível.
O login do hiperlink está visível.
O login do hiperlink está visível.
O login do hiperlink está visível.




Anterior:Adoro reciclar softwares de inspeção de qualidade de laptop
Próximo:A sintaxe de C# 8.0 usa índice e faixa
 Senhorio| Publicado em 10/05/2025 21:36:40 |
Uma tabela normal insere 100.000 dados e leva 18 segundos para ser executada. Como mostrado abaixo:



Roteiro:
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com