首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么SQL语句不能工作?交易是如何运作的?

为什么SQL语句不能工作?交易是如何运作的?
EN

Stack Overflow用户
提问于 2019-10-05 17:23:59
回答 1查看 349关注 0票数 0

问题表达式:

我正在尝试一些关于交易的东西。考虑以下行动:

  1. 在中打开连接窗口1
  2. BEGIN事务,然后从表A中删除大约2000行数据
  3. 在中打开另一个连接窗口2
  4. 将新的一行数据插入到窗口2(没有事务)的表A中,它现在成功运行

然后,重复相同的操作,但在步骤2中,我删除10k行数据,在这种情况下,步骤4无法成功运行。我已经等了半个小时了。

它显示它正在执行SQL.无法完成。最后,我使用连接窗口1插入数据,它现在正在工作。

为什么它适用于2k行,而不是10k行?

我执行的Sql语句:

在连接窗口A中,我从tableA执行(10K行)

在连接窗口B中,我执行插入到tableA(..)价值(.)

windows B无法成功执行。

非常感谢@Gordon

的事业

我搜索关于锁升级的关键字。我尝试使用跟踪锁升级,当我删除事务中的许多数据(我不提交或回滚)时,我得到一个锁:升级。

所以,我知道锁升级的概念。我删除表中的数据太多,那么行锁升级到表升级,我没有提交或回滚它们,其他连接(或应用程序)无法使用表锁访问表。sql探查器中的跟踪锁升级

当锁升级发生在MSSQL 中时,

“锁选项还会影响锁升级发生的时间。当锁设置为0时,当当前锁结构使用的内存达到数据库引擎内存池的40 %时,锁升级就会发生。当锁没有设置为0时,当锁的数量达到为锁指定的值的40 %时,锁升级就会发生。”

如何使用设置将影响锁升级的

要在对象资源管理器中配置锁选项,请右击服务器并选择“属性”。

单击“高级”节点。

在并行性下,键入锁选项所需的值。

使用locks选项设置可用锁的最大数量,从而限制Server对其使用的内存数量。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-05 17:28:43

你正在经历的是“锁定升级”。默认情况下,Server为delete使用(我认为)行级锁。但是,如果表达式的阈值超过5,000个锁,则Server将锁定升级到整个表。

这是一个自动机制,你可以关掉它,如果你需要的话。

在SQL Server文档和相关文档中都有关于这方面的许多信息。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58250674

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档