MySQL 中的 CPU 使用率低

MySQL 中的 CPU 使用率低

我在 Amazon EC2 上有一个专用服务器,在基于 alestic 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,这导致查询速度变慢。

一个常见的查询是选择“%word%超过2kk行”。

这台机器上运行的另一个进程是 hyperic-hq-agent。有没有办法增加

我的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

答案1

查询是在 localhost 中使用命令行 mysql 客户端完成的。数据库大小为 300 Mb,所以我认为所有数据库都已缓​​冲,因为 mysql 内存使用量约为 780 mb。

我发现了问题。

CPU 仅仅是 1 个虚拟单元,相当于当前 CPU 的近 40%。

sar 统计数据显示了这一点。

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

%steal 由虚拟机管理程序保留给服务器或为其他虚拟 CPU 提供服务。

因此,最大值显示为 40%。

答案2

有时,有些因素会阻止进程达到满负荷 CPU。在您的示例中,由于这是一个相当简单的查询,可能包含大量数据,因此瓶颈可能是将结果发送回请求服务器的带宽 - MySQL 可能永远不会达到 100% CPU,因为它已经以最快的速度发送数据。

相关内容