mysql的常见优化(详解GaussDB for MySQL性能优化)
mysql的常见优化
详解GaussDB for MySQL性能优化背景
我们先来看看mysql 8.0的事务提交的大致流程
以上流程,是mysql8.0对wal原则的一种实现,这个流程意味着,任何一个事务的提交,一定要完成write buffer和flush to disk流程。
然而那么这个流程中,有一个问题:每个服务器的cpu是有限的,服务器能处理的thread也是有上限的,那么当我们的业务的并发数量,远远大于我们服务器能并行处理的数量时,那么后来的事务,只能等待前面的事务提交后才能被处理。在这之前,他们什么也做不了。因此,在大并发场景下,如何进一步提升线程的使用率,是大并发事物写入的一个关键。
灵感来源于生活
一个优化,并不是凭空想象出来的,有时候,往往来源于现实生活。下面,我们先来看看我们身边,和事务提交流程非常类似的一个例子:快递。
现在的快递配送,一般一个快递员会负责一片区域,快递刚开始兴起时,数量不多,那么一个快递员基本上可以在规定时间内完成配送。
但是,随着快递数量越来越多,一个快递员要在一个小区配送很长的时间,才能到下一个小区,常常导致了快递员无法准时的配送。在这个问题的催动下,随后,一个新的行业开始出现 – 快递驿站。
快递的优化原理
接下来,让我们来看下,快递驿站究竟解决了什么问题。
快递的配送过程中,最耗时的,不是装货,不是卸货,而是电话和等待。配送一个小区的时间,取决于这个最后一个来取快递的人的时间,在最后一个人取完快递钱,快递员除了打电话,做不了其他任何事情(也没有办法通知下一个小区的人,因为最后一个人来取得时间是无法确定的)。那么这个等待的时间,对于快递员来说,就是一种浪费。
快递驿站可以很大程度解决这个问题,快递员到了以后,只需要将快递卸货,即可前往下一个小区,剩下的事情,就可以由驿站的人员来完成,大大提升了快递员的配送效率。
分析
回过头来,我们看看数据库,如果把transaction线程看做快递员,存储上的文件看做取快递的人,那么我们会发现两者有非常大的相似性。那么我们可以像快递配送优化那样去优化事务的处理流程吗?答案是可以的。
根据快递驿站的优化原理,我们知道,快递驿站帮快递员免去了等待客户取货的时间,那么事务处理过程中,有没有等待的过程呢?答案是有的,存储的io就是一个较长的等待。数据库使用经验丰富的开发人员来都知道,等待redo日志写入存储的磁盘io性能,很大程度上决定了数据库的写入性能。对于现代数据库来说,尤其对于gaussdb(for mysql)这样计算于存储分离的数据库,存储的io耗时,在事务处理的总耗时中,占据了不小的比例,虽然有log buffer的合并写入,提升并发情况下的整体吞吐,但是如果在等待io的这段时间中,这些线程能够去做别的事情(例如处理等待中的其他事务)。那么将会有进一步的性能提升。
gaussdb(for mysql)的优化
既然找到了等待的点,那么我们就可以像快递配送的优化方法,为数据库,也创造一个“快递驿站”,让“快递驿站”来做等待的事情,而事务线程就可以去处理其他等待中的事务,让cpu不会“闲下来”。
如图5所示,gaussdb(for mysql)当redo日志的flush to disk动作完成后,即可进行事务提交,但是此时并不应答客户端,而是直接处理下一个事务。同时使用少量”post comit worker线程”,来批量等待日志写入完成(等待的过程其实并不占用cpu),并应答客户端,这就可以让“等待”和“下一个事务的处理”并行化,让cpu“闲不下来”。
实际测试
根据实际测试,在标准的sysbench写入模型下,没有使用post commit时,极限性能是35万qps左右,而使用post commit后,可以到大42万以上的qps,提升了20%的写入性能。
以上就是详解gaussdb for mysql性能优化的详细内容,更多关于gaussdb for mysql性能优化的资料请关注开心学习网其它相关文章!
- 如何使java与sqlserver数据库连接(java连接mysql数据库 java连接sql server数据库)
- mysql5.7.19下载及安装教程(Apache2.2.16+PHP5.3.3+MySQL5.1.49的配置方法)
- mysql参数说明(MySQL中你可能忽略的COLLATION实例详解)
- mysql索引失效怎么办(MySQL选错索引的原因以及解决方案)
- 通过接口访问mysql数据库(使用mysql记录从url返回的http GET请求数据操作)
- mysql锁机制及原理(MySQL锁阻塞的深入分析)
- mysql 使用小结(Mysql Online DDL的使用详解)
- mysql主键自增策略(MySQL的主键命名策略相关)
- rabbitmq客户端内存占用(mysql-canal-rabbitmq 安装部署超详细教程)
- mysql中group_concat
- mysqlgroupby语句实现原理(Mysql中错误使用SQL语句Groupby被兼容的情况)
- mysql优化使用方法(详解Mysql函数调用优化)
- mysql insert into 怎么用(MySQL中INSERT的一般用法)
- mysql 性能调优技巧(4 款 MySQL 调优工具,公司大神都在用!)
- 所有聚合函数mysql教程(Mysql 聚合函数嵌套使用操作)
- mysql数据库主键选择的详解(图文详解MySQL中的主键与事务)
- 销 售 买 卖 你真的了解这四个字了吗(销售买)
- 谢娜是得罪快乐大本营造型师了吗 全场被黑化(谢娜是得罪快乐大本营造型师了吗)
- 前《iLOOK》时装总监 《快乐大本营》御用造型师上线(快乐大本营御用造型师上线)
- 释小龙晒杀青照片 多重身份惹观众期待(释小龙晒杀青照片)
- 《九牛之人降魔传》开机 演员祁高坤化身九牛之人除魔卫道(九牛之人降魔传开机)
- 王铲铲的致富之路无限金币卡法攻略教学(王铲铲的致富之路无限金币卡法攻略教学)
热门推荐
- mysql怎么迁移数据(如何把本地mysql迁移到服务器数据库)
- apache配置说明(深入apache host的配置详解)
- sublime text 安装package control,方便其它插件安装
- mysql双向同步原理(详解MySQL的半同步)
- sqlserver常用流控语句(SQL Server实现自动循环归档分区数据脚本详解)
- SQL Server表误删记录如何恢复
- linux关闭autofs服务命令(Linux系统的ECS实例挂载NAS提示“mount: can't find /root/nas in /etc/fstab”错误的解决)
- php7.4 废弃功能(浅析PHP7 的垃圾回收机制)
- pyqt5 登录界面(pyqt5利用pyqtDesigner实现登录界面)
- dedecms标签怎么调用(织梦DEDECMS获取当前页面的顶级栏目名称及链接教程)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9