Назад | Перейти на главную страницу

Низкое использование ЦП в MySQL

У меня есть один выделенный сервер на Amazon EC2, на котором запущен mysql5 в пользовательском ami, основанном на альтернативном debian lenny, в небольшом экземпляре.

Малый экземпляр (по умолчанию) * 1,7 ГБ памяти 1 вычислительный блок EC2 (1 виртуальное ядро ​​с 1 вычислительным блоком EC2) Хранилище экземпляра 160 ГБ (150 ГБ плюс 10 ГБ корневой раздел) 32-разрядная платформа Производительность ввода-вывода: средняя

Проблема в том, что использование ЦП MySQL никогда не превышает 45%, при этом запрос должен использовать весь доступный ЦП и замедляет выполнение запросов.

Один из распространенных запросов - это выбор типа "% 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 из командной строки. Размер базы данных составляет 300 МБ, поэтому я думаю, что вся база данных буферизуется, потому что использование памяти mysql составляет около 780 МБ.

Я нашел проблему.

ЦП - это всего лишь 1 виртуальная единица, которая соответствует почти 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 зарезервирован гипервизором для сервера или для обслуживания других виртуальных ЦП.

Итак, максимум показывают 40%.

Иногда есть вещи, которые мешают процессу полностью загрузить процессор. В вашем примере, поскольку это довольно простой запрос с потенциально большим количеством данных, узким местом может быть пропускная способность при отправке результатов обратно запрашивающему серверу - MySQL может никогда не достичь 100% ЦП, потому что он уже отправляет данные так же быстро, как и жестяная банка.