sql - AWS:Redshift 与传统 dbms
问题描述
在传统的 DBMS 中,当我们尝试执行插入表并从同一个表中删除(只删除数据而不是表)时,我记得它会导致死锁。
使用 Redshift 当我删除数据和同时插入数据时,我可以做到这一点。
当涉及到这种类型的死锁情况时,Redshift 架构与传统的 RDBMS 有何不同,这怎么可能呢?
解决方案
如果您尝试对表执行插入并从同一个表中删除,没有真正的理由会出现死锁。
数据库什么时候会发生死锁?
当有两个会话时会发生死锁 - 让我们称之为 A 和 B。如果 A 在行 x 上持有锁并等待锁行 y(在提交之前),同时会话 B 在行 y 上持有锁并等待获取锁定第 x 行,就会出现死锁。
为什么有人会持有锁?它需要更新行 x 和行 y(或以相反的顺序)。有各种记录在案的编码实践方式,应用程序可以通过这些方式确保不会导致死锁。
如果有简单的插入和删除,就不会有死锁。即使他们在数据库中插入和删除相同的记录(如果这只是这些线程正在执行的任务)。插入将完成它的工作,然后删除将完成它的工作。
此外,请记住,如果没有事务(如果查询是自动提交的),则永远不会出现死锁。
推荐阅读
- excel - 循环通过powerpoint幻灯片根据幻灯片写入数据
- javascript - ES6 继承强制基类只调用自己的成员
- ros - 如何在同一个 python3 脚本中导入 rospy 和 cv2?
- powershell - Powershell - 从文件夹中的多个 zip 文件中仅提取一个 zip 文件
- user-interface - 使用 Qt Designer 有没有办法将 QDockWidgets 设置为默认隐藏?
- networking - 在 Java 11 上设置应用程序网络连接超时
- azure-devops - Azure DevOps 存储库的备份
- java - 仅在服务器上使用 Spring Boot 2.3 + 安全性没有“Access-Control-Allow-Origin”
- c++ - std::cin 在 C++ 中的无限 while 循环中
- python - Gensim:为每个主题提取 100 个最具代表性的文档