mysqlreport显示Com_中change_db占用比例高的问题的解决方法

首先说明一点,每天的访问量并不大每天才2W的访问量,按道理说,访问量再增加一倍这样的服务器也应该足以承受。可是我们的服务器为什么总是这样频频重启呢?经过mysqlreport显示

                        首先说明一点,每天的访问量并不大每天才2W的访问量,按道理说,访问量再增加一倍这样的服务器也应该足以承受。可是我们的服务器为什么总是这样频频重启呢?经过mysqlreport显示mysql运行的状态如下:MySQL 5.1.28-rc-log   uptime 0 0:4:48    Thu Apr 30 14:04:58 2009__ Key _________________________________________________________________Buffer used   7.74M of 384.00M %Used:  2.02 Current   52.89M      %Usage: 13.77Write hit    0.00%Read hit    91.97%__ Questions ___________________________________________________________Total     14.46k  50.2/s DMS      9.24k  32.1/s %Total: 63.90 QC Hits    3.66k  12.7/s      25.33 Com_     1.04k   3.6/s      7.19 COM_QUIT    517   1.8/s      3.58 -Unknown     1   0.0/s      0.01Slow 1 s      4   0.0/s      0.03 %DMS:  0.04 Log: OFFDMS       9.24k  32.1/s      63.90 SELECT    9.21k  32.0/s      63.75     99.75 UPDATE      23   0.1/s      0.16     0.25 REPLACE      0    0/s      0.00     0.00 DELETE      0    0/s      0.00     0.00 INSERT      0    0/s      0.00     0.00Com_      1.04k   50/s      44.4 set_option   523   1.8/s      3.62 change_db    510   50/s      44.4 show_proces    5   0.0/s      0.03__ SELECT and Sort _____________________________________________________Scan        49   0.2/s %SELECT:  0.53Range       16   0.1/s      0.17Full join      2   0.0/s      0.02Range check     0    0/s      0.00Full rng join    0    0/s      0.00Sort scan     55   0.2/sSort range    475   1.6/sSort mrg pass    0    0/s__ Query Cache _________________________________________________________Memory usage  12.02M of 150.00M %Used:  8.01Block Fragmnt  0.01%Hits      3.66k  12.7/sInserts     9.14k  31.8/sInsrt:Prune  9.14k:1  31.8/sHit:Insert   0.40:1__ Table Locks _________________________________________________________Waited       0    0/s %Total:  0.00Immediate   10.49k  36.4/s__ Tables ______________________________________________________________Open        58 of 512  %Cache: 11.33Opened       64   0.2/s__ Connections _________________________________________________________Max used      4 of 2000   %Max:  0.20Total       519   1.8/s__ Created Temp ________________________________________________________Disk table     1   0.0/sTable       184   0.6/s  Size: 256.0MFile        5   0.0/s__ Threads _____________________________________________________________Running       2 of  2Cached       2 of 150   %Hit: 99.23Created       4   0.0/sSlow        0    0/s__ Aborted _____________________________________________________________Clients       0    0/sConnects      0    0/s__ Bytes _______________________________________________________________Sent      20.36M  70.7k/sReceived    1.37M  4.7k/s__ InnoDB Buffer Pool __________________________________________________Usage     304.00k of  8.00M %Used:  3.71Read hit    84.42%Pages Free      493      %Total: 96.29 Data       19           3.71 %Drty:  0.00 Misc       0           0.00 Latched                 0.00Reads       77   0.3/s From file    12   0.0/s      15.58 Ahead Rnd     1   0.0/s Ahead Sql     0    0/sWrites       0    0/sFlushes       0    0/sWait Free      0    0/s__ InnoDB Lock _________________________________________________________Waits        0    0/sCurrent       0Time acquiring Total       0 ms Average      0 ms Max        0 ms__ InnoDB Data, Pages, Rows ____________________________________________Data Reads      25   0.1/s Writes      3   0.0/s fsync       3   0.0/s Pending  Reads      0  Writes     0  fsync      0Pages Created      0    0/s Read       19   0.1/s Written      0    0/sRows Deleted      0    0/s Inserted     0    0/s Read       0    0/s Updated      0    0/s大家可以看到在Com_中占的比例是相当大的,而一般情况下,这个值应该是3.0%左右。如果这个值过高的话,就说明,你的mysql处理请求中做了一些无谓的工作,占用了大量的系统资源。其中我们看到尤为change_db的占用率比较高。这个值高了,说明我们执行的user database;命令相当多。检查程序,原来我们在执行查询语句的时候应用了mysql_query_db("database","sql");这个语句在每次执行的时候都会自动调用use database;所以我们应该将mysql_db_query 更改成mysql_query();再观察mysql的运行状态,ok。一切正常了。