系列2-MYSQL通用调优策略-2
1、硬件层面
- BIOS-CPU电源管理-Performance Per Watt Optimized(DAPC),发挥cpu的最大性能。关闭C-states和C1E,开启Turbo Boots可以将CPU保持运行全核睿频
- BIOS-Memory Frequency(内存频率)-选择Maximum Performance(最佳性能)
- 在内存设置菜单中,启用Node Interleaving,避免NUMA问题
2、磁盘IO相关优化
- 使用SSD硬盘,至少获得数百倍甚至万倍的IOPS提升。
- 购置阵列卡建议配备CACHE及BBU模块,可明显提升IOPS
- 磁盘raid级别尽量选择raid10,而不是raid5
3、文件系统层面
- 使用deadline(时间截止算法)/noop(电梯调度算法,先来先处理)这两种I/O调度器,不要用cfq
- 使用xfs文件系统。此外,文件系统mout时,建议增加neatime,nodiratime,nobarrier,禁止记录文件或者目录最近一次访问的时间戳。
4、 Linux内核参数
- 修改内核参数/proc/sys/vm/swappiness,将vm.swappiness设置为5-10左右即可(内存使用到90%-95%时,才切换到swap分区)设置方法为:
echo 10 >/proc/sys/vm/swappiness - 调整vm.dirty_background_ratio、vm.dirty_ratio内核参数(将一定缓存的脏页异步地刷入外存)将vm.dirty_background_ratio设置为5-10,将vm.dirty_ratio设置为它的两倍左右,以确保能持续将脏数据刷新到磁盘,避免瞬间I/O写,产生严重等待。
cat /proc/sys/vm/dirty_ratio
cat /proc/sys/vm/dirty_background_ratio
5、MySQL参数优化
项目 | Value |
---|---|
innodb_buffer_pool_size | 设置数据和索引缓存的大小,根据使用场景和硬件设置越大比例越大 |
innodb_log_file_size | 配置redo log日志的大小,过大会增加回复时间,过小会覆盖数据,根据需要来 |
innodb_log_buffer_size | 尚未执行的事务分配的缓存,缓冲区大可以提高性能,但意外的故障可能导致数据丢失 |
innodb_flush_log_at_trx_commit | 控制事务提交方式 0:缓存每秒写入log file和file到磁盘,但每次提交事务不写; 1:在每次事务提交的时候将log buffer中的数据都会写入到log file,同时也会触发文件系统到磁盘的同步;2 每事务到log file,每秒到磁盘 |
skip_name_resolve | 设置为1,mysql server不会对客户端连接使用反向dns解析,避免timeout |
max_connections | mysql最大连接数,生产环境不超过2万 |
gtid_mode | 主从复制推荐开启on,GTID =uuid+TID,在哪个事务提交,提交了多少事务 |
log_bin | 开启二进制日志记录功能 |
tmp_table_size | 设置临时表的大小,这个值不是越大越好,也没有一个合适的值。一开始建议设置为64M,后面根据情况进行调整 |
max_allowed_packet | 此参数用来设置mysql server可接受的数据包的大小.,客户端和服务器均有自己的max_allowed_packet变量 |
关于最大连接数
1)在 /etc/security/limits.conf 底部增加2行
mysql hard nofile 65535
mysql soft nofile 65535
2)在/usr/lib/systemd/system/mysqld.service(视如何安装mysql所决定,用编译安装和yum安装会产生path路径不同。)文件最后添加:
LimitNOFILE=65535
LimitNPROC=65535
#systemctl daemon-reload
#systemctl restart mysqld.service