|
Mysql InnoDB виснет при активной работе с диском
|
|||
---|---|---|---|
#18+
Месяц исследований и экспериментов. Миллионы убитых нервных клеток. Сотни злых пользователей сайта. Итак. Дано: 10.0.38-MariaDB-0+deb8u1 (также тестировалось на percona) Linux server 4.9.0-0.bpo.6-amd64 Пустой mysql конфиг (для чистоты эксперимента) ДБ размером 40ГБ на InnoDB 2 SSD raid1 Запустим тестовый сервис с максимально ограниченными ресурсами на использование диска. Код: powershell 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
atop, iotop, iostat показывают минимальную нагрузку на диск (10mb/s). И в где-то в середине выполнения dd, в 9 случаев из 10, ВСЕ(!) таблицы на innodb намертво зависают (селект не выполняется) на пару минут, в то время как ВСЕ таблицы на myisam доступны (селект выполняется). InnoDB таблицы зависают при любой активной работе с диском, будь то архивирование, копирование файлов, чтение. Чем "тяжелее" задача, тем дольше зависание. Проблема не в производительности дисков и не в аппаратуре. В ДЦ заменяли диски и другие комплектующие по 2 раза. Проблема таится где-то в самом процессе работы InnoDB с диском. Мне сложно интерпретировать свои мысли на этот счет, так как не знаю всех технических нюансов. Вы можете сказать - дружище, возьми второй диск, поставь на него отдельно mysql и не парься! На что я вам скажу, что это не выход. Даже при бекапе через xtrabackup всё виснет. Так что же мне делать? Прошу помощи. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2020, 05:39 |
|
Mysql InnoDB виснет при активной работе с диском
|
|||
---|---|---|---|
#18+
andrey10 10.0.38-MariaDB-0+deb8u1 Ветка 10.0 стала стабильной в 2014 году. Какой объем дисков? Пустой конфиг - тоже не здорово, у MySQL некоторые параметры по дефолту имеют значения не лучшие с точки зрения быстродействия. innodb_flush_log_at_trx_commit - имеет смысл поставить в 1 innodb_buffer_pool_size - имеет смысл поставить в настолько большое значение, насколько возможно выделить оперативки. В пределе - размер всех таблиц и индексов InnoDB +10%, выше уже смысла нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2020, 14:05 |
|
Mysql InnoDB виснет при активной работе с диском
|
|||
---|---|---|---|
#18+
andrey10, Для чистоты эксперимента возьми за 1тыщ материнку под старый Core2Duo c 775 соккетом и 1066 шиной, проц средненький E6600 и 8Г памяти и простые диски, вот это будет чистый эксперимент. Причем набор такой сейчас стоит копейки. Все отладь, затем уже можно на сервер. Ты же в дата центре не был, зачем им верить, меняли, не меняли.... если хостинг, VPS за 200-300 рублей в месяц, то никто толком на это не смотрит, они же для небольших сайтов визиток пробовать innodb_buffer_pool_size - 50-80% ОЗУ, (если там память "существует") по умолчанию около 128М еще по умалчанию там ibdata1:10M: "autoextend" то есть постоянное наращивание при заполнении первичного объема, это тоже плохо, так как диск фрагментируется Вообще такие зависоны могут быть элементарно даже из за перегрева дисков, не 37-38 градусов, а 40 - и все... ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2020, 23:24 |
|
Mysql InnoDB виснет при активной работе с диском
|
|||
---|---|---|---|
#18+
andrey10, MyISAM не имеет кэша, его кэш в ОС. ОС часто (глупо) предкэширует открытые приложениями файлы . MyISAM-овцы даже гордились, на сколько я помню, тем, что типа мы ещё ничего не читали толком, а оно уже в кэше. INNO , наоборот, хранит кэш сам, и пока он что-то не прочитает, в кэш это не попадёт. Ну и ты классно придумал -- врубить все параметры по дефолту, ничего не выделять под кэш, который -- главное достоинство INNO, да ещё и IO как-то искусственно ограничить... Хорошо хоть СУБД запустил, а то можно было бы не запускать, и смотреть и ухмыляться, как оно (не) работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2020, 01:04 |
|
Mysql InnoDB виснет при активной работе с диском
|
|||
---|---|---|---|
#18+
Спасибо за ответы. "А почему такая старая ветка?" - Обновлюсь до последней и перепроверю. "Какой объем дисков?" - 2 диска по 240 "Пустой конфиг - тоже не здорово" - да, надо было сразу рабочий выставить. Вот действующий конфиг, на котором зависает: https://anotepad.com/notes/2xf43nww innodb_flush_log_at_trx_commit стоит 2. Попробую поставить 1. Также попытаюсь выключить innodb_use_native_aio На сервере всего 32гб оперативки и мне удалось поставить только innodb_buffer_pool_size = 25гб для тестов, когда объем иннодб таблиц 29ГБ (не 40, как писал в 1 посте). Результаты были точно такими же. Неужели это значение должно быть обязательно больше объема иннодб таблиц? Я где-то читал, что не критично, но в моем случае, если это является истинной причиной зависания диска, то критично. Наверное, мне стоит запустить мускл с текущим конфигом на проекте с 5-8гб innodb и проверить. "Для чистоты эксперимента возьми за 1тыщ материнку под старый Core2Duo..." - У меня дедик в ДЦ. "так как диск фрагментируется" - у меня SSD "Вообще такие зависоны могут быть элементарно даже из за перегрева дисков, не 37-38 градусов, а 40 - и все..." - Нет "Ну и ты классно придумал -- врубить все параметры по дефолту, ничего не выделять под кэш, который -- главное достоинство INNO," - Я тестил как на рабочем, так и на дефолтном - проблема идентична. Выше уже предоставил свой рабочий. "да ещё и IO как-то искусственно ограничить..." - Читайте внимательнее, пожалуйста. Использование диска в примере было ограничено для выполнения определенной команды для демонстрации абсурдности проблемы: диск не загружен практически совсем, а mysql зависает. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2020, 06:14 |
|
Mysql InnoDB виснет при активной работе с диском
|
|||
---|---|---|---|
#18+
твой тест гонянения нуля dd-кой отношения к MySQL не имеет И описывать надо задачи которые делаешь, апдейтишь - инсертишь, селектишь допустим у тебя инсерты частные. По дефолту файл ibdata1 10М Пошли у тебя сплошь Инсерты на 10М, заполнили свободный кусок, опять сработал autoextend на 10М (это тоже время занимает) Да еще если устроил конкурецию на диске своим тестом, вообще нонсенс У тебя на этих же дисках еще какие то задачи есть что ли? автор"InnoDB таблицы зависают при любой активной работе с диском, будь то архивирование, копирование файлов, чтение. Чем "тяжелее" задача, тем дольше зависание." Для базы лучше 1 отдельный диск, чем 55 в рейде но с другими задачами, какие копирования файлов там у тебя?? Надо настраивать InnoDB, если считаешь, что система идеальна. Причем методом научного тыка. Так как ничего не понятно. Определи в чем у тебя затык происходит, только не таким тестом Не забывай что индексы, логи еще пишутся. По логам MySQL смотри, что там в момент затыка происходило, а не по вводу выводу системы ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2020, 08:08 |
|
Mysql InnoDB виснет при активной работе с диском
|
|||
---|---|---|---|
#18+
innodb_thread_concurrency=4 эти потоки тоже бурутся у системы, можно поэкпериментировать в 1 или 2 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2020, 08:20 |
|
Mysql InnoDB виснет при активной работе с диском
|
|||
---|---|---|---|
#18+
andrey10 innodb_flush_log_at_trx_commit стоит 2. Попробую поставить 1. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2020, 13:47 |
|
Mysql InnoDB виснет при активной работе с диском
|
|||
---|---|---|---|
#18+
Alex_Ustinov innodb_thread_concurrency=4 эти потоки тоже бурутся у системы, можно поэкпериментировать в 1 или 2 Спасибо, попробую. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2020, 14:12 |
|
Mysql InnoDB виснет при активной работе с диском
|
|||
---|---|---|---|
#18+
innodb_thread_concurrency=0 решило все проблемы :) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2020, 08:46 |
|
Mysql InnoDB виснет при активной работе с диском
|
|||
---|---|---|---|
#18+
andrey10, А сколько ядер доступно? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2020, 09:33 |
|
Mysql InnoDB виснет при активной работе с диском
|
|||
---|---|---|---|
#18+
andrey10 innodb_thread_concurrency=0 решило все проблемы :) innodb_adaptive_max_sleep_delay - адаптивное поведение время сна Короче у тебя стояло потоков=4, это было очень периодически мало, при всплесках количества пользователей. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2020, 15:46 |
|
Mysql InnoDB виснет при активной работе с диском
|
|||
---|---|---|---|
#18+
miksoft, 4 ядра 8 потоков. "Короче у тебя стояло потоков=4, это было очень периодически мало, при всплесках количества пользователей." - Не уверен как оно работает, но мне кажется, что когда я выставил 0 mysql более умным образом использовать потоки при стресс нагрузке, а при 4 просто впадал в лок. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2020, 07:41 |
|
Mysql InnoDB виснет при активной работе с диском
|
|||
---|---|---|---|
#18+
andrey10 8 потоков Ну или 0, т.е. без ограничений. 0 - это тоже не здорово при высокой нагрузке, но если у вас почти хватало 4, то, наверное, будет нормально. Почитайте про ограничения, возникающие при 0 - https://dev.mysql.com/doc/refman/8.0/en/innodb-parameters.html#sysvar_innodb_thread_concurrency ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2020, 08:15 |
|
|
start [/forum/topic.php?fid=47&msg=39919286&tid=1828768]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
126ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
others: | 324ms |
total: | 534ms |
0 / 0 |