【问题标题】:Postgresql locks and copy_expertPostgresql 锁和 copy_expert
【发布时间】:2020-05-19 23:18:07
【问题描述】:

我正在使用 cursor.copy_expert 命令将数据复制到几个 postgresql 表中。加载数据后,当我运行以下查询时,我看到这些表的模式设置为“AccessShareLock”、“RowExclusiveLock”、“ShareUpdateExclusiveLock” -

select t.relname,l.locktype,page,virtualtransaction,pid,mode,granted from pg_locks l, pg_stat_all_tables t where l.relation=t.relid order by relation asc;

这些表是否被 copy_expert 命令锁定,不同的表如何与不同的锁关联?

【问题讨论】:

    标签: python postgresql postgresql-9.2


    【解决方案1】:

    在出现此问题的情况下,提交所有在关系级别调整 autovacuum 和 auto-analyze 的参数都已更新为使用 SHARE UPDATE EXCLUSIVE LOCK。简而言之,这允许读取和写入操作与 ALTER TABLE 并行发生,这肯定有助于利用此类关系上的活动膨胀。

    ALTER TABLE mytable
       SET (vacuum_truncate = on,
            toast.vacuum_truncate = on);
    
    ALTER TABLE SET autovacuum storage options
    

    还请注意,当使用多个子命令时,在 ALTER TABLE 命令的持续时间内会采用整个集合的更强锁定。因此,例如,如果参数 fillfactor 的更新与 autovacuum_enabled 的修改混合在一起,则将在关系上采用 ACCESS EXCLUSIVE 锁而不是 SHARE UPDATE EXCLUSIVE 锁。 ALTER TABLE 使用以下一组锁,那些具有单调关系的锁可以建立它们的层次结构,最强的是这里列出的第一个:

    访问独占锁

    共享行独占锁

    共享更新独占锁

    sql vacuum

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-22
      • 1970-01-01
      相关资源
      最近更新 更多