1、操作系统层面的优化(以centos为例)
系统配置文件/etc/sysctl.conf:
net.core.somaxconn=65535 #端口监听队列最大长度
net.core.netdev_max_backlog=65535
net.ipv4.tcp_max_syn_backlog=65535
net.ipv4.tcp_fin_timeout=10 #加快tcp连接回收的速度
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_tw_recycle=1
net.core.wmem_default=87380 #tcp缓冲区大小
net.core.wmem_max=16777216
net.core.rmem_default=87380
net.core.rmem_max=16777216
net.ipv4.tcp_keepalive_time=120#减少失效连接占用tcp资源
net.ipv4.tcp_keepalive_intvl=30
net.ipv4.tcp_keepalive_probes=3
kernel.shmmax=4294967295 #内存相关参数
vm.swappiness=0 # 除非内存交换区完全满了,否则不使用交换区
系统配置文件/etc/security/limit.conf(需要重启才可生效):
* soft nofile 65535 #控制文件打开数量限制
* hard nofile 65535
系统配置文件/sys/block/devname/queue/scheduler
echo deadline > /sys/block/sda/queue/scheduler #磁盘调度策略
2、MySQL服务器层面的优化
a、配置文件路径
首先获取MySQL配置文件的路径:
mysqld --help --verbose | grep -A 1 "Default options"
返回MySQL读取配置文件的顺序如下:
/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf
b、配置参数作用域
全局参数
set global 参数名=参数值;
set @@global.参数名:=参数值;
会话参数
set [session] 参数名=参数值;
set @@session.参数名:=参数值;
c、内存配置参数
每个连接(线程)的缓冲区
sort_buffer_size #排序缓冲区,排序时会立即分配
join_buffer_size #连接缓冲区,为每一个连接配分
read_buffer_size #myisam使用
read_rnd_buffer_size #索引缓冲区
各种缓冲池内存
Innodb_buffer_pool_size #Innodb缓冲池, 总内存-每个线程需要内存*连接数-系统保留内存
key_buffer_size #myisam使用,用于缓存索引
select sum(index_length) from information schema.tables where engine='myisam' #查看myisam表索引的大小
4、I/O相关配置
Innodb:
Innodb_log_file_size #单个事务日志的大小
Innodb_log_files_in_group #事务日志文件的个数,一般不用配置
Innodb_log_buffer_size #事务日志缓冲区
Innodb_flush_log_at_trx_commit # 0:每秒进行一次log写入cache,并flush 到磁盘;1:每次事务提交时log写入cache,并flush到磁盘;2(建议):每次事务提交时log写入cache,每秒执行一次flush到磁盘
Innodb_flush_method=O_DIRECT #Innodb与文件系统交互的方式,通知OS,不要缓存和预读,关闭操作系统缓存,避免二次缓存
Innodb_file_per_table=1 #Innodb为每个表建立单独的表空间
Innodb_doublewrite=1 #开启双写缓存,避免页(16K)没有写完整导致的数据损坏
MyISAM:
delay_key_write #OFF:每次写操作后刷新键缓冲中的脏块到磁盘;ON:只有指定了delay_key_write选项的表使用延迟刷新;ALL:对所有MyISAM使用延迟键写入
5、安全相关配置
expire_logs_days #指定自动清理binlog的天数
max_allowed_packet #控制MySQL可以接收的包的大小,主从复制应该一样
skip_name_resolve #禁用DNS查找
sysdate_is_now #确保sysdate()返回确定性日期
read_only #禁止非super权限的用户写权限
skip_slave_start #禁止slave自动恢复
sql_mode #设置MySQL所使用的SQL模式
6、其他常用配置参数
sync_binlog #控制MySQL如何向磁盘刷新binlog
tmp_table_size 和 max_heap_table_size #控制内存临时表大小
max_connections #控制允许的最大连接数,一般2000
网友评论