Доступ к таблицам, оптимизированным для памяти, с помощью интерпретируемых инструкций Transact-SQL
Применимо: SQL Server База данных SQL Azure Azure Synapse Analytics 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, необходимо выполнить по крайней мере одно из следующих действий:
указать табличное указание уровня изоляции , например SNAPSHOT, REPEATABLEREAD или SERIALIZABLE;
задать для параметра базы данных MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT значение ON (включено).
Табличное указание уровня изоляции не требуется при обращении к оптимизированным для памяти таблицам с помощью запросов с автоматической фиксацией.