当前位置: 首页 > news >正文

mysql select count 非常慢

MySQL select count 性能分析

问题:mysql 在count时发现非常慢

select count(*) from xxx;
无论执行多少次,查询速度基本稳定在10-12秒之间

环境说明

  1. windows11 x64
  2. SSD硬盘
  3. MySQL8.0.35
  4. 数据库引擎为InnoDB
  5. 数据行数不到3万行,但是数据量将近900M,这900M中包含了数据本身和索引。

思路

  1. 排除count(*) count(id)对性能的干扰。
  2. 经过show profile分析,在execute阶段有将近9秒多的时间。于是怀疑是io的问题。
  3. 修改innodb的buffer相关进行测试
[mysqld]
# innodb_log_files_in_group 和innodb_log_file_size 8.0之后废弃
# 用innodb_redo_log_capacity代替,默认100M,最大128GB
innodb_redo_log_capacity=1G# 三者之间的关系
# innodb_buffer_pool_size / innodb_buffer_pool_chunk_size = innodb_buffer_pool_instances
# win32系统: innodb_buffer_pool_chunk_size  默认为128M
# 其他系统: innodb_buffer_pool_size 小于1G时,innodb_buffer_pool_instances 默认为1
# 大于1G时。innodb_buffer_pool_instances 默认为8,取值范围 1-64
innodb_buffer_pool_chunk_size=512M
innodb_buffer_pool_instances=8
innodb_buffer_pool_size=4G
  1. show engine status\G查看buffer pool中描述(buffer pool的数量是 上面的instances数量对应)
    关注 free buffers 有0的情况, 如果有,考虑buffer_size太小
  2. show status like '%buffer%';查看
#从内存读取的大小
Innodb_buffer_pool_read_requests#无法满足内存读取,从磁盘读取的大小
Innodb_buffer_pool_reads#计数器,计算innodb需要创建页面的次数,大于0时,考虑buffer_size太小        
Innodb_buffer_pool_wait_free    

buffer命中率 = innodb_buffer_pool_read_requests / (innodb_buffer_pool_read_requests + innodb_buffer_pool_reads) * 100

根据4,5步骤的情况,修改了innodb_buffer_pool_size结果查询时,第一次时长为10多秒,后续每次查询稳定在0.01秒,和之前比,相关与多了一次缓存?

我对比了下openEuler系统上同样数据库的同样操作,第一次不到2秒,后续每次0.01秒
对比了下innodb的所有参数,除过上述提到的buffer_pool的三个参数被修改过,其他都一致

有那个英雄路过时,麻烦留言指点下问题出在哪里

相关文章:

  • pico示波器使用
  • redis-学习笔记(hash)
  • 企业级SQL开发:如何审核发布到生产环境的SQL性能
  • arm平台编译so文件回顾
  • SSL证书更新
  • 离线数仓构建案例一
  • 16ASM 分段和机器码
  • 1. 使用poll或epoll创建echo服务器
  • 【小米电脑管家】安装使用教程--非小米电脑
  • [ 蓝桥杯Web真题 ]-布局切换
  • 计算机毕业设计 SpringBoot的医院门诊在线挂号系统 Javaweb项目 Java实战项目 前后端分离 文档报告 代码讲解 安装调试
  • 使用linux CentOS本地部署SQL Server数据库
  • c#编码技巧(十五):新语法糖record深入分析
  • echarts词云图echarts-wordcloud使用方法
  • HarmonyOS--ArkTS(1)--基本语法(1)
  • JavaScript-如何实现克隆(clone)函数
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • 11111111
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • echarts花样作死的坑
  • iOS | NSProxy
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • Js基础——数据类型之Null和Undefined
  • js写一个简单的选项卡
  • JS字符串转数字方法总结
  • Lsb图片隐写
  • PAT A1092
  • PHP 程序员也能做的 Java 开发 30分钟使用 netty 轻松打造一个高性能 websocket 服务...
  • Puppeteer:浏览器控制器
  • React组件设计模式(一)
  • tensorflow学习笔记3——MNIST应用篇
  • Vim Clutch | 面向脚踏板编程……
  • Vue 重置组件到初始状态
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 如何合理的规划jvm性能调优
  • 提醒我喝水chrome插件开发指南
  • 一些关于Rust在2019年的思考
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • #{} 和 ${}区别
  • #DBA杂记1
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • ( 10 )MySQL中的外键
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (2)STL算法之元素计数
  • (C语言)二分查找 超详细
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (Matlab)使用竞争神经网络实现数据聚类
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (九十四)函数和二维数组