MySQL и высокий jdb2 io/wait

Я выполняю 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
задан 24 October 2015 в 21:46
3 ответа

Две вещи, которые следует учитывать:

1) Есть ли у вас подходящие индексы для ваших запросов?

2) Можете ли вы добавить ОЗУ на свой сервер?

Обращаясь к пункту 1, вы значительно сократите количество полных сканирований таблиц, необходимых для выполнения ваших запросов. Однако вам нужно потратить немало времени, чтобы понять, какие типы запросов вызывают наибольшую нагрузку ввода-вывода.

Обращаясь к пункту 2, вы разрешите больший объем вашей базы данных кэшироваться в ОЗУ, что одновременно ускорит запросы и снизит объем операций ввода-вывода.

0
ответ дан 3 December 2019 в 23:58

jbd2 - это процесс ядра, используемый для синхронизации журнала файловой системы с диском. Это означает, что в настоящий момент ваша установка MySQL ограничена записью.

Высокая загрузка jdb2 при таком малом количестве запросов (200 в секунду) выглядит довольно странно, особенно с быстрым SSD. Вы используете карту RAID без кеширования? Это может отключить внутренние кеши вашего SSD, что приведет к ужасной производительности. Если это так, вы можете попробовать:

  1. повторно включить частный кеш вашего диска
  2. использовать опцию my.cnf innodb_flush_log_at_trx_commit = 0
  3. использовать карту RAID с поддержкой BBU с 512+ МБ защищенной DRAM cache

Обратите внимание, что опции №1 и №2 имеют небольшой, но ненулевой риск потери транзакции в случае потери питания. Безусловно, самый безопасный вариант - третий - купить подходящую карту RAID.

1
ответ дан 3 December 2019 в 23:58

Ваш 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, по одной в день, мониторинг .

0
ответ дан 3 December 2019 в 23:58

Теги

Похожие вопросы