注意:我正在使用 Postgres 9.x 和 Django ORM
我的应用程序中有一些功能可以打开事务,运行一些查询,然后执行整整几秒钟的其他事情(第 3 方 API 访问等),然后再运行一些查询。查询不是很昂贵,但是我一直担心,由于有许多事务打开了这么长时间,我最终会以某种方式使我的数据库陷入困境或用完连接或其他东西。在性能方面,这有多大意义?
注意:我正在使用 Postgres 9.x 和 Django ORM
我的应用程序中有一些功能可以打开事务,运行一些查询,然后执行整整几秒钟的其他事情(第 3 方 API 访问等),然后再运行一些查询。查询不是很昂贵,但是我一直担心,由于有许多事务打开了这么长时间,我最终会以某种方式使我的数据库陷入困境或用完连接或其他东西。在性能方面,这有多大意义?
保持交易开放有利有弊。
从好的方面来说,每笔交易都有间接费用。如果你可以在一个事务中做几件相关的事情,你通常会赢得性能。
但是,您会在此过程中获取行或整个表的锁(尤其是使用任何类型的写操作)。这些在事务结束时自动释放。如果其他进程可能等待相同的资源,那么在事务保持打开状态时调用外部进程是一个非常糟糕的主意。
也许您可以在获取任何锁之前调用 3rd 方 API ,然后快速连续执行所有查询?
在 Postgres Wiki 中阅读有关检查锁的信息。
虽然不是确切的答案,但我不能高度推荐这个演示文稿。
美国 DjangoCon 上的“PostgreSQL当它不是你的工作”
它来自今年的 DjangoCon,所以也应该有一个视频,希望很快。
再加上查看作者博客,它是关于整个 Postgres 尤其是 django 的有用信息的金矿。您会在那里找到有关事务处理的有趣信息。