mysql调优
clint---> httpd---> php --->mysql
解压缩: tar fzxv mysqlreport-3.5.tgz (汇报工具,通过这个工具可以观察到一些数据)
cd mysqlreport-3.5
cp mysqlreport /usr/bin
mysqlreport --user root --password 123 (有用户名和密码的前提下)
#yum serach DBI -y
#yum install perl-DBD-MySQL -y
mysqlreport --outfile /tmp/mysql 写入到文件中
vim /tmp/mysql
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
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Qusetion
Total 分类
DMS 由增、删、改、查、替换
Slow 10 s 当你的工作在10S内没有完成,即作慢查询
vim /etc/my.cnf
log-slow-queries=/tmp/slow.log 慢速日志存放的位置
long-query-time=20 超出多长时间算作慢速查询
注:如果没有必要去定位slow,就不需要开启,因为开启会增加IO
Qc Hits 查询缓存
调整Query Cache
show variables like '%query%';
set global query_cache_size=8384512;
mysqlreport
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
SELECT and Sort
Sort 用来作排序的内存多大,他对应的是每一个线程
mysql是以线程方式工作的,这个数值设置大了,可以增加排序的效率
show variables like '%sort%';
set global sort_buffer_size='2097144';
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Table locks
Waited 这个数值越小越好
show full processlist;
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Tables 增快表访问的速度
open 当前打开了多少表
opend 一共打开了多少表
show variables like '%table%';
table_cache
set global table_cache=128; 把表的文件描述符写入到内存中了
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Connections
Max used 最大连接数
show variables like '%max%';
set global max_connections=100;
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Created Temp 创建临时表(排序、索引)
show variables like '%tmp%';
tmpdir /tmp/ 临时表创建的位置
tmp_table_size 如果创建临时表的大小超过32M将会把数据写入到磁盘中
Disk table 值变大的时候
解决方法:1、增大临时表的大小 2、优化查询语句
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Threads 线程缓存,减少从需要到产生的时间
show variables like '%thread%';
thread_cache_size
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Bytes 和网络相关的
Sent 发送的流量
Recevied 接收的流量
单位是:B
InnoDB引擎
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
InnoDB Buffer Pool
Usage 越大越好
show variables like '%innodb%';
set global innodb_buffer_pool_size=8388608;
注:建议大小设置为整个内存的80%
Pages 单位:16K
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
InnoDB与网络
back_log 请求队列中能够排队的大小,如果增大并发数,则这个数必须要调大
tcp.max_syn_backlog
somaxconn
一次消息传输量的最大值
show variables like '%max_allowed_packet%';
default 1M
show variables like '%timeout%';
connect_timeout 连线时的超时时间
interactive_timeout 处于回会话空闲的timeout,连接上来什么都不执行的超时时间
wait_timeout
net_read_timeout
net_write_timeout 处于数据交互阶段超时时间
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Innodb与IO相关的
show variables like '%innodb_flush_log%';
innodb_flush_log_at_trx_commit
0 最不安全,但是效率是最高,每隔一秒钟会把数据写入到硬盘上,如果断电或者数据库服务坏了,数据就丢失了
1 最安全,数据会时时的写到硬盘上
2 先写到操作系统的内存中,再写入到磁盘中,mysql进程死了,数据不丢,但是断电了,数据就丢失了
绕过操作系统的缓存,直接将数据写入到磁盘中,好处是节省了内存
vim /etc/my.cnf
innodb_flush_medthod=O_DIRECT
/etc/init.d/mysqld restart
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
InnoDB与cpu
主频高
核心
taskset 绑定
select table_schema as 'DBname', sum(data_length + index_length) / 1024/ 1024 as 'DB size(MB)', sum(data_free)
/1024/1024 as 'free space (MB)' from information_schema.tables group by table_schema;
mysql vm
ey_buffer (myisam)
query_cache_size
sort_buffer_size
table_cache
tmp_table_size
thread_cache_size
innodb_buffer_pool_size (innodb)
mysql net
back_log
max_connections
/proc/sys/net/core/somaxconn
/proc/sys/net/ipv4/tcp_max_syn_backlog
connect_timeout 连线时的超时时间
interactive_timeout 处于回会话空闲的timeout,连接上来什么都不执行的超时时间
wait_timeout
net_read_timeout
net_write_timeout 处于数据交互阶段超时时间
max_allowed_packet (1M)
mysql io
innodb_flush_log_at_trx_commit
0 最不安全,但是效率是最高,每隔一秒钟会把数据写入到硬盘上,如果断电或者数据库服务坏了,数据就丢失了
1 最安全,数据会时时的写到硬盘上
2 先写到操作系统的内存中,再写入到磁盘中,mysql进程死了,数据不丢,但是断电了,数据就丢失了
innodb_flush_medthod=O_DIRECT
mysql cpu