操作系统配置优化

数据库是基于操作系统的,目前大多数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.数据库随机读写比率很高。