简介

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

环境介绍

硬件配置

软件环境

优化层级与指导思想

优化层级

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

SQL优化参数优化架构优化本文重点关注:参数优化

指导思想

日志先行 -- 一个事务能否成功提交的关键是日志是否成功落盘,与数据没有太大的关系;也就是说对写的优化可以表述为各方面的资源向写操作倾斜。瓶颈分析 -- 通过show global status 的各个计数器的值基本上就能分析出当前瓶颈所在,再结合一些简单的系统层面的监控工具如top iostat 就能明确瓶颈。整体性能是“读”&“写”之间的再平衡。

优化过程

优化前

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

监控数据

show global status 中Innodb_data_pending_fsyncs 这个status比较高;iostat的util项有比较明显的波峰,峰值使用率高达85%;

监控数据分析与优化思路

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

由于最小化的安装的buffer_pool_size比较小,所以会频繁的触发innodb_buffer_pool的最大脏页的限制,使得innodb进入暴力刷盘的模式,这种情况下io使用率会明显上升。redo日志重用。 最终的影响可能是两者的叠加,这里先从buffer_pool开始优化。

优化缓冲池

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

监控数据

show global status 中Innodb_data_pending_fsyncs 这个status减小到了 1;iostat的util项峰值有所下降;从性能图像可以看出增大innodb_buffer_pool_size的值后、性能的峰值所对应的并发更高了(当innodb_buffer_pool_size默认的128M调整到200G时innodb_buffer_pool_instances自动增大到了8)调整innodb_buffer_pool_size前后的性能对比

性能大概提高3倍

监控数据分析与优化思路

针对innob_buffer_pool_size的调整取得了一定的收获,下面将要调整的就是针对redo重用的情况了,也就是说我们要增大innodb_log_files_in_group和innodb_log_file_size到一个合适的值。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中的内容(关键部分)

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

性能大概提高2倍

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

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

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

性能大概提高2倍

监控数据分析与优化思路

增大redo到5G的情况下由于整个测试过程中几乎没有日志文件重用的问题,这样也就规避由些引发的大量数据刷盘行为,所以性能曲线也就更平滑了。通过show global status 发现Table_open_cache_overflows=200W+、Thread_created=2k+%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资源成了大问题,这个使用率下能调整的参数不多了对磁盘的监控数据表明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中的内容(关键部分)

调整前后的比较

总结

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

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

说明

之所以max_prepared_stmt_count要调整到这么是因为sysbench的oltp_read_write这个测试会用于prepare语句、如果这个值不够大的话我们测试不了800+并发,你测试sysbench其它oltp用例可能不用这么做,同理max_connections的配置也是如此(不过它确实设置的大了点)有些参数在优化过程中我并没有调整主要原因有两个:①.这是有方法论指导的优化、它更像定向爆破,所以没用的我不去动、在关键参数上调整后已经解决问题的情况下,其它相关的参数我更加倾向不动。②.对于从show global status 中能看出非常明确指向的我也会采取多个参数一起调整的策略。

