[转帖]MySQL 8.0新特性和性能数据
https://plantegg.github.io/2022/07/03/MySQL8.0%E7%9A%84%E4%B8%80%E4%BA%9B%E6%95%B0%E6%8D%AE/
MySQL 8.0带来了很多新特性
针对性能方面介绍全在这个PPT( http://dimitrik.free.fr/Presentations/MySQL_Perf-OOW2018-dim.pdf)里面了:
IO_Bound 下性能提升简直非常明显,之前主要是fil_system的锁导致IO的并发上不去,见图1。
因为优化了redo的写入模式,采用了事件的模型,所以写入场景有较好的提升 。
utf8mb4在点查询场景优势不明显,在distinct range查询下有30%提升。
内存只读场景略有提升。
还有傲腾对SSD的数据,不过Intel都放弃了,就不说了。
性能
page size
MySQL的页都是16K, 当查询的行不在内存中时需要按照16K为单位从磁盘读取页,而文件系统中的页是4k,也就是一次数据库请求需要有4次磁盘IO,如过查询比较随机,每次只需要一个页中的几行数据,存在很大的读放大。
那么我们是否可以把MySQL的页设置为4K来减少读放大呢?
在5.7里收益不大,因为每次IO存在 fil_system 的锁,导致IO的并发上不去
8.0中总算优化了这个场景,测试细节可以参考这篇
16K VS 4K 性能对比(4K接近翻倍)
4K会带来的问题:顺序insert慢了10%(因为fsync更多了);DDL更慢;二级索引更多的场景下4K性能较差;大BP下,刷脏代价大。
REDO的优化
redo的优化似乎是8.0读写性能优于以往的主要原因
redo的模型改成了事件驱动,而不是通过争抢锁实现,专用的flush线程刷完IO后通知用户线程,并且会根据IO的rt自动调整每次flush的data大小,如果io延迟很低,就大量小IO,如果IO延迟高,就用大io刷,也就说redo的刷写能力完全取决于IO的吞吐
但是事件驱动的方式在小并发下性能没有单线程锁的方式高效,这块已经优化了,需要自己测下效果
总结
MySQL 8.0优化总结,从官方给出的数据来看,可以总结如下
- 只读场景没有什么优化
- utf8mb4的性能提升比较明显
- 优化了fil_system,MySQL 可以尝试使用4K的页
- 8.0使用新硬件能够获得较好的收益,多socket, optane
- 由于redo的优化以及新的热点检查算法,关闭binlog下,读写混合的场景性能比5.7好很多,但是生产环境无法关闭binlog,默认的字符集也不是latin,所以具体的数据需要单独测试,官方数据只能参考
- Double Write的问题需要在高并发,低命中率下才会触发,生产环境遇到的不多,该问题预计下个版本就修复了
- 生产环境需要关闭UNDO Auto-Truncate
- binlog的问题在8.0比较明显,暂时没有解法
- 另外innodb_flush_method=O_DIRECT_NO_FSYNC 在8.0.14版本后可以保障应用的稳定性了
Prior to 8.0.14, the
O_DIRECT_NO_FSYNC
setting is not recommended for use on Linux systems. It may cause the operating system to hang due to file system metadata becoming unsynchronized. As of MySQL 8.0.14,InnoDB
callsfsync()
after creating a new file, after increasing file size, and after closing a file, which permitsO_DIRECT_NO_FSYNC
mode to be safely used on EXT4 and XFS file systems. Thefsync()
system call is still skipped after each write operation.
[转帖]MySQL 8.0新特性和性能数据的更多相关文章
- Mysql 8.0 新特性测试
Mysql 8.0 新特性测试 Role MySQL8.0版本添加了role特性,role是一种逻辑概念是权限的集合,可以将一个或以上的权限赋予给role,再将role赋给user.Oracle,Po ...
- MySQL 8.0 新特性梳理汇总
一 历史版本发布回顾 从上图可以看出,基本遵循 5+3+3 模式 5---GA发布后,5年 就停止通用常规的更新了(功能不再更新了): 3---企业版的,+3年功能不再更新了: 3 ---完全停止更新 ...
- [转帖 ]MySQL 5.7 新特性 JSON
MySQL 5.7 新特性 JSON 的创建,插入,查询,更新 作者: 我不是鱼 (2016-08-31 16:13)分类: MySQL 标签: MySQL JSON MySQL JSON 应用 ...
- MySQL 8.0 新特性-原子DDL
背景 MySQL 8.0 原子DDL 是一个复杂的过程,涉及比较多的模块,例如:MDL 锁,表定义缓存,行格式,Row Log,DDL Log,online 属性,表空间物理文件操作等.本文主要通过与 ...
- 干货 | 解读MySQL 8.0新特性:Skip Scan Range
MySQL从8.0.13版本开始支持一种新的range scan方式,称为Loose Skip Scan.该特性由Facebook贡献.我们知道在之前的版本中,如果要使用到索引进行扫描,条件必须满足索 ...
- MySQL 8.0新特性之原子DDL
文章来源:爱可生云数据库 简介 MySQL8.0 开始支持原⼦ DDL(atomic DDL),数据字典的更新,存储引擎操作,写⼆进制日志结合成了一个事务.在没有原⼦DDL之前,DROP TABLE ...
- Mysql 8.0 新特性
转载:https://www.jianshu.com/p/be29467c2b0c
- 【mysql】mysq8.0新特性
一.MySQL8.0简介 mysql8.0现在已经发布,2016-09-12第一个DM(development milestone)版本8.0.0发布.新的版本带来很多新功能和新特性,对性能也得到 ...
- 【转帖】Servlet 3.0 新特性详解
http://www.ibm.com/developerworks/cn/java/j-lo-servlet30/ Servlet 3.0 新特性概述 Servlet 3.0 作为 Java EE 6 ...
- [转帖]Pivotal Greenplum 6.0 新特性介绍
Pivotal Greenplum 6.0 新特性介绍 https://cloud.tencent.com/developer/news/391063 原来 greenplum 也是基于pg研发的. ...
随机推荐
- 剖析CWE视图的层次定义和解析方式
摘要:CWE做为软件缺陷分类的重要标准, 对安全研究.安全标准.缺陷管理起了重要的纽带作用.CWE通过编号的类型(类缺陷.基础缺陷和变种缺陷等)形成了多层次的缺陷类型划分体系.本文进一步剖析了CWE视 ...
- 总结vue3 的一些知识点:MySQL 排序
MySQL 排序 我们知道从 MySQL 表中使用 SQL SELECT 语句来读取数据. 如果我们需要对读取的数据进行排序,我们就可以使用 MySQL 的 ORDER BY 子句来设定你想按哪个字段 ...
- 8个方法管理 GitHub 用户权限
如同世界正在经历的疫情,由于网络攻击的大幅增加,许多公司也遭受着"网络疫情",保障代码安全迫在眉睫.在之前的文章中我们了解了安全使用 GitHub 的21条最佳实践.阅读本文,将带 ...
- Python最佳实践书籍《Python 工匠》摘要
<Python工匠>是一本案例.技巧与工程实践的指导书,该书不是python基础语法的教程,而是python中最佳实践的教程,属于python进阶类的书籍.可以将本书当做PEP8编程规范的 ...
- 非洲 AI 不发达,看看这份PPT,受益匪浅
非洲 AI 不发达,看看这份PPT,受益匪浅 非洲有大量的工程+机器学习人才,他们渴望学习.努力工作和进步. 大家好,我是老章 看到我关注的一位博主在首届非洲 @LangChainAI 聚会上的一个演 ...
- Tomcat--安装&&配置文件
配置信息 centos:7.8 tomcat:7.0.3 jdk:1.8 1 部署java环境 [root@localhost ~]# tar xvf jdk-8u181-linux-x64.tar. ...
- Spring Cloud Alibaba 2.2.6发布:新增Nacos注册快速失败的配置
7月12日消息,Spring Cloud Alibaba新版本2.2.6发布,该版本适配Spring Cloud Hoxton.SR9. 下面一起来看看该版本内容: 特性增强 Nacos 支持服务注册 ...
- C++ 20 标准协程入门教程
基本概念 (是什么) 协程(coroutine): 是一种特殊的函数,其可以被暂停(suspend), 恢复执行(resume).一个协程可 以被多次调用. 协程(coroutine): 分为stac ...
- JSP标准标签库(JSTL)个人使用指南
前排提示,本篇仅涉及 JSTL 的配置和简要介绍 JSTL 的 Core 和 Functions 标签库中几个常用的标签.更加详细的内容,博主会贴相应超链接. 注意:本教程使用的 JSTL 1.2,如 ...
- VMware15.5安装Ubuntu20.04
一.安装前的准备 1.下载好Ubuntu20.04的镜像文件,直接从官网下载就好,激活密匙. 2.准备好VMware软件,这里就忽略安装过程了. 二.建立虚拟机以及开启正式的Ubuntu安装过程 参考 ...