标签: in-memory-oltp

SQL Server 内存中 oltp 事务快照隔离

试图了解事务隔离级别如何在 SQL Server 内存优化表(内存中 oltp)上工作。

如果我执行以下查询:

SET TRANSACTION ISOLATION LEVEL READ COMMITTED

BEGIN TRANSACTION

SELECT *
FROM tm.Tasks
Run Code Online (Sandbox Code Playgroud)

显示错误消息:

只有自动提交事务才支持使用 READ COMMITTED 隔离级别访问内存优化表。它不支持显式或隐式事务。使用表提示为内存优化表提供受支持的隔离级别,例如 WITH (SNAPSHOT)。

现在,如果我通过添加表提示来修改查询,它会起作用:

SET TRANSACTION ISOLATION LEVEL READ COMMITTED
GO

BEGIN TRANSACTION

SELECT *
FROM tm.Tasks WITH(SNAPSHOT)
Run Code Online (Sandbox Code Playgroud)

但是,如果我通过更改事务隔离级别SET TRANSACTION ISOLATION LEVEL SNAPSHOT并删除表提示:

SET TRANSACTION ISOLATION LEVEL SNAPSHOT

BEGIN TRANSACTION

SELECT *
FROM tm.Tasks
Run Code Online (Sandbox Code Playgroud)

它不再工作,显示错误消息:

当会话 TRANSACTION ISOLATION LEVEL 设置为 SNAPSHOT 时,无法访问或创建内存优化表和本机编译模块。

为什么它与表提示一起工作,并通过设置事务隔离级别

SET TRANSACTION ISOLATION LEVEL SNAPSHOT
Run Code Online (Sandbox Code Playgroud)

才不是?

更新:尝试设置MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOTON,仍然从上次查询中得到相同的错误:

当会话 …

sql-server snapshot-isolation memory-optimized-tables sql-server-2016 in-memory-oltp

5
推荐指数
2
解决办法
3875
查看次数