天天看點

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; //關閉狀态觀察
      

  

繼續閱讀