我在Amazon EC2上有一个专用的服务器,在一个基于debian lenny的自定义ami中运行mysql5。
小型实例(默认)* 1.7 GB内存1个EC2计算单元(1个虚拟核心,1个EC2计算单元)160 GB实例存储(150 GB加10 GB根分区)32位平台I / O性能:中等
问题是,MySQL的CPU使用率从来没有超过45%,查询应该使用所有可变的CPU,并使查询变慢。
一个常见的查询是一个select,像“%word%超过2kk行。
在这台机器上运行的另一个进程是hyperic-hq-agent。 任何想法增加
my.cnf中
[client] port = 3306 socket = /var/run/mysqld/mysqld.sock [mysqld_safe] socket = /var/run/mysqld/mysqld.sock nice = 0 [mysqld] user = mysql pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock port = 3306 basedir = /usr datadir = /var/lib/mysql tmpdir = /tmp language = /usr/share/mysql/english skip-external-locking key_buffer = 16M max_allowed_packet = 16M thread_stack = 128K thread_cache_size = 8 myisam-recover = BACKUP query_cache_limit = 1M query_cache_size = 128M innodb_buffer_pool_size = 1024M innodb_log_buffer_size = 4M innodb_flush_log_at_trx_commit = 2 innodb_thread_concurrency = 0 innodb_flush_method = O_DIRECT innodb_file_per_table = 1 transaction-isolation = READ-COMMITTED [mysqldump] quick quote-names max_allowed_packet = 16M [isamchk] key_buffer = 16M
查询是在localhost中用命令行mysql client完成的。 数据库的大小是300 Mb,所以我认为所有的数据库都被缓冲了,因为mysql的内存使用量大约是780 MB。
我发现了这个问题。
CPU,就是1个虚拟单元,相当于当前CPU的40%。
萨尔统计显示这一点。
01:36:15 PM CPU %user %nice %system %iowait %steal %idle 01:36:16 PM all 43.14 0.00 0.00 0.00 56.86 0.00 01:36:17 PM all 42.16 0.00 0.00 0.00 57.84 0.00 01:36:18 PM all 42.45 0.00 0.00 0.00 57.55 0.00 01:36:19 PM all 25.00 0.00 0.00 0.00 29.00 46.00 01:36:20 PM all 0.00 0.00 0.00 0.00 0.00 100.00 01:36:21 PM all 0.00 0.00 0.00 0.00 0.00 100.00 01:36:22 PM all 0.00 0.00 0.00 0.00 0.00 100.00
pipe理程序为服务器或服务于其他虚拟CPU保留%steal。
所以最高可以显示40%。
有时候有些东西阻止一个进程能够达到完整的CPU。 在你的例子中,因为这是一个相当简单的查询,可能有大量的数据,瓶颈可能是将结果发送回请求服务器的带宽–MySQL可能永远达不到100%的CPU,因为它已经以最快的速度发送数据了能够。