Postgresql锁和复制专家

2024-09-27 00:20:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用cursor.copy\u 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命令锁定?不同的表如何与不同的锁关联


Tags: 数据命令postgresql模式selectcursorpgcopy
1条回答
网友
1楼 · 发布于 2024-09-27 00:20:11

在出现此问题的情况下,提交关系级别的所有参数tuning 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

还要注意的是,当使用多个子命令时,整个集合的强锁将在ALTERTABLE命令期间使用。因此,例如,如果参数fillfactor的更新与autovacuum_enabled的修改混合在一起,则将对关系使用访问独占锁,而不是共享更新独占锁。ALTER TABLE使用以下一组锁,以及那些具有单调关系的锁,可以建立它们的层次结构,最强的锁是此处列出的第一个锁:

访问独占锁

共享行独占锁

共享更新独占锁

sql vacuum

相关问题 更多 >

    热门问题