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

Сервер MySQL испытывает высокую нагрузку / максимальное количество подключений

Короткая: Мы достигаем максимального количества подключений и видим очень низкую производительность MySQL в часы пиковой работы и не можем определить, является ли это проблемой загрузки или проблемой конфигурации.

Долго: Для начала, вот наши спецификации сервера, размещенного в Digital Ocean:

Ядра: 20

Объем памяти:

всего использованного свободного общего буфера / доступного кеша Mem: 62 ГБ 48 ГБ 4,7 ГБ 216 МБ 10 ГБ 14 ГБ

Снимок панели управления MySQL WorkBench:

Панель инструментов MySQL Workbench

Обычно у нас есть более 200 записей в списке процессов, почти все из которых являются «открывающими таблицами», «закрывающими таблицами» и, что немного реже, «очисткой». В записях очистки есть КОМАНДА killed и NULL ИНФОРМАЦИЯ (SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST). Единственные запросы, которые, как мы видим, занимают очень много времени, - это некоторые INSERTS в таблицы с интенсивным использованием и команды UPDATE с первичным ключом в WHERE для таблиц с тяжелым us. Их состояние - «обновление» в списке процессов.

Настройки MySQL .cnf:

key_buffer_size=1G
myisam_sort_buffer_size=1073741824
max_length_for_sort_data=8388608
max_sort_length=8388608
sort_buffer_size=1073741824
join_buffer_size=1073741824
preload_buffer_size=1073741824
read_buffer_size=1073741824
read_rnd_buffer_size=1073741824
thread_cache_size=450
max_allowed_packet=100M
max_connections=400
lock_wait_timeout=50
wait_timeout=120
table_open_cache_instances=10
table_open_cache=6000
table_definition_cache=6000
innodb_flush_method=O_DIRECT
innodb_buffer_pool_size=46G
innodb_buffer_pool_instances=46

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

Вопрос:

Учитывая настройки .cnf и спецификации нашего сервера в отношении снимка панели управления MySQL WorkBench, должны ли мы испытывать такое же замедление / соединение, которое мы наблюдаем с этой конфигурацией? Мы постоянно увеличиваем максимальное количество подключений и получаем SQLSTATE[HY000] [2002] Resource temporarily unavailable ошибки в PHP из PDO.

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

Дополнительная статистика:

Linux 4.0.4-301.fc22.x86_64 25.04.2016 _x86_64_ (20 ЦП)

avg-cpu:% user% nice% system% iowait% steal% idle

8,51 0,01 0,67 0,28 0,35 90,18

Устройство: tps kB_read / s kB_wrtn / s kB_read kB_wrtn vda
269,78 1681,90 2180,52 37679232421 48849706700

Мои деньги идут на "конфигурацию" - но, вероятно, все наоборот ... Я подозреваю, что вы настроили слишком много.

Мне кажется, вы «настраивали» производительность своего сервера. прямо в землю.

Если вы использовали скрипт «настройки» - прекратите это делать.

Например... table_definition_cache=6000 и table_open_cache=6000 ... каково этому оправдание?

Большинство параметров, которые вы настроили не по умолчанию, кажутся догадками.

Если вы не проверили каждый этих настроек, индивидуально, до и после того, как вы их сделали, индивидуально ... ну, вы, наверное, видите, к чему я иду ... они, вероятно, неоправданны, и вам, вероятно, будет лучше без них. Больше не всегда лучше. Чем больше, тем сложнее жонглировать.

Я бы ожидал хороших вещей, если бы вы просто закомментировали почти все этих настроек, кроме innodb_* и позволить серверу работать с большим количеством параметров при их значениях по умолчанию.