Доступ к таблицам, оптимизированным для памяти, с помощью интерпретируемых инструкций Transact-SQL

Область применения: SQL Server База данных SQL Azure Not supported. Azure Synapse Analytics Not supported. Analytics Platform System (PDW)

С несколькими исключениями можно получить доступ к таблицам, оптимизированным для памяти, с помощью любой операции Transact-SQL или DML (выбор, вставка, обновление или удаление), нерегламентированных пакетов и модулей SQL, таких как хранимые процедуры, функции табличного значения, триггеры и представления.

Интерпретируемый Transact-SQL относится к пакетам Transact-SQL или хранимым процедурам, отличным от скомпилированной в собственном коде хранимой процедуры. Интерпретируемый доступ Transact-SQL к оптимизированным для памяти таблицам называется доступом взаимодействия.

Начиная с SQL Server 2016 (13.x), запросы в интерпретируемых transact-SQL могут параллельно сканировать оптимизированные для памяти таблицы, а не только в последовательном режиме.

Доступ к оптимизированным для памяти таблицам можно также осуществлять с помощью скомпилированной в собственном коде хранимой процедуры. Скомпилированные в собственном коде хранимые процедуры рекомендуется использовать для важных с точки зрения производительности операций OLTP.

Для следующих сценариев рекомендуется использовать интерпретируемый доступ Transact-SQL:

  • Нерегламентированные запросы и административные задачи.

  • Запросы для отчетов, в которых обычно используются конструкции, недоступные в скомпилированных в собственном коде хранимых процедурах (например, оконные функции, также известные как функции OVER ).

  • Для переноса критически важных для производительности частей приложения в оптимизированные для памяти таблицы с минимальными изменениями кода приложения или без изменений. Потенциально перенесенные таблицы могут обеспечить улучшение производительности. Дополнительного роста производительности можно добиться путем переноса хранимых процедур в скомпилированные в собственном коде хранимые процедуры.

  • Если инструкция Transact-SQL недоступна для скомпилированных в собственном коде хранимых процедур.

Однако следующие конструкции Transact-SQL не поддерживаются в интерпретированных хранимых процедурах Transact-SQL, обращаюющихся к данным в оптимизированной для памяти таблице.

Площадь Не поддерживается
Доступ к таблицам TRUNCATE TABLE

MERGE (оптимизированная для памяти таблица в качестве назначения)

Динамический курсор и курсор ключевого набора (они автоматически понижаются в статический).

Доступ из модулей CLR с использованием контекстного соединения.

Ссылка на оптимизированную для памяти таблицу из индексированного представления
Между базами данных Межбазовые запросы

Межбазовые транзакции

Связанные серверы

Табличные указания

Дополнительные сведения о табличных указаниях см. в разделе. Подсказки таблиц (Transact-SQL) Моментальный снимок добавлен для поддержки OLTP в памяти.

Приведенные ниже указания таблицы не поддерживаются при доступе к оптимизированной для памяти таблице с помощью интерпретированного Transact-SQL.

HOLDLOCK

PAGLOCK

READUNCOMMITTED

TABLOCKXX

IGNORE_CONSTRAINTS

READCOMMITTED

ROWLOCK

UPDLOCK

IGNORE_TRIGGERS

READCOMMITTEDLOCK

SPATIAL_WINDOW_MAX_CELLS = целое число

XLOCK

NOWAIT

READPAST

TABLOCK

При доступе к таблице, оптимизированной для памяти, из явной или неявной транзакции с помощью интерпретированного Transact-SQL, необходимо выполнить по крайней мере одно из следующих действий:

Табличное указание уровня изоляции не требуется при обращении к оптимизированным для памяти таблицам с помощью запросов с автоматической фиксацией.

См. также

Поддержка Transact-SQL для выполняющейся в памяти OLTP

Миграция в In-Memory OLTP