简介

通过sysbench的oltp_read_write测试来模拟业务压力、以此来给指定的硬件环境配置一份比较合理的MySQL配置文件。

环境介绍

硬件配置

软件环境

优化层级与指导思想

优化层级

MySQL数据库优化可以在多个不同的层级进行,常见的有:

  • SQL优化

  • 参数优化

  • 架构优化

本文重点关注:参数优化

指导思想

  1. 日志先行 -- 一个事务能否成功提交的关键是日志是否成功落盘,与数据没有太大的关系;也就是说对写的优化可以表述为各方面的资源向写操作倾斜。

  2. 瓶颈分析 -- 通过show global status 的各个计数器的值基本上就能分析出当前瓶颈所在,再结合一些简单的系统层面的监控工具如top iostat 就能明确瓶颈。

  3. 整体性能是“读”&“写”之间的再平衡。

优化过程

<优化前>

my.cnf中的内容(关键部分)

图像地址:

http://www.sqlpy.com/mysqlz/tuninglog/result/cm16c256g4096ssd/0/

监控数据

  1. show global status 中Innodb_data_pending_fsyncs 这个status比较高;

  2. iostat的util项有比较明显的波峰,峰值使用率高达85%;

监控数据分析与优化思路

对监控数据有两种可能的解释:

  1. 由于最小化的安装的buffer_pool_size比较小,所以会频繁的触发innodb_buffer_pool的最大脏页的限制,使得innodb进入暴力刷盘的模式,这种情况下io使用率会明显上升。

  2. redo日志重用。 最终的影响可能是两者的叠加,这里先从buffer_pool开始优化。

<优化缓冲池>

my.cnf中的内容(关键部分)

图像地址:

http://www.sqlpy.com/mysqlz/tuninglog/result/cm16c256g4096ssd/1/

监控数据

  1. show global status 中Innodb_data_pending_fsyncs 这个status减小到了 1;

  2. iostat的util项峰值有所下降;

  3. 从性能图像可以看出增大innodb_buffer_pool_size的值后、性能的峰值所对应的并发更高了(当innodb_buffer_pool_size默认的128M调整到200G时innodb_buffer_pool_instances自动增大到了8)

调整innodb_buffer_pool_size前后的性能对比 :


性能大概提高3倍

图像地址:

http://www.sqlpy.com/mysqlz/tuninglog/compare/cm16c256g4096ssd/0/1/

监控数据分析与优化思路

  1. 针对innob_buffer_pool_size的调整取得了一定的收获,下面将要调整的就是针对redo重用的情况了,也就是说我们要增大innodb_log_files_in_group和innodb_log_file_size到一个合适的值。

  2. innob_buffer_pool_size取得的收获还可以进一步扩大,那就是增大innodb_buffer_pool_instances的值。

<优化日志文件>

根据对之前测试的记录每完成一组测试LSN增大4.5G、测试持续时间大概是5分钟;理论上把redo文件增大到5G可以做到整个测试的过程中不发生日志重用、这样的话测试的跑分会更高、曲也线更平滑,不过这个会影响数据库宕机恢复的时间。MySQL在默认配置下innodb_log_files_in_group=2,innodb_log_file_size=48M也就是说跑完一组测试redo日志要刷新48轮(1024*4.5/96 ==48) 先看一下把日志刷新减少到9轮的情况。

my.cnf中的内容(关键部分)

图像地址:

http://www.sqlpy.com/mysqlz/tuninglog/result/cm16c256g4096ssd/2/

调整innodb_log_files_in_group&innodb_log_file_size前后的性能对比:

性能大概提高2倍

图像地址:

http://www.sqlpy.com/mysqlz/tuninglog/compare/cm16c256g4096ssd/1/2/

现在看一下日志重用控制在一轮(5G)之内的性能表现

my.cnf中的内容(关键部分)

图像地址:

http://www.sqlpy.com/mysqlz/tuninglog/result/cm16c256g4096ssd/3/

调整innodb_log_files_in_group&innodb_log_file_size前后的性能对比

性能大概提高2倍

图像地址:

http://www.sqlpy.com/mysqlz/tuninglog/compare/cm16c256g4096ssd/2/3/

监控数据分析与优化思路

  1. 增大redo到5G的情况下由于整个测试过程中几乎没有日志文件重用的问题,这样也就规避由些引发的大量数据刷盘行为,所以性能曲线也就更平滑了。

  2. 通过show global status 发现Table_open_cache_overflows=200W+、Thread_created=2k+

  3. %Cpus : 80.5 us, 13.8 sy, 0.0 ni, 5.4 id, 0.0 wa, 0.0 hi, 0.3 si, 0.0 st 95%的使用率cpu资源成了大问题,这个使用率下能调整的参数不多了

  4. 对磁盘的监控数据表明util的峰值已经下降到14%、磁盘已经不在是问题;所以针对innodb_buffer_pool_size、innodb_log_files_in_group&innodb_log_file_size 这两次优化的进入一步优化innodb_buffer_pool_instances、innodb_log_buffer_size 先不进行;在些采用“抓大放小”的方式先调整表缓存与线程缓存。

<优化其它已知项>

cpu使用率达到了95%,看到这个数值有一种发自内心的无力感,所以打算所目前status中能明确的一些问题直接一起调整了;增大table_open_cache&table_open_cache_instances用于优化表缓存、增大thread_cache_size使cpu不用频繁的创建销毁线程。

my.cnf中的内容(关键部分)

图像地址:

http://www.sqlpy.com/mysqlz/tuninglog/result/cm16c256g4096ssd/4

