記憶體內部 OLTP 不支援的 SQL Server 功能
適用於:SQL Server、Azure SQL 資料庫 和 Azure SQL 受控執行個體。
本主題探討在使用記憶體最佳化的物件時不受支援的 SQL Server 功能。 此外,最後段會列出記憶體內部 OLTP 原先不支援,但未來會支援的功能。
SQL Server 記憶體內部 OLTP 不支援的功能
擁有記憶體最佳化之物件的資料庫不支援下列 SQL Server 功能,包括記憶體最佳化的資料檔案群組在內。
不支援的功能 | 功能描述 |
---|---|
記憶體最佳化之資料表的資料壓縮。 | 使用資料壓縮功能有助於將資料壓縮在資料庫內及縮小資料庫的大小。 如需詳細資訊,請參閱 Data Compression。 |
經記憶體最佳化的資料表和雜湊索引,以及非叢集索引的資料分割。 | 資料分割資料表和索引的資料,已分成可以在資料庫中的多個檔案群組之間分佈的單位。 如需詳細資訊,請參閱< Partitioned Tables and Indexes>。 |
複寫 | 複寫組態除了訂閱者端對經記憶體最佳化的資料表的異動複寫以外,與參考記憶體最佳化資料表的資料表或檢視表並不相容。 若有經記憶體最佳化的檔案群組,即不支援使用 sync_mode='database snapshot' 的複寫。 如需詳細資訊,請參閱複寫至記憶體最佳化資料表訂閱者。 |
鏡像 | 具有 MEMORY_OPTIMIZED_DATA 檔案群組的資料庫不支援資料庫鏡像。 如需鏡像的詳細資訊,請參閱資料庫鏡像 (SQL Server)。 |
重建記錄檔 | 具有 MEMORY_OPTIMIZED_DATA 檔案群組的資料庫不支援透過附加或 ALTER DATABASE 重建記錄檔。 |
連結的伺服器 | 在以記憶體最佳化資料表形式的相同查詢或交易中,您無法存取連結的伺服器。 如需詳細資訊,請參閱連結的伺服器 (資料庫引擎)。 |
大量記錄 | 無論資料庫使用何種復原模式,所有在持久性記憶體最佳化的資料表上的作業,一律會完整記錄。 |
最低限度記錄 | 記憶體最佳化資料表不支援最低限度記錄。 如需最低限度記錄的詳細資訊,請參閱交易記錄 SQL Server 和大量匯入採用最低限度記錄的必要條件。 |
變更追蹤 | 記憶體最佳化的資料表不支援變更追蹤。 |
DDL 觸發程序 | 資料庫層級觸發程序和伺服器層級的 DDL 觸發程序均不受記憶體內部 OLTP 資料表或原生編譯模組支援。 |
異動資料擷取 (CDC) | SQL Server 2017 CU15 和更新版本支援在具有經記憶體最佳化之資料表的資料庫上啟用 CDC。 這僅適用於資料庫和資料庫中的任何磁碟資料表。 在舊版 SQL Server 中,因為內部 CDC 會針對 DROP TABLE 使用 DDL 觸發程序,所以 CDC 無法搭配具有經記憶體最佳化之資料表的資料庫使用。 |
Fiber 模式 | 記憶體最佳化資料表不支援 Fiber 模式: 若 Fiber 模式處於使用中的狀態,您就無法建立具有記憶體最佳化檔案群組的資料庫,也無法將記憶體最佳化檔案群組新增至現有的資料庫。 如果具有記憶體最佳化檔案群組的資料庫已存在,您可以啟用 Fiber 模式。 不過,啟動 Fiber 模式需要重新啟動伺服器。 在此情況下,無法復原具有記憶體最佳化檔案群組的資料庫。 然後您會看到錯誤訊息,建議您停用 Fiber 模式以使用具有記憶體最佳化檔案群組的資料庫。 若 Fiber 模式處於使用中的狀態,將無法附加及還原具有記憶體最佳化檔案群組的資料庫。 資料庫會標記為「可疑」。 如需詳細資訊,請參閱 輕量型共用伺服器組態選項。 |
Service Broker 的限制 | 無法從原生編譯的預存程序存取佇列。 也無法在存取記憶體最佳化的資料表的交易中存取遠端資料庫內的佇列。 |
訂閱者的複寫 | 支援在訂閱者端對經記憶體最佳化的資料表進行異動複寫,但是有部分限制。 如需詳細資訊,請參閱 複寫至記憶體最佳化資料表訂閱者 |
跨資料庫查詢及交易
有一些例外狀況,不支援跨資料庫的交易。 下表描述支援的案例和對應的限制。 (另請參閱 跨資料庫查詢)。
資料庫 | 允許 | 描述 |
---|---|---|
使用者資料庫、model 及 msdb。 | 否 | 在大部分情況下,「不」支援跨資料庫的查詢及交易。 任一查詢如使用了經記憶體最佳化的資料表或者原生編譯的預存程序,該查詢即無法存取其他資料庫。 這項限制適用於交易及查詢。 系統資料庫 tempdb 及 master 則是例外。 在這裡,master 資料庫可供唯讀存取。 |
Resource 資料庫、tempdb | 是 | 在接觸記憶體內部 OLTP 物件的交易中,可以無限制地使用 Resource 及 tempdb 系統資料庫。 |
不支援的案例
使用來自 CLR 預存程序內的內容連線,存取經記憶體最佳化的資料表。
存取記憶體最佳化資料表之查詢上的索引鍵集與動態資料指標。 這些資料指標會降級為靜態,且為唯讀。
不支援使用 MERGE INTOtarget (其中 target 是經記憶體最佳化的資料表)。
- 經記憶體最佳化的資料表支援 MERGE USINGsource。
不支援 ROWVERSION (TIMESTAMP) 資料類型。 如如需詳細資訊,請參閱 FROM (Transact-SQL)。
具有 MEMORY_OPTIMIZED_DATA 檔案群組的資料庫不支援自動關閉。
使用者交易內不支援交易式 DLL,例如內部記憶體 OLTP 物件的 CREATE/ALTER/DROP。
事件通知。
原則式管理 (PBM)。
- 不支援 PBM 阻止並只記錄模式。 伺服器上存在這類原則時,可能會使記憶體中 OLTP DDL 無法成功執行。 支援視需要和依排程模式。
記憶體內部 OLTP 不支援資料庫的內含項目 (自主資料庫)。
- 支援自主資料庫驗證。 不過,在動態管理檢視 (DMV) 的 dm_db_uncontained_entities 中,會將所有內部記憶體 OLTP 物件標記為「中斷內含項目」。
最近新增的支援
有時 SQL Server 較新版本會新增支援先前不支援的功能。 此區段列出記憶體內部 OLTP 原先不支援,但會在未來支援記憶體內部 OLTP 的功能。
在下表中,「版本」值 (例如 (15.x)
) 代表 Transact-SQL 陳述式 SELECT @@Version;
所傳回的值。
功能名稱 | SQL Server 的版本 | 註解 |
---|---|---|
資料庫快照集 | 2019 (15.x) | 具有 MEMORY_OPTIMIZED_DATA 檔案群組的資料庫現在支援資料庫快照集。 |