У меня есть один выделенный сервер на 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% ЦП, потому что он уже отправляет данные так же быстро, как и жестяная банка.