mysql 需要什么硬件配置_如何来给指定的硬件环境配置一份比较合理的MySQL配置文件-爱可生...
简介
通过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配置文件-爱可生...相关推荐
- 深度学习开发环境调查结果公布,你的配置是这样吗?(附新环境配置) By 李泽南2017年6月26日 15:57 本周一(6 月 19 日)机器之心发表文章《我的深度学习开发环境详解:Te
深度学习开发环境调查结果公布,你的配置是这样吗?(附新环境配置) 机器之心 2017-06-25 12:27 阅读:108 摘要:参与:李泽南.李亚洲本周一(6月19日)机器之心发表文章<我的深 ...
- mysql免安装版net不是_MYSQL 免安装版的环境配置
如:D:\Program Files\mysql-5.6.23-winx64 2.配置my.ini文件: [client] port=3306 default-character-set=utf8 [ ...
- 静态配置_【实验】华为静态路由基础配置
关注我,你的眼睛会怀孕 一.静态路由功能介绍 静态路由就是手工配置的路由,使得数据包能够按照预定的路径传送到指定的目标网络.当不能通过动态路由协议学到一些目标网络的路由时,配置静态路由就会显得十分重要 ...
- ov5640帧率配置_一文看懂赛博朋克2077中低配置的设置方法和能畅玩的电脑有哪些?...
<赛博朋克2077>是12月10号上线的网络游戏.一句话,这款游戏确实很火 很火 很火.但是由于这款游戏对电脑的配置要求很高.像GTX1650.GTX1650Ti这样的显卡也只能算入门级的 ...
- jooq权限配置_将jOOQ与Spring结合使用:配置
jooq权限配置 我遇到了由ORM引起的性能问题. 尽管我不得不承认大多数这些问题确实是由您造成的,但是我开始认为在只读操作中使用ORM是不值得的. 我开始寻找实现这些操作的替代方法. 这就是我遇到j ...
- spring bean配置_在运行时交换出Spring Bean配置
spring bean配置 如今,大多数Java开发人员都定期与Spring打交道,而我们当中的许多人都已经熟悉了它的功能和局限性. 最近,我遇到了一个我从未遇到过的问题:引入了基于运行时引入的配置来 ...
- cisco packet tracer路由器配置_【干货】思科交换机路由器怎么配置密码?
今天带大家看看如何在思科的交换机路由器当中配置安全特性,也就是密码的配置方式. 在学习配置之前,我们先回顾一下密码相关知识. 密码学是研究信息系统安全保密的科学.人类有记载的通信密码始于公元前400年 ...
- applicationcontext添加配置_让小白也能懂的Bean配置方法
今天整理了一些注入和Bean的知识点,希望能帮助到屏幕前的你 依赖注入(Dependency Injection,DI)和控制反转含义相同,它们是从两个角度描述的同一个概念. 当某个 Java 实例需 ...
- sentos7查看网络配置_论各厂商设备之基础常用配置命令集
路由器交换机常用命令 1.华三常用查看命令 Dis vlan all // 查看接口所属VLAN dis int GigabitEthernet brief // 查看端口 loopback-dete ...
最新文章
- Native Client 资料
- 数据库连接池问题[转]
- Keras中的时间分布层TimeDistributed Layer使用教程
- 1-1 二进制/源码/zip安装和升级
- 软件开发需求分析内容
- LINUX如何设置numlock键开机状态
- vue ajax请求结束再次执行查询方法,Vue.js 监控v-for循环渲染完成后再执行方法
- leetcode第一题:滑雪问题
- 用电脑键盘打出常用特殊符号
- POI入力自定义格式数据
- js IP地址正则校验
- 2021最新 2小时搭建属于自己的游戏服务器—《泰拉瑞亚篇》
- GeoGebra入门之一分钟制作光的反射动态仿真模拟课件
- 网课频遭吐槽?数据背后隐藏这些真相
- 实时内核μC/OS-II下的网络监控系统的设计
- 1062 Talent and Virtue (25分)
- 在sql server中如何用sql语句查看表结构信息?
- 侠众道武功最佳练级方案_《侠众道》武功选择推荐(图文)
- python最简单爬虫让人头疼
- 区块链软件开发的搭建环境
热门文章
- Linux Shell获取系统资源使用百分比(CentOS)
- 图片动画横条广告带上下滚动
- matlab学习:人脸识别之LBP (Local Binary Pattern)
- 不要用偏执毁掉一个产业
- java已被弱化签名,高效Java第四十条建议:谨慎设计方法签名
- matlab 滤波器设计 coe_一种半带滤波器的低功耗实现方法
- Mybatis源码阅读(四):核心接口4.2——Executor(下)
- ER图转换成关系模式集的规则
- linux 进程 读写锁,linux 下实现高性能读写锁(read/write lock)
- python编程运算符号-Python中的逻辑运算符