鲲鹏社区首页
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

原理介绍

当MySQL中发生undo tablespace truncation,且目标undo tablespace已较大时,undo_spaces_lock这个读写锁会出现显著的竞争,如下所示。

undo_spaces_lock保护以下数据的并发访问。

  • undo::spaces::m_spaces
  • undo::space_id_bank
  • undo truncation log

purge coordinator线程持undo_spaces_lock写锁期间,DML前台线程阻塞,体现为这段时间的系统吞吐量下降。

分析临界区代码发现,purge coordinator线程池持锁是为了保护undo:: space_id_bank和undo truncation log,并不会修改undo:: spaces::m_spaces;DML前台线程持锁是为了保证查询undo:: spaces::m_spaces时其不被修改,两类线程逻辑本身并无冲突。

本特性的优化思路是,在purge coordinator获得undo_spaces_lock写锁后,undo tablespaces生成快照;后续DML前台线程无需持有undo_spaces_lock读锁,直接查询undo tablespaces快照。purge coordinator线程和DML前台线程之间,通过粒度更小的原子操作进行同步。

图1 undo_spaces_lock优化前
图2 undo_spaces_lock优化后