SELECT 查询的 PostgreSQL 自动提交效率

标签 postgresql performance autocommit

我正在使用 Psycopg2 向我的 Postgres 数据库发出许多 SELECT 查询。这些查询的结果很小,而且发送频率很高。

为了避免自己管理事务(因为我很懒),我在 session 设置中设置了autocommit = True

编辑:查询之间没有长时间停顿,没有数据操作,并且在我停止查询后游标立即关闭。

我想知道:当以高频率发出 SELECT 查询时,使用自动提交是否会降低性能?

使用 Postgres 9.6 和 Psycopg 2.7.7。 是的,我正在使用准备好的语句。

最佳答案

自动提交是正确的,因为:

  • 没有性能损失,因为只读事务不必写入事务日志 (WAL)。

  • 没有锁,就像 a_horse_with_no_name 评论的那样。即使是 SELECT 也会在表上持有 n 个 ACCESS SHARE 锁,这将阻止 TRUNCATEDROP TABLE 和真空截断。

  • 驱动程序不必发送那些额外的 BEGINCOMMIT 语句,这将导致不必要的客户端-服务器往返。

关于SELECT 查询的 PostgreSQL 自动提交效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55004656/

相关文章:

postgresql - Sequelize + Postgres 间歇性错误

python - Django + Heroku 数据库

html - 使用大型 CSS 文件的优点和缺点是什么?

angular - 是否建议订阅管道内的商店(ngRx)?

vimrc 自动提交带消息提示

Python 单元测试(使用 SQLAlchemy)不写入/更新数据库?

postgresql - Pgcrypto 命令产生非标准输出

c - 为什么 _mm512_store_pd 在这个矩阵乘法代码中 super 慢?

java - 如何使用提交来保存所有查询,如果任何一个查询失败,则不应保存数据

java - 从 Java 应用程序到 Oracle 的 jdbc 连接的自动提交模式