PostgreSQL AB表切换最佳实践 - 提高切换成功率,杜绝雪崩

  1. 云栖社区>
  2. 阿里云数据库ApsaraDB>
  3. 博客>
  4. 正文

PostgreSQL AB表切换最佳实践 - 提高切换成功率,杜绝雪崩

德哥 2018-10-05 17:43:17 浏览2417
展开阅读全文

标签

PostgreSQL , 雪崩 , 锁等待 , 切换表名 , DDL


背景

AB表切换经常出现在数据导入的场景中,例如每天或者每个固定周期,需要全量导入一批数据到数据库,同时被导入的数据要持续的被查询。

为了尽量避免导入影响查询,通常会使用AB表切换的方法。使用如下步骤:

1、建新表

2、全量数据导入到新表

3、在新表上面建必要的索引

4、切换新、老表名

但是,注意,由于切换表名是DDL操作,会加排它锁,与所有其他所会发送冲突。如果数据库中有长事务持有了老的表的任何锁,那么DDL会被堵塞,等待,同时会堵塞后来的任何需要持有老表锁的请求。

1、长事务,持有老表锁(共享锁)

2、切换表名,DDL,请求排他锁,等待,排它锁加入锁等待队列

3、其他会话,查询老表(请求共享锁),与锁等待队列中的DDL排他锁冲突,等待,共享锁加入锁等待队列。

以上情况,很容易造

网友评论

登录后评论
0/500
评论
德哥
+ 关注
所属云栖号: 阿里云数据库ApsaraDB