Centos 7 生产环境优化 Mysql 5.7

假设生产服务器内存8核16G,硬盘500G
建议调整下面几个关键参数以获得较好的性能

1.MySQL层相关优化

# 编辑my.cnf文件
[root@centosServer ~]# vi /etc/my.cnf

[mysqld]
# 1.默认采用InnoDB存储引擎
default-storage-engine=INNODB

# 2.设置大小写敏感
lower_case_table_names=1

# 3.sql_mode定义了支持的sql语法、数据校验等
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

# 4.调整innodb_buffer_pool_size大小,如果是单实例且绝大多数是InnoDB引擎表的话,可考虑设置为物理内存的50% ~ 70%左右;
innodb_buffer_pool_size=11G

# 5.使用独立表空间
innodb_file_per_table=1

# 6.如果要求数据不能丢失,为了数据安全,那么两个都设为1。
# 如果允许丢失一点数据,则可分别设为2和10。
innodb_flush_log_at_trx_commit=1
sync_binlog=1

# 7.设置innodb_log_file_size=256M,设置innodb_log_files_in_group=2,基本可满足90%以上的场景;
innodb_log_file_size=256M
innodb_log_files_in_group=2
# innodb_log_files_in_group=3

# 8.千万不要用默认的10M,否则在有高并发事务时,会受到不小的影响
#innodb_data_file_path=ibdata1:1G:autoextend
innodb_data_file_path=ibdata1:12m;ibdata2:1g:autoextend

# 9.记录时间超过0.05秒的查询语句,记录那些执行较慢的SQL,用于后续的分析排查
long_query_time=0.05

# 10.最大并行连接数,建议设置为10万以上
max_connections=50000
# 11.最大错误数,建议设置为10万以上
max_connect_errors=50000
# 12.这几个参数则可设为约10倍于max_connections的大小
open_files_limit=500000
innodb_open_files=500000
table_open_cache=500000
table_definition_cache=500000

# 13.设置临时表最大值,不要设置过大,否则容易导致OOM发生
tmp_table_size=128M
max_heap_table_size=128M
# 14.每个连接都会分配的一些排序、连接等缓冲,一般设置为 2MB 就足够了
sort_buffer_size=2M
join_buffer_size=2M
read_buffer_size=2M
read_rnd_buffer_size=2M

# 15.优化mysql的线程缓存,服务器线程缓存这个值表示可以重新利用保存在缓存中线程的数量
thread_cache_size=50

# 16.建议关闭query cache功能
query_cache_type=0

# 17.建议不再使用MyISAM引擎了,因此可以把key_buffer_size设置为32M左右
key_buffer_size=32M

# 重启服务
[root@centosServer ~]# systemctl restart mysqld

2.系统层相关优化

2.1其他内核参数优化

针对关键内核参数设定合适的值,目的是为了减少swap的倾向,并且让内存和磁盘I/O不会出现大幅波动,导致瞬间波峰负载。
(1)优化内核参数

# 查看默认值
[root@centosServer ~]# sysctl -a
# 修改linux内核,修改【/etc/sysctl.conf】文件
[root@centosServer ~]# vi /etc/sysctl.conf

# kernel.shmmax
# 建议设置的足够大,以便一个共享内存段容纳整个的Innodb缓存池的大小;
# 可取最大为物理内存-1byte,建议值大于物理内存的一半,一般取值大于innodb缓冲池的大小即可。
# 计算方式,内存一半大小*1024*1024*1024
kernel.shmmax=8589934592

vm.swappiness=5
vm.dirty_background_ratio=10
vm.dirty_ratio=20

# 保存,立即生效
[root@centosServer ~]# sysctl -p;

(2)优化网络配置

# 查看默认值
[root@centosServer ~]# sysctl -a
# 修改linux内核,修改【/etc/sysctl.conf】文件
[root@centosServer ~]# vi /etc/sysctl.conf

# 监听每个端口允许的最大的监听队列长度,这个值应该适当增大。
net.core.somaxconn=65536
# 当网络端口接收数据包的速率比内核处理数据速度快时,允许发送到对列中的最大包数
net.core.netdev_max_backlog=65536
# 还未获得链接的请求可保持在队列中的数量,当超过这个数目是,链接请求就可能被抛弃
net.ipv4.tcp_max_syn_backlog=65536
#tcp链接等待时间,调整这个参数目的是为了加快TCP链接回收的速度,默认60
net.ipv4.tcp_fin_timeout=30
#加快TCP链接回收的速度,默认0
net.ipv4.tcp_tw_reuse=1
#加快TCP链接回收的速度,默认0
net.ipv4.tcp_tw_recycle=1


# 保存,立即生效
[root@centosServer ~]# sysctl -p;

2.2文件系统层优化

1、使用deadline/noop这两种I/O调度器,千万别用cfq(它不适合跑DB类服务);

2、使用xfs文件系统,千万别用ext3;ext4勉强可用,但业务量很大的话,则一定要用xfs;

3、文件系统mount参数中增加:noatime, nodiratime, nobarrier几个选项(nobarrier是xfs文件系统特有的);

3.硬件层相关优化

3.1CPU相关

1、选择Performance Per Watt Optimized(DAPC)模式,发挥CPU最大性能,跑DB这种通常需要高运算量的服务就不要考虑节电了;

2、关闭C1E和C States等选项,目的也是为了提升CPU效率;

3、Memory Frequency(内存频率)选择Maximum Performance(最佳性能);

4、内存设置菜单中,启用Node Interleaving,避免NUMA问题;

3.2磁盘I/O相关

1、使用SSD或者PCIe SSD设备,至少获得数百倍甚至万倍的IOPS提升;

2、购置阵列卡同时配备CACHE及BBU模块,可明显提升IOPS(主要是指机械盘,SSD或PCIe SSD除外。同时需要定期检查CACHE及BBU模块的健康状况,确保意外时不至于丢失数据);

3、有阵列卡时,设置阵列写策略为WB,甚至FORCE WB(若有双电保护,或对数据安全性要求不是特别高的话),严禁使用WT策略。并且闭阵列预读策略,基本上是鸡肋,用处不大;

4、尽可能选用RAID-10,而非RAID-5;

5、使用机械盘的话,尽可能选择高转速的,例如选用15KRPM,而不是7.2KRPM的盘,不差几个钱的;

4.参考文章

https://mp.weixin.qq.com/s/lzNeXsR6Pg2tpibVHOOOig
https://www.toutiao.com/article/6715001214292984331

内核配置:https://blog.csdn.net/weixin_39936134/article/details/113197077

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值