其实基于行业前几年来说,默认配置在开发环境基本上够用,因为一般的项目来说,数据量基本上全表也就几百万,这也是小公司面试时候得到的一个普遍的结果,所以对于性能调优,无论是开发过程中程序的处理,以及数据库服务的调优处理,基本上涉及到的还是相对较少。但是随着时代的发展,尤其是互联网的发展,物联网等崛起,数据量开始暴增,可能一个中小项目都开始出现单表千万的数据量。这个时候,一但业务开始稳定,线上数据量夸张,开发测试环境也会开始模拟大数据量的情况,用于保障线上程序的稳定。
话不多说,直接开始本文的一些干货。本文不去占用篇幅讲程序如何支撑大数据情况,也不去讲硬件如何支持大数据量,我们纯粹从mysql服务的配置来讲一些调优配置。
首先,数据库配置调优一定是基于实际面对了数据库压力的情况下的实际场景更改配置,如下我列举一些,可能正常用到的
1.缓冲池字节大小调整(innodb_buffer_pool_size) 推荐值为物理内存的50%~80% (注意 我们说的物理内存的概念,一般是指整个机器上只有mysql 但是实际在开发环境时,一般小公司可能存在一个物理机器上,多个服务,基于这种情况,我们把物理内存换个角度理解,叫可用剩余内存)
举例:一台8g内存的物理机器,只有一台mysql 我们可以设置innodb_buffer_pool_size 为4g到6g
-
脏页占innodb_buffer_pool_size的比例(innodb_max_dirty_pages_pct) 推荐值为25%~50%
innodb_max_dirty_pages_pct=30
3.每提交N次事务同步写到磁盘(sync_binlog)
这个参数看实际场景,如果在测试环境,或者对于数据没有那么严谨的场景 我一般会设置成100 因为设置1 太占用io,在并发场景下太损耗性能
4.后台进程最大IO性能指标(innodb_io_capacity)
这个参数可以看一下,如果使用ssd 一定记得调整,默认200,如果SSD,调整为5000~20000
5.最大连接数(max_connections)
一般设置2000即可
6.服务端会执行主机名解释(skip_name_resolve)
服务端执行dns解析,就是说解析连接的ip,如果是开发环境,或者是不需要监控的直接去掉