1 简述
日常工作中,会用到 MySql 做关系型数据库,会进行表设计、写SQL、建索引、存储过程等。那么我们应该遵循什么样的软件使用规则,才能让设计的表结构不会再变更、写过的SQL 无法再优化,没有更好只有最好呢(不考虑业务的变更)。这里简单记录一下 MySql 优化方面的内容。
既然要使用一款软件,那么与这款软件有牵扯的周边因素都要考虑进去,比如说:运行软件的平台、软件本身、使用软件的人。 维度如下图,平台基本上就是指硬件设备、操作系统,软件本身就是MySql服务,使用的人就是我们这些瞭望江河山还在的开发人员。接下来一起从这几个维度来记录一下应该指定、或许用不上的使用规则。
2 硬件设备
影响数据库最大的性能问题就是磁盘 I/O,为了提升数据库的 IOPS 性能,可以使用 SSD 或者 PICE-SSD 高速磁盘设备,至少可以获得上百倍或者上万倍的 IOPS 性能提升。如果你细心些,有没有发现使用安装在自己笔记本设备上的 Mysql 进行查询时,速度竟然会比服务器还要快,是不是太不可思议了。
2.1 磁盘方面
- 尽可能的使用 SSD 或者 PICE-SSD 高速磁盘设备;
- 数据库系统 TPS 过高或者业务量较高时,一定要配置阵列卡;
- 阵列卡一定要配备 cache 模块,cache 模块还要配置 BBU 模块来提供持续电量;
- cache 策略选择 Write Back(WB) 可以提高 I/O 写数据性能。
- 建议关闭预读功能。
2.2 CPU
- CPU 建议采用最大性能模式,选择 performance per watt optimized;
- 同时建议关闭 CIS 和 C stats 节能选项;
2.3 内存
- 选择最大性能模式,maximum performance ;
- 尽量在BIOS 禁掉 NUMA 功能,将Node Interleaving 设置成 Enabled 模式,让内存在多个CPU 节点之间循环使用。
有时候,作为开发人员在硬件选择方面能做的会很少,但是这并不影响我们对完美的追求。
2 MySql 服务
关于 MySql 服务本身配置的优化,能体现的基本上是一些参数的设置。
- innodb_buffer_pool_size: 如果服务是单实例且绝大多数是 InnoDB 引擎表,可以设置为物理内存的 50%~80%左右。
- innodb_flush_log_