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

  • A+
所属分类:数据库技术

最近公司的mysql服务器经常出现阻塞状态。动不动就重启,给用户访问带来了相当的不便。
首先说明一点,每天的访问量并不大每天才2W的访问量,按道理说,访问量再增加一倍这样的服务器也应该足以承受。可是我们的服务器为什么总是这样频频重启呢?经过mysqlreport显示mysql运行的状态如下:

  1. MySQL 5.1.28-rc-log   uptime 0 0:4:48    Thu Apr 30 14:04:58 2009
  2. __ Key _________________________________________________________________
  3. Buffer used   7.74M of 384.00M %Used:  2.02
  4.  Current   52.89M      %Usage: 13.77
  5. Write hit    0.00%
  6. Read hit    91.97%
  7. __ Questions ___________________________________________________________
  8. Total     14.46k  50.2/s
  9.  DMS      9.24k  32.1/s %Total: 63.90
  10.  QC Hits    3.66k  12.7/s      25.33
  11.  Com_     1.04k   3.6/s      7.19
  12.  COM_QUIT    517   1.8/s      3.58
  13.  -Unknown     1   0.0/s      0.01
  14. Slow 1 s      4   0.0/s      0.03 %DMS:  0.04 Log: OFF
  15. DMS       9.24k  32.1/s      63.90
  16.  SELECT    9.21k  32.0/s      63.75     99.75
  17.  UPDATE      23   0.1/s      0.16     0.25
  18.  REPLACE      0    0/s      0.00     0.00
  19.  DELETE      0    0/s      0.00     0.00
  20.  INSERT      0    0/s      0.00     0.00
  21. Com_      1.04k   50/s      44.4
  22.  set_option   523   1.8/s      3.62
  23.  change_db    510   50/s      44.4
  24.  show_proces    5   0.0/s      0.03
  25. __ SELECT and Sort _____________________________________________________
  26. Scan        49   0.2/s %SELECT:  0.53
  27. Range       16   0.1/s      0.17
  28. Full join      2   0.0/s      0.02
  29. Range check     0    0/s      0.00
  30. Full rng join    0    0/s      0.00
  31. Sort scan     55   0.2/s
  32. Sort range    475   1.6/s
  33. Sort mrg pass    0    0/s
  34. __ Query Cache _________________________________________________________
  35. Memory usage  12.02M of 150.00M %Used:  8.01
  36. Block Fragmnt  0.01%
  37. Hits      3.66k  12.7/s
  38. Inserts     9.14k  31.8/s
  39. Insrt:Prune  9.14k:1  31.8/s
  40. Hit:Insert   0.40:1
  41. __ Table Locks _________________________________________________________
  42. Waited       0    0/s %Total:  0.00
  43. Immediate   10.49k  36.4/s
  44. __ Tables ______________________________________________________________
  45. Open        58 of 512  %Cache: 11.33
  46. Opened       64   0.2/s
  47. __ Connections _________________________________________________________
  48. Max used      4 of 2000   %Max:  0.20
  49. Total       519   1.8/s
  50. __ Created Temp ________________________________________________________
  51. Disk table     1   0.0/s
  52. Table       184   0.6/s  Size: 256.0M
  53. File        5   0.0/s
  54. __ Threads _____________________________________________________________
  55. Running       2 of  2
  56. Cached       2 of 150   %Hit: 99.23
  57. Created       4   0.0/s
  58. Slow        0    0/s
  59. __ Aborted _____________________________________________________________
  60. Clients       0    0/s
  61. Connects      0    0/s
  62. __ Bytes _______________________________________________________________
  63. Sent      20.36M  70.7k/s
  64. Received    1.37M  4.7k/s
  65. __ InnoDB Buffer Pool __________________________________________________
  66. Usage     304.00k of  8.00M %Used:  3.71
  67. Read hit    84.42%
  68. Pages
  69.  Free      493      %Total: 96.29
  70.  Data       19           3.71 %Drty:  0.00
  71.  Misc       0           0.00
  72.  Latched                 0.00
  73. Reads       77   0.3/s
  74.  From file    12   0.0/s      15.58
  75.  Ahead Rnd     1   0.0/s
  76.  Ahead Sql     0    0/s
  77. Writes       0    0/s
  78. Flushes       0    0/s
  79. Wait Free      0    0/s
  80. __ InnoDB Lock _________________________________________________________
  81. Waits        0    0/s
  82. Current       0
  83. Time acquiring
  84.  Total       0 ms
  85.  Average      0 ms
  86.  Max        0 ms
  87. __ InnoDB Data, Pages, Rows ____________________________________________
  88. Data
  89.  Reads      25   0.1/s
  90.  Writes      3   0.0/s
  91.  fsync       3   0.0/s
  92.  Pending
  93.   Reads      0
  94.   Writes     0
  95.   fsync      0
  96. Pages
  97.  Created      0    0/s
  98.  Read       19   0.1/s
  99.  Written      0    0/s
  100. Rows
  101.  Deleted      0    0/s
  102.  Inserted     0    0/s
  103.  Read       0    0/s
  104.  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。一切正常了。