「中国统计网」MySQL性能测试 · 数据库调优攻略

- 点击上方“中国统计网”订阅我吧!-
「中国统计网」MySQL性能测试 · 数据库调优攻略
本文插图
文末领取【拍拍贷数据集】
性能调优前提:无监控不调优 , 本篇文章先不谈监控 , 只谈调优 。 如果有对于mysql性能的监控感兴趣的可以在文末给小编留言 , 以后为大家分享 。
Mysql性能指标及问题分析和定位1.我们在监控图表中关注的性能指标大概有这么几个:CPU、内存、连接数、io读写时间、io操作时间、慢查询、系统平均负载以及memoryOver
2.介绍下Grafana模板中各性能指标的意思
「中国统计网」MySQL性能测试 · 数据库调优攻略
本文插图
这个是Mysql数据库的连接数
「中国统计网」MySQL性能测试 · 数据库调优攻略
本文插图
这个图标表示了慢查询
「中国统计网」MySQL性能测试 · 数据库调优攻略
本文插图
上图就是Mysql数据库的缓存区 , 展示了最大缓存以及已使用缓存等数据
3. 性能分析
一般在产生Mysql瓶颈的时候往往伴随着的是CPU使用率急速上升 , 需要top看一下是哪个线程占据了大量的CPU资源 , 如果发现Mysql进程占用较高 , 那么基本可以判断是Mysql数据库出现了问题 。
接下来就是对问题具体的分析和定位 。
对于数据库的操作基本上就是大量的查询 , 会导致数据库出现性能问题 。 对有问题的场景使用Jmeter模拟场景进行并发 , 并观察Grafana的图表 。
Mysql的几个问题基本上就是:

  • 缓存区较小 , 大量查询导致了缓存区溢出 , 使用io进行读写 , 众所周知 , io的读写速度远远比内存读写速度要慢得多 。
  • SQL语句问题 , 导致mysql数据库出现瓶颈的查询语句类型很多 , 最后会给大家列举一些 。
那么怎么定位到这些问题呢?
(1)在负载测试中 , 通过Grafana图表观察Memory Over这个图表 , 如果发现占用基本占满所分配给Mysql数据库缓存区的内存 , 然后IO读写时间非常长 , 读写频率非常高 , 那基本上是可以判断是缓存区较小导致的问题 。 (这个问题已经很少出现了)
log_output=file,table#二选 1 或者 2 个都选slow_query_log=onslow_query_log_file = /tmp/mysql-slow.log long_query_time = 1#设置如何判断慢查询 , 这边设置超过1s就算慢查询#使用完记得关闭重启Mysql数据库 , 在Grafana图表中如果看到慢查询的时间超过1s时 , 基本判断为存在慢查询 。
登入数据库运行命令
select*frommysql.slow_log;#查看慢查询表数据运行完这条命令后 , 可以查看到所有超过1s的查询语句 , 这个时候复制这条语句到查询输入框中 , 选中右键点击解释 。
  • type列 , 连接类型 。 一个好的sql语句至少要达到range级别 。 杜绝出现all级别
  • key列 , 使用到的索引名 。 如果没有选择索引 , 值是NULL 。 可以采取强制索引方式
  • key_len列 , 索引长度
  • rows列 , 扫描行数 。 该值是个预估值
  • extra列 , 详细说明 。 注意常见的不太友好的值有:Using filesort, Using temporary
SQL语句调优1. SQL语句中IN包含的值不应过多MySQL对于IN做了相应的优化 , 即将IN中的常量全部存储在一个数组里面 , 而且这个数组是排好序的 。 但是如果数值较多 , 产生的消耗也是比较大的 。 再例如:select id from t where num in(1,2,3) 对于连续的数值 , 能用 between 就不要用 in 了;再或者使用连接来替换 。


推荐阅读