工作中用到的mysql优化无非就是sql语句,表结构和业务,考虑过硬件和操作系统层面,但是没怎么去了解过,无意翻看了张甦著mysql王者晋级之路,把看到的总结下,虽然作为一个程序猿实践中从这两个方面去考虑,基本是公司给什么硬件条件和允许什么操作系统,就用默认的。
一、表结构
二、sql语句
三、参数配置
四、操作系统
1)I/O调度模式建议选择deadline或者noop模式,不要使用cfq模式,因为会严重影响数据库的性能。
cat /sys/block/fd0/queue/scheduler查看I/O调度方式。
2)文件系统推荐采用xfs,其次可以选择ext4,避免ext3
3)内核参数vm.swappiness设置,该参数表示使用swap的意向。建议1-10范围内取值,不建议设置为0,否则可能导致系统内存溢出,从而导致mysql被意外kill掉。查看swappiness参数设置,cat /proc/sys/vm/swappiness。还有vm.dirty_background_ratio(不建议超过10)和vm.dirty_ratio(最好不超过20)两个参数的设置。
五、硬件
1)数据库操作无非是写磁盘I/O,影响这个的除了软件外,最多的时硬件,可以通过使用SSD或者PCIE-SSD高速磁盘设备,提升IOPS性能。
2)配置阵列卡,阵列卡配备cache模块,cache模块配置BBU模块提供持续电量,防止断电数据丢失。写模式为Write Back(WB),该策略是先写到cache中,再通过阵列卡刷回到磁盘,避免采用Write Through策略直接写盘……此处,我是小白,如需了解可自行查阅资料。
3)CPU采用最大的性能模式,performance per watt optimized,建议关闭C1E和Cstats这类节能选项。
4)内存方面选择最大性能模式maximum performance,尽量在BIOS中禁掉NUMA功能,将Node Interleaving设置为Enabled模式,让内存多在CPU节点之间进行循环利用。
六、业务