设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 创业者 数据 手机
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MySQL 8.0 CATS调度算法的性能提高

发布时间:2022-03-25 11:23 所属栏目:115 来源:互联网
导读:目前大多数的数据库系统都是通过锁的方式来控制并发的情况。但是对于很多数据库厂商来说,都会有一个问题: 当有多个事务同时需要获取同一把锁,那么哪个事务应该最先获得这把锁? 包括之前版本的MySQL在内,几乎所有的数据库都是通过FIFO机制来解决这个问题
      目前大多数的数据库系统都是通过锁的方式来控制并发的情况。但是对于很多数据库厂商来说,都会有一个问题:
 
     当有多个事务同时需要获取同一把锁,那么哪个事务应该最先获得这把锁?
 
      包括之前版本的MySQL在内,几乎所有的数据库都是通过FIFO机制来解决这个问题。简单来说,FIFO机制就是将锁分配给最先请求该锁的事务(即该事务在等待队列的最前面,除非它们与当前锁赋予的锁不兼容)。因为这种机制实现起来比较简单,所以很多的数据库厂商都是通过FIFO的策略进行事务调度,没有考虑其他的调度策略。
 
     最近一个密歇根大学的研究组织提出,这个问题背后隐藏着巨大的性能提升空间。Mozafari教授和他的学生证明了不同的锁分配策略以及事务调度策略对于数据库性能有着很大的影响。他们提出了一种称之为Contention-Aware Transaction Scheduling(CATS)的算法,使用这种算法进行事务调度相较于之前的FIFO策略,显著地减少了数据库延迟,提高了吞吐量。
 
      Oracle MySQL官方团队和Mozafari教授以及他的学生们紧密合作,使得MySQL是第一个采用这种新技术的数据库。在MySQL 8.0.3版本之后,CATS策略作为InnoDB的默认调度算法,也就是说MySQL的使用者可以感觉到显著的性能提升,尤其是在持续高压力负载的情况下。
 
在这种场景下,FIFO策略很简单,只需要考虑那个事务先请求O1对象的锁。但是CATS算法会更加智能地处理这个情况:CATS算法会计算每个事务直接阻塞和间接阻塞的事务数量,然后将O1对象的锁分配给阻塞了更多事务的事务。在这个场景下,t1事务阻塞了4个事务,t2事务阻塞了3个事务。所以根据CATS算法会将O1对象的锁分配给t1事务。这样可以将更多的事务释放出来,这样有利于提高系统整体的性能。
 
对于共享锁(S锁),CATS算法会尽可能多的分配共享锁。在这方面FIFO和CATS算法有不同的地方。FIFO按照队列的先后顺序分配共享锁,当遇到分配的对象上已经有排他锁(X锁)了,则停止分配。而在CATS中,按照事务阻塞的事务数进行倒序排序,然后按照这个顺序进行锁分配。
  
|  结论
 
MySQL是全球第一个使用这种最先进的CATS事务调度算法的数据库。这个算法解决了数据库在遇到高压力情况下性能急剧下降的问题,这个也是MySQL 8.0主要想要达到的目标。
 
CATS算法是针对当事务并发超过32的情况,这个数值没有参数配置,是通过经验设置的。

(编辑:ASP站长网)

    网友评论
    推荐文章
      热点阅读