mysql优化(2) 观察mysql进程状态
环境准备,安装sysbench
wget http://nchc.dl.sourceforge.net/project/sysbench/sysbench/0.4.12/sysbench-0.4.12.tar.gz
cd sysbench-0.4.12-1.1
sh autogen.sh
./configure
make && make install
创建tjproce.sh
cd /usr/local/nginx/html/bench1
vim tjproce.sh
内容如下
#!/bin/bash while true do mysql -uroot -e 'show processlist \G'|grep State|uniq|sort -rn >> proce.txt usleep 100000 //每秒执行10次 done
用sysbench进行压力测试
cd /usr/local/src/sysbench-0.4.12-1.1/sysbench/bin/ ./sysbench --test=tests/db/oltp.lua --mysql-table-engine=innodb --mysql- user=root --db-driver=mysql --mysql-db=test --oltp-table-name=user --oltp- table-size=3000 --mysql-socket=/var/lib/mysql/mysql.sock prepare ./sysbench --test=tests/db/oltp.lua --mysql-table-engine=innodb --mysql- user=root --db-driver=mysql --mysql-db=test --oltp-table-name=user --oltp- table-size=3000 --mysql-socket=/var/lib/mysql/mysql.sock run //指定test库
//--test=tests/db/oltp.lua 对于某些版本可能为 --test=oltp
然后启动tjproce.sh文件
当sysbench测试结束后观察proce.txt
more proce.txt |sort|uniq -c|sort -rn
以下为状态说明
converting HEAP to MyISAM 查询结果太大时,把结果放在磁盘 //比较浪费资源 create tmp table 创建临时表(如group时储存中间结果) Copying to tmp table on disk 把内存临时表复制到磁盘 locked 被其他查询锁住 logging slow query 记录慢查询 注:把临时表内存变小,重现前
打开mysql
show variables like '%size%'; set globle tmp_table_size=1024; set session tmp_table_size=1024; //把mysql内存调为1024字节 set profiling=1; //打开状态观察 select * from sbtest1; //随便执行sql语句 show profiles; //这时会出现一张状态表 show profile for query 1; //后面的数字是根据上一张状态表的ID set profiling=0; //关闭状态观察