以下是表格(简化):
Table "public.link" Column | Type | Modifiers ---------------+-----------------------------+--------------------------------------------------- id | integer | not null default nextval('link_id_seq'::regclass) page_id | integer | placed_at | timestamp without time zone | default now() Indexes: "link_pkey" PRIMARY KEY, btree (id) "link_page_id_index" btree (page_id) Foreign-key constraints: "link_page_id_foreign_key" FOREIGN KEY (page_id) REFERENCES page(id) ON UPDATE RESTRICT ON DELETE RESTRICT
以下是查询(简化):
UPDATE link SET page_id = ?, placed_at = now()
WHERE id IN ( SELECT id FROM link ... ) AND page_id IS NOT NULL
死锁消息:
ERROR: deadlock detected Detail: Process 5822 waits for ShareLock on transaction 19705; blocked by process 5821. Process 5821 waits for ShareLock on transaction 19706; blocked by process 5822. Hint: See server log for query details.
由多个进程并行执行的查询如何导致死锁
谢谢!
在大多数情况下,死锁的出现是因为行之间的循环等待将被更新,所以如果你想解决死锁,你可以简单地对你想更新的行进行排序
UPDATE link SET page_id = ?, placed_at = now()
WHERE id IN ( SELECT id FROM link ... order by page_id ) AND page_id IS NOT NULL
会话A尝试更新id10, 2, 30, 4会话B尝试40, 30, 20, 10
他们都试图锁定各自的行以备更新,A得到10并等待30,而B得到30并等待10。僵局
您的基本问题是,您试图在并发事务中更新(某些)相同的ID。
如果不知道你的数据库结构和你想做什么,很难提出最好的解决方案。通常,你要么确保不同的后端不会更新相同的行,要么减少超时,在随机暂停后重试。
主要内容:死锁的必要条件每个进程都需要一些资源来完成它的执行。 但是,该资源是按顺序授予的。 该进程请求一些资源。 如果可用,操作系统会授予资源,否则请等待进程。 该过程使用它并在完成时释放。 死锁是每个计算机进程等待分配给另一个进程的资源的情况。在这种情况下,由于它所需的资源不被执行,因此其他进程也在等待其他资源被释放。 假设有三个进程P1,P2和P3。有三种不同的资源R1,R2和R3。 R1分配给P1,R2分配给P2
死锁的Magento1.8比1.7少,但仍然不时出现.. 关于如何通过这个问题,任何人都有一些好主意。 130930 12:03:35*(1)事务:事务918EEC3B,活动37秒开始索引读取使用中的mysql表1,锁定1锁等待41锁结构,堆大小6960,50个行锁,撤消日志条目6 MySQL线程id 51899,操作系统线程句柄0x7F9774169700,查询id 2583719 xxx.xx
问题内容: 与多个用户一起测试我的应用程序时,我遇到了ORA-00060死锁错误。我不确定如何确定此错误的原因,因此,如果有人可以帮助我,将不胜感激。 我查看了为此事件生成的跟踪文件,它显示了导致此问题的查询: 它也产生了这个: 我如何使用以上信息来找出导致问题的原因?TABLE_A或TABLE_B上都没有任何未索引的外键(我相信这通常是导致这种类型错误的原因)。 当我运行此查询时: 我在完全不同
我在使用PostgreSQL 9.3。我是唯一一个处理数据库的人,我的代码按顺序运行单元测试的查询。 大多数情况下,以下更新查询运行正常,但有时会锁定PostgreSQL server。然后,查询似乎永远不会结束,而通常只需要3秒钟。我必须确定查询在单元测试上下文中运行,即数据完全相同,而锁是否发生。代码是唯一更新数据的进程。 我知道在对自更新表使用更新查询时,PostgreSQL可能存在锁问题。
我有一个已经运行了几周的Kubernetes1.11集群。今天我注意到: null
Maven告诉我:您的过滤器与任何原型都不匹配。我的系统: null 我已采取的步骤是: Create my project Navigate to my project in command prompt and run the command: cd返回到“我的项目”文件夹并运行命令 运行该命令后,我会看到: