SELECT 查询的 PostgreSQL 自动提交效率
PostgreSQL Autocommit efficiency on SELECT queries
我正在使用 Psycopg2 向我的 Postgres 数据库发出许多 SELECT
查询。这些查询的结果很小,而且发送频率很高。
为了避免自己管理事务(因为我比较懒),我在session设置里设置了autocommit = True
编辑:查询之间没有长时间停顿,没有数据操作,并且在我停止查询后游标立即关闭。
我想知道:在高频发出SELECT
查询时,使用自动提交是否会降低性能?
使用 Postgres 9.6 和 Psycopg 2.7.7。 是的,我正在使用准备好的语句。
自动提交是正确的,因为:
没有性能损失,因为只读事务不必写入事务日志 (WAL)。
没有锁定,就像 a_horse_with_no_name 评论的那样。即使 SELECT
在 table 上持有 n ACCESS SHARE
锁,这将阻止像 TRUNCATE
、DROP TABLE
和真空截断这样的命令。
驱动程序不必发送那些额外的 BEGIN
和 COMMIT
语句,这将导致不必要的客户端-服务器往返。
我正在使用 Psycopg2 向我的 Postgres 数据库发出许多 SELECT
查询。这些查询的结果很小,而且发送频率很高。
为了避免自己管理事务(因为我比较懒),我在session设置里设置了autocommit = True
编辑:查询之间没有长时间停顿,没有数据操作,并且在我停止查询后游标立即关闭。
我想知道:在高频发出SELECT
查询时,使用自动提交是否会降低性能?
使用 Postgres 9.6 和 Psycopg 2.7.7。 是的,我正在使用准备好的语句。
自动提交是正确的,因为:
没有性能损失,因为只读事务不必写入事务日志 (WAL)。
没有锁定,就像 a_horse_with_no_name 评论的那样。即使
SELECT
在 table 上持有 nACCESS SHARE
锁,这将阻止像TRUNCATE
、DROP TABLE
和真空截断这样的命令。驱动程序不必发送那些额外的
BEGIN
和COMMIT
语句,这将导致不必要的客户端-服务器往返。