当前位置: 首页 > 面试题库 >

选择查询的事务死锁

屠振濂
2023-03-14
问题内容

有时,对于仅作为Select查询的存储过程,会出现以下错误: Transaction (Process ID 91) was deadlocked on lock

我最初的理解是,选择查询不会锁定表,也不会导致死锁,即使它试图查询的表正在被另一个进程更新/锁定,但似乎选择查询会导致死锁,因为出色地。

如果我将隔离级别设置为查询未提交,那可以解决问题吗?


问题答案:

我的初步理解是,Select查询不会锁定表,也不会导致死锁

这种理解是错误的。SELECT查询在其分析的行上使用共享锁。共享锁可能与更新/删除/插入语句中的排他锁冲突。两个SELECT语句不会死锁,但是SELECT可以通过UPDATE死锁。当发生这种死锁时,SELECT通常是牺牲品,因为它没有执行任何更新,因此总是会丢失抽签。

与任何死锁一样,您需要发布所涉及表的确切架构,确切的T-SQL语句和死锁图。请参阅如何:保存死锁图(SQL Server
Profiler)
。通过此信息,您可以获取有关如何修复死锁的指导。



 类似资料:
  • 问题内容: 是否可以使用MySQL客户端编写跨服务器选择查询。基本上,设置如下。 服务器IP数据库 --------- -------- 1.2.3.4测试 abcd测试 我想编写一个查询,该查询将从1.2.3.4的“测试数据库”中的表中选择行,并将结果插入表中的abcd的“测试数据库”中。 我的服务器相距千里,所以我将打开SSH隧道进行连接他们俩。 有指针吗? 问题答案: 可能是已经提到的解决方

  • 问题内容: 我想使用选择器使用cloudant db进行查询,例如下面所示:用户希望借入的借贷金额超过数字,如何在cloudant选择器中访问数组以查找特定记录 问题答案: 如果您使用默认的Cloudant Query索引(键入文本,对所有内容建立索引): 然后,以下查询选择器应可以查找例如所有借贷金额> 1000的文档: 我不确定您是否可以哄骗Cloudant查询仅索引数组中的嵌套字段,因此,如

  • 本文向大家介绍Oracle中死事务的检查语句,包括了Oracle中死事务的检查语句的使用技巧和注意事项,需要的朋友参考一下 查询v$px_session和v$fast_start_servers,显示很多并行进程在rollback,根据以往的工程经验: 于是改为 之后,再次运行 使用如下脚本查看回滚完毕的预计时间(以天为单位): 24*0.21=5.04小时。即:预计5.04小时后回滚完毕。 另外

  • 问题内容: 我有一个名为faq_questions的表,其结构如下: 我试图建立一个给定排序顺序的查询,选择具有最高排序顺序的行。 例子: 好的,假设我为已知的排序顺序(id 4)输入了5,我需要它返回ID为3的行。由于不能保证sort_order是连续的,所以我不能只选择known_sort_order + 1。 谢谢! 问题答案: 似乎太简单了,但是看起来像您所需要的:

  • 我有一个名为TEST的表,列名为col1、col2、col3、col4。。。。。。。。。。所以,从信息模式来看。列我将获得有关此表对象的详细信息。 现在,我想通过从信息_模式中提供列名称,从测试表中构建一个select查询。柱。像这样,从information_schema中选择column_name。表_name='TEST'中的列。这会回来的 col1 col2 col3 我想在selectq

  • 问题内容: 我的SQL代码如下: 等效的linq表达式是什么? 问题答案: 我第一次尝试在 来源 LINQ to SQL中的NOT IN子句