mysql 需要什么硬件配置_如何来给指定的硬件环境配置一份比较合理的MySQL配置文件-爱可生...相关推荐

  1. 深度学习开发环境调查结果公布,你的配置是这样吗?(附新环境配置) By 李泽南2017年6月26日 15:57 本周一(6 月 19 日)机器之心发表文章《我的深度学习开发环境详解:Te

    深度学习开发环境调查结果公布,你的配置是这样吗?(附新环境配置) 机器之心 2017-06-25 12:27 阅读:108 摘要:参与:李泽南.李亚洲本周一(6月19日)机器之心发表文章<我的深 ...

  2. mysql免安装版net不是_MYSQL 免安装版的环境配置

    如:D:\Program Files\mysql-5.6.23-winx64 2.配置my.ini文件: [client] port=3306 default-character-set=utf8 [ ...

  3. 静态配置_【实验】华为静态路由基础配置

    关注我,你的眼睛会怀孕 一.静态路由功能介绍 静态路由就是手工配置的路由,使得数据包能够按照预定的路径传送到指定的目标网络.当不能通过动态路由协议学到一些目标网络的路由时,配置静态路由就会显得十分重要 ...

  4. ov5640帧率配置_一文看懂赛博朋克2077中低配置的设置方法和能畅玩的电脑有哪些?...

    <赛博朋克2077>是12月10号上线的网络游戏.一句话,这款游戏确实很火 很火 很火.但是由于这款游戏对电脑的配置要求很高.像GTX1650.GTX1650Ti这样的显卡也只能算入门级的 ...

  5. jooq权限配置_将jOOQ与Spring结合使用:配置

    jooq权限配置 我遇到了由ORM引起的性能问题. 尽管我不得不承认大多数这些问题确实是由您造成的,但是我开始认为在只读操作中使用ORM是不值得的. 我开始寻找实现这些操作的替代方法. 这就是我遇到j ...

  6. spring bean配置_在运行时交换出Spring Bean配置

    spring bean配置 如今,大多数Java开发人员都定期与Spring打交道,而我们当中的许多人都已经熟悉了它的功能和局限性. 最近,我遇到了一个我从未遇到过的问题:引入了基于运行时引入的配置来 ...

  7. cisco packet tracer路由器配置_【干货】思科交换机路由器怎么配置密码?

    今天带大家看看如何在思科的交换机路由器当中配置安全特性,也就是密码的配置方式. 在学习配置之前,我们先回顾一下密码相关知识. 密码学是研究信息系统安全保密的科学.人类有记载的通信密码始于公元前400年 ...

  8. applicationcontext添加配置_让小白也能懂的Bean配置方法

    今天整理了一些注入和Bean的知识点,希望能帮助到屏幕前的你 依赖注入(Dependency Injection,DI)和控制反转含义相同,它们是从两个角度描述的同一个概念. 当某个 Java 实例需 ...

  9. sentos7查看网络配置_论各厂商设备之基础常用配置命令集

    路由器交换机常用命令 1.华三常用查看命令 Dis vlan all // 查看接口所属VLAN dis int GigabitEthernet brief // 查看端口 loopback-dete ...

最新文章

  1. Native Client 资料
  2. 数据库连接池问题[转]
  3. Keras中的时间分布层TimeDistributed Layer使用教程
  4. 1-1 二进制/源码/zip安装和升级
  5. 软件开发需求分析内容
  6. LINUX如何设置numlock键开机状态
  7. vue ajax请求结束再次执行查询方法,Vue.js 监控v-for循环渲染完成后再执行方法
  8. leetcode第一题:滑雪问题
  9. 用电脑键盘打出常用特殊符号
  10. POI入力自定义格式数据
  11. js IP地址正则校验
  12. 2021最新 2小时搭建属于自己的游戏服务器—《泰拉瑞亚篇》
  13. GeoGebra入门之一分钟制作光的反射动态仿真模拟课件
  14. 网课频遭吐槽?数据背后隐藏这些真相
  15. 实时内核μC/OS-II下的网络监控系统的设计
  16. 1062 Talent and Virtue (25分)
  17. 在sql server中如何用sql语句查看表结构信息?
  18. 侠众道武功最佳练级方案_《侠众道》武功选择推荐(图文)
  19. python最简单爬虫让人头疼
  20. 区块链软件开发的搭建环境

热门文章

  1. Linux Shell获取系统资源使用百分比(CentOS)
  2. 图片动画横条广告带上下滚动
  3. matlab学习:人脸识别之LBP (Local Binary Pattern)
  4. 不要用偏执毁掉一个产业
  5. java已被弱化签名,高效Java第四十条建议:谨慎设计方法签名
  6. matlab 滤波器设计 coe_一种半带滤波器的低功耗实现方法
  7. Mybatis源码阅读(四):核心接口4.2——Executor(下)
  8. ER图转换成关系模式集的规则
  9. linux 进程 读写锁,linux 下实现高性能读写锁(read/write lock)
  10. python编程运算符号-Python中的逻辑运算符