mysql调优
慢查询:认为定义的,比如超过了1s的查询,把这个sql语句记录到一个日志文件里,会增加io,debug时候用,一般别开
定义方法:
vim /etc/my.cnf
log-slow-queries=/tmp/slow.log 慢速日志存放的位置
long-query-time=20 超出多长时间算作慢速查询
从四个部分考虑
1网络
操作系统上优化:
tcp.max_syn_backlog 这个是处于syn_rec状态
/proc/sys/net/core/somaxconn
还有配置文件里的
connect_timeout 连线超时时间
interactive_timeout 连接后什么都不执行的超时时间
2内存
myisam引擎必调
Key---->Mysam引擎的索引
Read hit ---->命中率(越高代表着效率很高)
调整key_buffer
方法1:
show variables like '%key%';
set global key_buffer_size=16777216;
方法2:必须要重新启动服务
vim /etc/my.cnf
key_buffer_size=16777216
innodb引擎必调
InnoDB Buffer Pool 巨逼重要 工作中必须调,就是把 ibdata1这个文件缓存到这里
Usage 越大越好
show variables like '%innodb%';
set global innodb_buffer_pool_size='8388608';
注:建议大小设置为整个内存的80%
Pages 单位:16
Tables 增快表访问的速度
set global table_cache='128'; 把表的文件描述符写入到内存中了,下次打开的话可以省略打开文件的过程了
Created Temp 创建临时表(排序、索引)利用内存来进行这些动作,速度会快,但是消耗内存
tmpdir /tmp/ 临时表创建的位置
tmp_table_size 如果创建临时表的大小超过32M将会把数据写入到磁盘中
Threads 线程缓存,增加查找速度
show variables like '%thread%';
set global thread_cache_size='99999999';
Connections
Max used 最大连接数 针对机器来说,性能越好可以处理的连接数越大。
show variables like '%max%';
set global max_connections='100';
3io
show variables like '%innodb_flush_log%';
innodb_flush_log_trx_commit
0 最不安全,但是效率是最高,每隔一秒钟会把数据写入到硬盘上,如果断电或者数据库服务坏了,数据就丢失了
1 最安全,数据会时时的写到硬盘上
2 先写到操作系统的内存中,再写入到磁盘中,mysql进程死了,数据不丢,但是断电了,数据就丢失了(建议)
绕过操作系统的缓存,直接将数据写入到磁盘中,好处是节省了内存
vim /etc/my.cnf
innodb_flush_medthod=O_DIRECT
/etc/init.d/mysqld restart
操作系统上考虑:
不需要 noatime 增加文件描述符 还有
4cpu
主频高
核心
grub 里分离一下
taskset 绑定
mysql 使用的是线程,进程只在一个核上