Acessando tabelas com otimização de memória usando Transact-SQL interpretado

Aplica-se a: SQL Server Banco de Dados SQL do Azure Not supported. Azure Synapse Analytics Not supported. PDW (Analytics Platform System)

Com poucas exceções, você pode acessar tabelas com otimização de memória usando qualquer consulta do Transact-SQL ou operação DML (seleção, inserção, atualização ou exclusão), lotes ad hoc e os módulos SQL, como procedimentos armazenados, funções com valor de tabela, gatilhos e exibições.

O Transact-SQL interpretado se refere a lotes ou a procedimentos armazenados do Transact-SQL que não sejam procedimentos armazenados compilados nativamente. O acesso do Transact-SQL interpretado às tabelas com otimização de memória é conhecido como acesso de interop.

Desde o SQL Server 2016 (13.x), as consultas no Transact-SQL interpretado podem examinar tabelas com otimização de memória em paralelo, em vez de apenas em modo serial.

As tabelas com otimização de memória também podem ser acessadas usando um procedimento armazenado compilado nativamente. Os procedimentos armazenados nativamente compilados são recomendados para operações OLTP de desempenho crítico.

O acesso do Transact-SQL interpretado é recomendado para estes cenários:

  • Consultas ad hoc e tarefas administrativas.

  • As consultas de relatórios, que tipicamente usam construções não disponíveis em procedimentos armazenados compilados de modo nativo (como funções window , às vezes chamadas de funções OVER ).

  • Para migrar partes críticas de desempenho do aplicativo para as tabelas com otimização de memória, com alterações mínimas (ou não) do código do aplicativo. Potencialmente, você pode ver aprimoramentos de desempenho de tabelas de migração. Se então você migrar procedimentos armazenados para procedimentos armazenados nativamente compilados, talvez veja mais aprimoramento de desempenho.

  • Quando uma instrução Transact-SQL não estiver disponível para procedimentos armazenados compilados nativamente.

Entretanto, os seguintes constructos do Transact-SQL não são compatíveis com procedimentos armazenados do Transact-SQL interpretado que acessam dados em uma tabela com otimização de memória.

Área Sem suporte
Acesso a tabelas TRUNCATE TABLE

MERGE (tabela com otimização de memória como destino).

Cursores de conjunto de chaves e dinâmicos (degradados automaticamente para estáticos).

Acesso dos módulos CLR, usando a conexão de contexto.

Referenciando uma tabela com otimização de memória de uma exibição indexada.
Entre bancos de dados Consultas entre bancos de dados

Transações entre bancos de dados

Servidores vinculados

Dicas de tabela

Para obter mais informações sobre dicas de tabela, consulte. Dicas de tabela (Transact-SQL). O SNAPSHOT foi adicionado para oferecer suporte ao OLTP in-memory.

As dicas de tabela a seguir não são compatíveis para acessar uma tabela com otimização de memória usando o Transact-SQL interpretado.

HOLDLOCK

PAGLOCK

READUNCOMMITTED

TABLOCKXX

IGNORE_CONSTRAINTS

READCOMMITTED

ROWLOCK

UPDLOCK

IGNORE_TRIGGERS

READCOMMITTEDLOCK

SPATIAL_WINDOW_MAX_CELLS = integer

XLOCK

NOWAIT

READPAST

TABLOCK

Ao acessar uma tabela com otimização de memória de uma transação explícita ou implícita usando o Transact-SQL interpretado, é necessário seguir, pelo menos, uma das seguintes opções:

Uma dica de tabela de nível de isolamento não é necessária para tabelas com otimização de memória acessadas por consultas executadas no modo de confirmação automática.

Confira também

Suporte ao Transact-SQL para OLTP na memória

Migrando para OLTP na memória