Я выполняю MySQL 5.5 с таблицами InnoDB. В секунду существует приблизительно 200 запросов. Существуют также таблицы с 500 000 или больше строк. Но у меня есть большие проблемы с загрузкой сервера и io/wait особенно с jdb2.
jdb2/md2-8 берет 99%-й IO/wait, см. выходное изображение iotop: Iotop производится
Спецификации поля: Xeon 1246 v3, 32 ГБ RAM, 2x 240 Intel SSD RAID 1
Я не знаю, есть ли у меня что-то не так в моей конфигурации, или это - проблема, связанная с RAID. Какие-либо подсказки?
Мой mysql my.cfg:
innodb_file_per_table = 1
join_buffer_size = 1M
open_files_limit = 10000
myisam_use_mmap = 1
query_cache_type = 1
table_open_cache = 2000
concurrent_insert = 2
max_connections = 3000
query_cache_size = 16M
key_buffer_size = 16M
read_buffer_size = 8M
query_cache_limit = 4M
query_cache_min_res_unit = 1K
tmp_table_size = 64M
thread_cache_size = 1500
sort_buffer_size = 2M
max_heap_table_size = 64M
innodb_buffer_pool_size = 5000M
read_rnd_buffer_size = 128M
thread_concurrency = 8
thread_stack = 1M
innodb_log_buffer_size = 2M
Спасибо.
Две вещи, которые следует учитывать:
1) Есть ли у вас подходящие индексы для ваших запросов?
2) Можете ли вы добавить ОЗУ на свой сервер?
Обращаясь к пункту 1, вы значительно сократите количество полных сканирований таблиц, необходимых для выполнения ваших запросов. Однако вам нужно потратить немало времени, чтобы понять, какие типы запросов вызывают наибольшую нагрузку ввода-вывода.
Обращаясь к пункту 2, вы разрешите больший объем вашей базы данных кэшироваться в ОЗУ, что одновременно ускорит запросы и снизит объем операций ввода-вывода.
jbd2 - это процесс ядра, используемый для синхронизации журнала файловой системы с диском. Это означает, что в настоящий момент ваша установка MySQL ограничена записью.
Высокая загрузка jdb2 при таком малом количестве запросов (200 в секунду) выглядит довольно странно, особенно с быстрым SSD. Вы используете карту RAID без кеширования? Это может отключить внутренние кеши вашего SSD, что приведет к ужасной производительности. Если это так, вы можете попробовать:
innodb_flush_log_at_trx_commit = 0
Обратите внимание, что опции №1 и №2 имеют небольшой, но ненулевой риск потери транзакции в случае потери питания. Безусловно, самый безопасный вариант - третий - купить подходящую карту RAID.
Ваш my.cnf включает 4 строки, которые следует удалить, они
read_buffer_size
read_rnd_buffer_size
join_buffer_size
thread_stack
все они связаны с требованиями к ОЗУ для каждого соединения и занимают гораздо больше места, чем необходимо. Пусть ДЕЙСТВИЯ ПО УМОЛЧАНИЮ работают на вас, чтобы сократить время отклика и освободить место для ОЗУ.
Для более подробного анализа добавьте в OriginalPost следующую строку
SHOW GLOBAL STATUS;
SHOW GLOBAL VARIABLES;
SHOW ENGINE INNODB STATUS;
, содержащую до пяти конкретных рекомендаций cfg, по одной в день, мониторинг .