首页 > 解决方案 > AWS:Redshift 与传统 dbms

问题描述

在传统的 DBMS 中,当我们尝试执行插入表并从同一个表中删除(只删除数据而不是表)时,我记得它会导致死锁。

使用 Redshift 当我删除数据和同时插入数据时,我可以做到这一点。

当涉及到这种类型的死锁情况时,Redshift 架构与传统的 RDBMS 有何不同,这怎么可能呢?

标签: sqlcloudamazon-redshiftteradatardbms

解决方案


如果您尝试对表执行插入并从同一个表中删除,没有真正的理由会出现死锁。

数据库什么时候会发生死锁?

当有两个会话时会发生死锁 - 让我们称之为 A 和 B。如果 A 在行 x 上持有锁并等待锁行 y(在提交之前),同时会话 B 在行 y 上持有锁并等待获取锁定第 x 行,就会出现死锁。

为什么有人会持有锁?它需要更新行 x 和行 y(或以相反的顺序)。有各种记录在案的编码实践方式,应用程序可以通过这些方式确保不会导致死锁。

如果有简单的插入和删除,就不会有死锁。即使他们在数据库中插入和删除相同的记录(如果这只是这些线程正在执行的任务)。插入将完成它的工作,然后删除将完成它的工作。

此外,请记住,如果没有事务(如果查询是自动提交的),则永远不会出现死锁。


推荐阅读