选择查询的PostgreSQL自动提交效率

选择查询的PostgreSQL自动提交效率,postgresql,performance,autocommit,Postgresql,Performance,Autocommit,我正在使用Psycopg2向我的Postgres DB发出许多SELECT查询。这些查询的结果很小,并且发送频率很高 为了避免自己管理事务(因为我很懒),我在会话设置中设置了autocommit=True 编辑:查询之间没有长时间的停顿,没有数据操作,并且在我停止查询后光标立即关闭 我想知道:当以高频率发出SELECT查询时,使用autocommit是否会造成性能损失 使用Postgres 9.6和Psycopg 2.7.7。是的,我使用的是预先准备好的语句。自动提交是正确的,因为: 由于只读

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

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

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

我想知道:当以高频率发出
SELECT
查询时,使用autocommit是否会造成性能损失


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

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

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

  • 没有锁,就像一匹没有名字的马。即使是
    SELECT
    也会在表上保留一个n
    ACCESS SHARE
    锁,这将阻止
    TRUNCATE
    DROP table
    和vacuum truncation等命令

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


事实上,这样做是好的,因为你不会让“空闲”的事务到处都是。@a_horse_没有名字,这就是最初启用自动提交的基本原理,正如PsycoPG文档中所建议的那样。但是,我的事务只执行选择查询,查询之间没有长时间的停顿。类似地,该交易将在变得无用后立即关闭。因此我认为这可能是一个特例。