对于某些情况,我使用NiFi和PostgreSQL JDBC驱动程序,其中两个处理器使用不同的事务更新表中同一行的不同列。检测到死锁。详细信息:进程70725等待..."* 上的共享锁
一旦我为JDBC驱动程序会话启用了autocommit
选项,这些错误就消失了。但是,我不确定这是否是解决这个问题的正确方法。我在这里只是幸运还是只是让事情变得更糟?为什么我在使用autocommit
时没有得到任何错误?
对于某些情况,我使用NiFi和PostgreSQL JDBC驱动程序,其中两个处理器使用不同的事务更新表中同一行的不同列。检测到死锁。详细信息:进程70725等待..."* 上的共享锁
一旦我为JDBC驱动程序会话启用了autocommit
选项,这些错误就消失了。但是,我不确定这是否是解决这个问题的正确方法。我在这里只是幸运还是只是让事情变得更糟?为什么我在使用autocommit
时没有得到任何错误?
1条答案
按热度按时间krcsximq1#
您的问题表明您还没有深入考虑数据库事务。是的,如果您从来没有任何事务持续超过一个语句(自动提交),死锁会更少,尽管您也可以在自动提交模式下获得死锁。但您有事务是有目的的:
您应该识别哪些数据修改必须在一般交易中,以确保数据完整性,来设计交易。然后,使交易的时间不超过保证数据完整性所需的时间。当您有开启的数据库交易时,永远不要执行可能需要较长时间的活动。这些步骤将确保您不会有不必要的死锁。