使用解譯的 Transact-SQL 存取經記憶體最佳化的資料表
適用於: SQL Server Azure SQL 資料庫 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)。 新增了 SNAPSHOT 來支援記憶體內部 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。
對於在自動認可模式下執行的查詢存取的經記憶體最佳化的資料表,不需要隔離等級資料表提示。