相关疑难解决方法(0)

SQL Server (2012) 非阻塞 DDL?

我对 SQL Server 不是很有经验,所以也许我遗漏了一些东西

我的情况如下:

  • 会话 1 在关闭自动提交的情况下运行 CREATE TABLE(或其他 CREATE 语句)并且未提交 CREATE。
  • 会话 2 运行一条sp_table语句,但只要会话 1 没有提交 DDL 就会挂起

发生这种情况的场景是开发人员在数据库上工作。他们中的一些人浏览表格,一些人做 DDL。如果一个用户忘记提交 DDL,所有其他想要列出表的会话都会被阻止。请注意,sp_tables例如由 SQL 客户端(通过 JDBC 驱动程序 API)发出,因此它不能更改。

我正在使用的数据库启用了 snapshot_isolation 并且隔离级别设置为已提交读(SET ALLOW_SNAPSHOT_ISOLATION ONSET READ_COMMITTED_SNAPSHOT ON

我的假设是这些设置应该使 SQL Server 在锁定并发会话方面表现得更好(例如 PostgreSQL 和 Oracle,其中 SELECT 永远不会被任何作者阻止) - 但显然情况并非如此。

那么,有没有什么方法可以使 SQL Server 对 DDL 的并发读/写情况更加友好?(除了仅在自动提交模式下提交 DDL)。

concurrency ddl sql-server-2012

5
推荐指数
1
解决办法
1524
查看次数

标签 统计

concurrency ×1

ddl ×1

sql-server-2012 ×1