pg_partman创建分区是否锁表?现状及锁表时长咨询
pg_partman分区创建时的锁表问题及时长说明
锁表情况是否仍属实?
是的,pg_partman在创建新分区时仍会对父表加锁,但影响程度已随PostgreSQL版本和pg_partman的更新有所优化:
- 在PostgreSQL 11及以上版本中,pg_partman仅在挂载新分区的瞬间持有
ACCESS EXCLUSIVE锁,而非整个分区创建过程都持有该锁,阻塞窗口已大幅缩小。 - 尽管锁的持有时间很短,但在此期间仍会阻塞父表的写入操作(INSERT/UPDATE/DELETE)。
pg_partman创建新分区时的锁表时长?
锁表时长通常处于毫秒级别,具体受以下因素影响:
- 父表复杂度:若父表包含大量索引、约束或触发器,锁持有时间可能略有增加,但一般不会超过1秒。
- PostgreSQL版本:新版本PostgreSQL对分区管理的锁机制做了优化,能进一步缩短锁的持有时间。
- 系统负载:当数据库处于高CPU或高I/O负载时,锁的持有时间可能会有轻微延长。
需要注意的是,在高并发写入场景下,即使毫秒级的锁也可能导致少量短暂的写入阻塞;而Timescale的Hypertable在分区创建时采用更轻量化的锁机制,基本不会阻塞写入操作。
内容的提问来源于stack exchange,提问作者dev Joshi
相关产品推荐
相关产品推荐