调整前后的比较

图像地址:

http://www.sqlpy.com/mysqlz/tuninglog/compare/cm16c256g4096ssd/3/4/

总结

一、考虑到cpu使用率已经达到95%且增加物理cpu不现实的情况下,决定MySQL参数优化到此为止;最后来看一眼这次优化成果。

图像地址:

http://www.sqlpy.com/mysqlz/tuninglog/compare/cm16c256g4096ssd/0/4/

二、前面由于篇幅只给出配置文件的一部分、现在我们来看一下完整的配置文件。

说明

  1. 之所以max_prepared_stmt_count要调整到这么是因为sysbench的oltp_read_write这个测试会用于prepare语句、如果这个值不够大的话我们测试不了800+并发,你测试sysbench其它oltp用例可能不用这么做,同理max_connections的配置也是如此(不过它确实设置的大了点)

  2. 有些参数在优化过程中我并没有调整主要原因有两个:

    ①.这是有方法论指导的优化、它更像定向爆破,所以没用的我不去动、在关键参数上调整后已经解决问题的情况下,其它相关的参数我更加倾向不动。

    ②.对于从show global status 中能看出非常明确指向的我也会采取多个参数一起调整的策略

转载于:https://www.cnblogs.com/vinzen/p/9545569.html

MySQL 瓶颈分析及优化相关推荐

  1. MySQL索引分析和优化(转)

    MySQL索引分析和优化(转) 索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存.如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记 录,直至找到符 ...

  2. mysql的瓶颈_MySQL瓶颈分析与优化

    作者:蒋乐兴 简介 通过sysbench的oltp_read_write测试来模拟业务压力.以此来给指定的硬件环境配置一份比较合理的MySQL配置文件. 环境介绍 硬件配置 软件环境 优化层级与指导思 ...

  3. mysql索引分析和优化_MySQL索引分析和优化

    什么是索引? 索 引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存.如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的 所有记录,直至找到符合要求的记录.表 ...

  4. mysql瓶颈分析_网站瓶颈分析—MYSQL性能分析

    一.关于慢查询设置和分析 查找慢查询参数 mysql> show variables like 'long%';+-----------------+----------+ | Variable ...

  5. php mysql索引原理_加速PHP动态网站 关于MySQL索引分析优化

    本文主要讲述了如何加速动态网站的MySQL索引分析和优化. 一.什么是索引? 索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存.如果没有索引,执行查询时MySQL必须从第 ...

  6. PC虚拟现实应用的性能分析与优化:从CPU角度切入

    如今,虚拟现实 (VR) 技术正日益受到欢迎,这主要得益于遵循摩尔定律的技术进步让这一全新体验在技术上成为可能.尽管虚拟现实能给用户带来身临其境般的超凡体验,但相比传统应用,其具有双目渲染.低延迟.高 ...

  7. mysql 第24章 优化

    2015-10-25 目录 参考资料 [1] 唐汉明.深入浅出MySQL 数据库开发.优化与管理维护(第2版)[M].北京:人民邮电出版社,2014 [2] Schwartz.高性能MySQL(第3版 ...

  8. mysql性能优化-慢查询分析、优化索引和配置

    目录 一.优化概述 二.查询与索引优化分析 1性能瓶颈定位 Show命令 慢查询日志 explain分析查询 profiling分析查询 2索引及查询优化 三.配置优化 1)      max_con ...

  9. mysql io 100_MySQL服务器 IO 100%的分析与优化方案

    压力测试过程中,如果因为资源使用瓶颈等问题引发最直接性能问题是业务交易响应时间偏大,TPS逐渐降低等.而问题定位分析通常情况下,最优先排查的是监控服务器资源利用率,例如先用TOP 或者nmon等查看C ...

最新文章

  1. GBDT 和 AdaBoost区别?
  2. 网站建设要重视与客户之间的沟通
  3. 对于坐拥海量数据的金融企业来说,大数据治理意味着什么?
  4. 三个免费图片网站:特别适合场景图
  5. 记录一次解决httpcline请求https报handshake_failure错误
  6. 分布式事务模型--Saga
  7. CSS 制作手风琴导航
  8. nosql数据库基础
  9. 深度系统文件服务器,深度系统镜像文件
  10. Smart3D系列教程3之 《论照片三维重建中Smart3D几个工作模块的功能意义》
  11. 小米盒子 smb Android,客厅里的多媒体 小米盒子SMB本地连接
  12. Windows驱动编程基础(下)之电源管理
  13. python 今日头条视频自动上传_抖音视频怎么上传到今日头条?这个软件可一键操作很方便...
  14. oracle卸数的perl脚本,卸载cpan安装的所有perl模块
  15. 纯CSS3实现常见多种相册效果
  16. @keyup.enter.native
  17. SVG夜晚床月亮场景代码
  18. Naive UI - 火热出炉!基于 Vue 3.0/TypeScript 的免费开源前端 UI 组件库
  19. 众多碎石3d材质贴图素材一键即可获取
  20. 数学建模入门例题python_Python 数学建模极简入门(一)

热门文章

  1. vue-cli3.0 初体验
  2. Git 学习笔记(二)分支管理
  3. 2018第九届山东省ACM省赛
  4. JavaScript之对象序列化详解
  5. 优秀博客-前端博客(转)
  6. HTC ThunderBolt无法打开3G问题解决方法
  7. jsp网页实现任意进制的数转换成任意进制数
  8. c 语言比较三个字符串,C语言字符篇(三)字符串比较函数
  9. hiveserver2详解
  10. FPGA实现低高速接口更新说明