前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL 8.0.18 count(*) 比较慢的bug

MySQL 8.0.18 count(*) 比较慢的bug

作者头像
用户1278550
发布2021-10-27 11:09:54
1.1K0
发布2021-10-27 11:09:54
举报
文章被收录于专栏:idba

一个之前的同事描述了他遇到的性能案例,两个数据库分别是 mysql 5.7 和 mysql 8.0 执行 select count(*) from table ,5.7 版本的性能明显好于 8.0 版本的。而且数据量 5.7 版本的300w ,8.0 版本的115w 左右。配置是RDS 1core2g .

分析

其实我自己没有怎么分析,查看了执行计划,是一致的。8.0.18 版本的确比较慢,于是谷歌之。。原因是官方针对 mysql 8.0.18 做一个改动: 如果buffer_pool 将近用完,并行扫描时涉及的到page几乎不会再进入到缓存,导致select count(*) 这种全表扫描每次都要物理读;同等情况下,MySQL 之前的版本 比如 8.0.16 或者 5.7的版本可以进入加载更多的 page 到缓存,因此性能差别也就非常大。

官方的bug 地址 https://bugs.mysql.com/bug.php?id=99717&thanks=4

下图展示了 MySQL 8.0.18 版本执行count 动作时实例耗费的IOPS 的确飚的非常高。

如何解决

查看MySQL 8.0 Release Notes ,发现 8.0.20 和 8.0.26 分别解决了不同平台上的bug 。

https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-26.html

InnoDB: Stalls were caused by concurrent SELECT COUNT(*) queries where the number of parallel read threads exceeded the number of machine cores. A patch for this issue was provided for Windows builds in MySQL 8.0.24. The MySQL 8.0.26 patch addresses the same issue on other affected platforms. (Bug #32678019) References: See also: Bug #32224707.

https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-20.html

InnoDB: Changes to parallel read threads functionality introduced in MySQL 8.0.17 caused a degradation in SELECT COUNT(*) performance. Pages were read from disk unnecessarily. (Bug #30766089)

使用云RDS的朋友记得检查自己使用的数据库是否是大于8.0.17 的 ,看看该bug是否对自己的业务有什么影响。

写这个文章的时候,看朋友圈开始发 8.0.27 release 的文章了。

hava fun with mysql

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-10-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 yangyidba 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 如何解决
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档