首先说明一点,每天的访问量并不大每天才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.77
- Write 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.01
- Slow 1 s 4 0.0/s 0.03 %DMS: 0.04 Log: OFF
- DMS 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.00
- Com_ 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.53
- Range 16 0.1/s 0.17
- Full join 2 0.0/s 0.02
- Range check 0 0/s 0.00
- Full rng join 0 0/s 0.00
- Sort scan 55 0.2/s
- Sort range 475 1.6/s
- Sort mrg pass 0 0/s
- __ Query Cache _________________________________________________________
- Memory usage 12.02M of 150.00M %Used: 8.01
- Block Fragmnt 0.01%
- Hits 3.66k 12.7/s
- Inserts 9.14k 31.8/s
- Insrt:Prune 9.14k:1 31.8/s
- Hit:Insert 0.40:1
- __ Table Locks _________________________________________________________
- Waited 0 0/s %Total: 0.00
- Immediate 10.49k 36.4/s
- __ Tables ______________________________________________________________
- Open 58 of 512 %Cache: 11.33
- Opened 64 0.2/s
- __ Connections _________________________________________________________
- Max used 4 of 2000 %Max: 0.20
- Total 519 1.8/s
- __ Created Temp ________________________________________________________
- Disk table 1 0.0/s
- Table 184 0.6/s Size: 256.0M
- File 5 0.0/s
- __ Threads _____________________________________________________________
- Running 2 of 2
- Cached 2 of 150 %Hit: 99.23
- Created 4 0.0/s
- Slow 0 0/s
- __ Aborted _____________________________________________________________
- Clients 0 0/s
- Connects 0 0/s
- __ Bytes _______________________________________________________________
- Sent 20.36M 70.7k/s
- Received 1.37M 4.7k/s
- __ InnoDB Buffer Pool __________________________________________________
- Usage 304.00k of 8.00M %Used: 3.71
- Read hit 84.42%
- Pages
- Free 493 %Total: 96.29
- Data 19 3.71 %Drty: 0.00
- Misc 0 0.00
- Latched 0.00
- Reads 77 0.3/s
- From file 12 0.0/s 15.58
- Ahead Rnd 1 0.0/s
- Ahead Sql 0 0/s
- Writes 0 0/s
- Flushes 0 0/s
- Wait Free 0 0/s
- __ InnoDB Lock _________________________________________________________
- Waits 0 0/s
- Current 0
- Time 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 0
- Pages
- Created 0 0/s
- Read 19 0.1/s
- Written 0 0/s
- Rows
- 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。一切正常了。