MySQL 8.0.3性能大杀器 —— CATS 事务调度新算发
转载自:https://www.sohu.com/a/203933205_487483?sec=wd&spm=smpc.author.fd-d.2.1557386676880JSjtJwV
好多同学后台留言说姜老师最近技术文章写得少,主要原因是换了新工作之后正在熟悉相关业务,调整数据库架构,MGR调研、测试与上线等。此外还有神秘的金融云项目,目前雏形已完成,感觉市面上所有云都要哭晕在厕所啦~~~
最近一直在跟进MySQL 8.0,周末发现InnoDB团队老大Sunny Bains发文的Contention-Aware Transaction Scheduling Arriving in InnoDB to Boost Performance[1],倏地感觉眼前一亮,并水藤摸瓜地继续看了几篇论文[2],[3],很是有收获。
CATS
————
Contention-Aware Transaction Scheduling,基于竞争感知的事务调度(下简称CATS),是MySQL 8.0.3版本默认的事务调度算法。之前事务的调度算法可视为FCFS(first come first serve)。简单来说,就是先到的事务先获得锁,如果发生等待则根据FIFO算法进行排队。这个算法看似非常公平,且沿用非常之久。
然而,FCFS并不能算是公平的算法。因为FCFS公平的前提是假设每个事务持有的锁数量是一样的,实际上这是不可能的。一个系统中总有不同的业务和事务处理。在金融支付这块,设计的原则之一就是快慢分离,即快事务不要被慢事务挡住。这通常需要业务进行控制,因为数据库层无法感知事务的优先级。
CATS是一种通过排序事务阻塞其他事务的数量来判断当前事务重要性的算法,重要性高的事务需要提前获得锁。从感觉上看,还是比较合理的。当然论文中会有相关推到和论证。
上图中,事务t2虽然依赖了5个对象的锁,但仅有3个事务在等待。而事务t2持有的锁少,但却有4个事务在等待t1。因此,在CATS算法下,锁将会授予事务t1。论文[3]中指出MySQL 8.0.3中使用的算法是LDSF(Largest-Dependency-Set-First),他们新提出的算法bLDSF(batched LargestDependency-Set-First)还能有进一步的性能提升。
同时论文[3]也指出CATS和原有的FCFS算法的时间复杂度都是为O(N*N),因此在调度上并不会有性能损失。
性能
————
大家最关心的还是性能问题。论文[3]中的测试场景最为丰富,下面仅罗列TPC-C场景的结果:
可以看到在TPC-C大并发量场景下,原来的FIFO性能退化非常严重,然而bLDSF算法却依然能保持较高的性能水准。MySQL官方也做了相关测试,采用了sysbench OLTP pareto分布,性能也能有较大的提升,在512线程下性能有5倍的差距:
TPC-C、Sysbench都是现成的工具,感兴趣的小伙伴可以测试下,复现测试结果应该并不难。不过到最后的测试结果,我的疑问却停留在了如果使用线程池,那么高并发不就不会有性能下降了嘛?那这时CATS的提升或者帮助还能有多少呢?
源码
————
[4]是原作者在MySQL 5.7版本中添加CATS的分支,patch代码没有超过1000行,感觉还是可以理解的,主要逻辑集中在函数vats_grant。[5]是官方建的工作日志,对具体实现感兴趣的同学可以继续研究。
最后,我感觉这篇论文给我打开了很多新的思考空间,数据库内核层可以做的事情除了Paxos,其实还可以有很多。
MySQL 8.0.3性能大杀器 —— CATS 事务调度新算发的更多相关文章
- 使用docker-compose 大杀器来部署服务 上
使用docker-compose 大杀器来部署服务 上 我们都听过或者用过 docker,然而使用方式却是仅仅用手动的方式,这样去操作 docker 还是很原始. 好吧,可能在小白的眼中噼里啪啦的对着 ...
- 使用docker-compose 大杀器来部署服务 上(转)
使用docker-compose 大杀器来部署服务 上 我们都听过或者用过 docker,然而使用方式却是仅仅用手动的方式,这样去操作 docker 还是很原始. 好吧,可能在小白的眼中噼里啪啦的对着 ...
- [转]使用docker-compose 大杀器来部署服务 上
本文转自:https://www.cnblogs.com/neptunemoon/p/6512121.html 使用docker-compose 大杀器来部署服务 上 我们都听过或者用过 docker ...
- 使用docker-compose 大杀器来部署服务
使用docker-compose 大杀器来部署服务 上 我们都听过或者用过 docker,然而使用方式却是仅仅用手动的方式,这样去操作 docker 还是很原始. 好吧,可能在小白的眼中噼里啪啦的对着 ...
- [NewLife.XCode]反向工程(自动建表建库大杀器)
NewLife.XCode是一个有10多年历史的开源数据中间件,支持nfx/netstandard,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode. 整个系列教程会大量结合示 ...
- Postgresql-模糊匹配大杀器
# Postgresql-模糊匹配大杀器 ## 问题背景 随着pg越来越强大,abase目前已经升级到5.0(postgresql10.4),目前abase5.0继承了全文检索插件(zhparser) ...
- 一文读懂机器学习大杀器XGBoost原理
http://blog.itpub.net/31542119/viewspace-2199549/ XGBoost是boosting算法的其中一种.Boosting算法的思想是将许多弱分类器集成在一起 ...
- DSP已经英雄迟暮了吗?FPGA才是未来的大杀器?
DSP技术,在某些人看来,或者已经面临着英雄迟暮的感觉,就我们当前所知道的.Freesacle.ADI.NXP早就停掉了新技术发展,而当前从大的方面说只剩下TI一家扛着Digital Si ...
- postgres模糊匹配大杀器
ArteryBase-模糊匹配大杀器 问题背景 随着pg越来越强大,abase目前已经升级到5.0(postgresql10.4),目前abase5.0继承了全文检索插件(zhparser),使用全文 ...
随机推荐
- Nginx关联php安装及启动
Nginx 1.10.2 php 5.6.30 [root@nginx local]# cat /etc/redhat-release CentOS Linux release 7.5.1804 (C ...
- 面试经典算法:马拉松算法,最长回文子串Golang实现
求一个字符串中最长的回文子串. package main import "fmt" /* 马拉松算法,求最长回文子串,时间复杂度:线性 */ func main() { // 回文 ...
- [yarn]yarn和npm的对比
一.简介 NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种: 允许用户从NPM服务器下载别人编写的第三方包到本地使用. 允许用户从NPM服 ...
- Intellij IDEA 快捷键大全【转】
IntelliJ Idea 常用快捷键列表 Ctrl+Shift + Enter,语句完成 “!”,否定完成,输入表达式时按 “!”键 Ctrl+E,最近的文件 Ctrl+Shift+E,最近更改的文 ...
- Vue2.0+elementUI使用echarts插件
1.npm安装echarts: $ npm install echarts -S 2.html代码: <template> <div id="chartColumn ...
- js移动端回退监听 popstate
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Struts2系列漏洞起始篇
前言 到目前位置struts2的漏洞编号已经到了S2-057,一直想系统的学习下Struts2的漏洞,但由于工作量较大,一直搁浅.最近由于工作需要,借此机会来填下坑.个人认为一个框架漏洞出来了仅仅看下 ...
- zabbix-设置邮箱预警
设置预警系统 机器是被监控上了,但是出了问题怎么通知呢?之前学过监控软件的都知道可以使用报警机制啊,如果监控平台zabbix server发现某个机器异常了,可以给运维管理员发邮件啊,通过邮件通知管理 ...
- man手册--iostat
iostat手册 IOSTAT(1) Linux User's Manual IOSTAT(1) NAME iostat - Report Central Processing Unit (CPU) ...
- Image Processing and Analysis_21_Scale Space:Scale-space filtering——1987
此主要讨论图像处理与分析.虽然计算机视觉部分的有些内容比如特 征提取等也可以归结到图像分析中来,但鉴于它们与计算机视觉的紧密联系,以 及它们的出处,没有把它们纳入到图像处理与分析中来.同样,这里面也有 ...