Mysql系统优化
操作系统配置优化
数据库是基于操作系统的,目前大多数Mysql都是安装在linux系统上,所以对于操作系统的一些参数配置也会影响到Mysql的性能,下面就列出一些常用的系统配置。
网络方面的配置,要修改/etc/sysctl.conf文件:
//增加tcp支持的队列数
net.ipv4.tcp_max_syn_backlog=65535
//减少断开连接时,资源回收
net.ipv4.tcp_max_tw_buckets=8000
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_tw_recycle=1
net.ipv4.tcp_fin_timeout=10
打开文件数的限制,可以使用ulimit -a查看目录的各位限制,可以修改/etc/security/limits.conf文件,增加以下内容以修改打开文件数的限制:
*soft nofile 65535
*hard nofile 65535
除此之外最好在Mysql服务器上关闭iptables,selinux等防火墙软件(使用硬件防火墙,减少防火墙的资源损耗)。
Mysql配置优化
Mysql可以通过启动时指定配置参数和使用配置文件两种方法进行配置,在大多数情况下配置文件位于/etc/my.cnf或是/etc/Mysql/my.conf。Mysql查找配置文件的顺序可以通过以下命令获得:
1 | /usr/sbin/mysqld --verbose --help | grep -A 1 'Default option' |
如果存在多个配置文件,后面加载的会覆盖前面的。
参数:
innodb_buffer_pool_size,用于配置innodb的缓冲池,如果数据库中只有innodb表,则推荐配置为总内存的75%。
innodb_buffer_poll_instances,可以控制缓冲池的个数,默认情况下只有一个缓冲池。
innodb_log_buffer_size,log缓冲大小,由于日志最长每秒钟就会刷新所以一般不用太大。
innodb_flush_log_at_trx_commit,对innodb的IO效率影响很大。默认值为1,可以取0,1,2三个值,一般建议设置为2,但如果对数据库安全性要求比较高泽使用默认值1。
innodb_read_io_threads,innodb_write_io_threads,决定了innodb读写的IO进程数,默认为4。如果数据读多写少或读少写多,可以适当的调节值大小。
innodb_file_per_table,控制innodb每一个表使用独立的表空间,默认为off,也就是所有表都会建立在共享表空间中。
第三方工具
硬件优化
选择单核更快的cpu还是选择核心数多的cpu?
1.Mysql有一些工作职能使用到单核cpu(replicate,sql等)
2.Mysql对cpu核心数的支持并不是越多越快(建议不要超过32核)
所以单核更快的cpu较为推荐。
使用RAID:
RAID0:也称为条带,就是把多个磁盘链接成一个磁盘使用,这种级别IO最好。但是如果条带中的某个磁盘损坏,会导致所有的数据都会丢失。数据安全性不够好。
RAID1:也称为镜像,要求至少有两个磁盘,每组磁盘存储的数据相同。安全性较好,但是IO性能不如RAID0。
RAID5:
RAID1+0:就是结合了RAID0和RAID1的优缺点。一般建议使用这个级别。
SNA和NAT是否适用数据库?
1.常用与高可用的解决方案。
2.顺序读写效率很高,但是随即读写不如人意。
3.数据库随机读写比率很高。