操作系统配置优化
- 数据库是基于操作系统的,目前大多数Mysql都是安装在linux系统之上,所以对于操作系统的一些配置参数也会影响到Mysql的性能,下面就列一些常用的系统配置:
网络方面的配置,要修改/etc/sysctl.conf文件:
#增加tcp支持的队列数。
net.ipv4.tcp_max_syn_backlog = 65535
#减少断开链接时,资源回收
net.ipv4.tcp_max_tw_bucketx = 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可以通过启动时指定配置参数和使用配置文件两种方法进行配置。
下面例举一些比较常用或者重要的参数:
innodb_buffer_pool_size
这个参数决定了innodb缓冲池的大小,默认大小为128M。最大值取决于CPU的架构。大的缓冲池可以减小多次磁盘I/O访问相同的表数据。在专用数据库服务器上,可以将缓冲池大小设置为服务器物理内存的80%。
innodb_buffer_pool_instances
可以开启多个内存缓冲池,把需要缓冲的数据hash到不同的缓冲池中,这样可以并行的内存读写。
innodb_log_buffer_size
决定 innodb 重做日志缓存池的大小,默认是 8MB。对于可能产生大量更新记录的大事务,增加 innodb_log_buffer_size 的大小,可以避免 innodb 在事务提交前就执行不必要的日志写入磁盘操作。
innodb_flush_log_at_trx_commit
这个参数决定了数据库什么时候将变更刷新到磁盘,默认值为1,可选值0/1/2
0:log buffer将每秒一次地写入log file中,并且log file的flush(刷到磁盘)操作同时进行。该模式下在事务提交的时候,不会主动触发写入磁盘的操作。
1:每次事务提交时MySQL都会把log buffer的数据写入log file,并且flush(刷到磁盘)中去,该模式为系统默认。
2:每次事务提交时MySQL都会把log buffer的数据写入log file,但是flush(刷到磁盘)操作并不会同时进行。该模式下,MySQL会每秒执行一次 flush(刷到磁盘)操作。
一般设置为2,若对数据安全性要求较高,可设置为1。
innodb_read_io_threads
默认值为4,设置读取的进程数
innodb_write_io_threads
默认值为4,设置写入的进程数
可以根据CPU的核心数和读写操作的比例设置读写的进程数,比如我们是8核CPU则可以都设置为:
innodb_read_io_threads = 8
innodb_write_io_threads = 8
如果数据库的读操作比写操作多,那么可以设置:
innodb_read_io_threads = 10
innodb_write_io_threads = 6
innodb_file_per_table
默认为OFF,表的数据都是保存在innodb系统表空间中,设置为ON可以把每个表的数据单独保存在独立的表空间。单独保存有两方面的优势一个是方便管理,二个是提升性能。
innodb_stats_on_metadata
决定了Mysql在什么情况下刷新innodb表的统计信息。默认是关闭了这个会对INFORMATION_SCHEMA中的一些表进行查询操作,以方便索引统计信息,如果读要求高的建议设置为OFF。