Странные всплески времени запросов MySQL
Я использую NodeJS с MySQL (InnoDB) для игрового сервера (информация об игроке, сохраненные данные, прочее). Сервер основан на HTTP(S), поэтому ничего в реальном времени.
У меня есть эти странные всплески, как вы можете видеть на графиках ниже (первый график - количество запросов в секунду, а последний график - количество запросов в секунду)
На графике времени отклика вы можете увидеть максимальное время отклика с фиолетовым и среднее время отклика с синим. Даже с этими 10-20 тыс. Пиков, средняя остается на 50-100 мс, как и 95% запросов.
Я копался и обнаружил, что медленные запросы не являются чем-то особенным. Обычно обновляют запрос с помощью сохраненных данных (blob of ~2kb) или обновления профиля игрока, который изменяется как имя пользователя или около того. Нет присоединений или что-то в этом роде. Мы говорим о таблицах с менее чем 100 000 строк.
Сервер работает в Azure на Ubuntu 14.04 с MySQL 5.7, используя 4 ядра и 7 ГБ оперативной памяти.
Настройки MySQL:
innodb_buffer_pool_size=4G
innodb_log_file_size=1G
innodb_buffer_pool_instances=4
innodb_log_buffer_size=4M
query_cache_type=0
tmp_table_size=64M
max_heap_table_size=64M
sort_buffer_size=32M
wait_timeout=300
interactive_timeout=300
innodb_file_per_table=ON
Изменить: Оказалось, что проблема никогда не была производительность MySQL, но производительность Node.js до SQL-запросов. Более подробная информация здесь: Node.js multer и body-parser иногда очень медленные
1 ответ
Проверьте вашу перестановку (предположим, что 0 машин mysql максимизируют использование оперативной памяти):
> sysctl -A|grep swap
vm.swappiness = 0
только 7 ГБ ОЗУ и 4 ГБ только пула буферов позволят вашей машине поменяться местами, если перестановка не равна нулю.
не могли бы вы опубликовать свой график обмена и использовать память. 4G буфер "по краю" для 7G оперативной памяти. Для 8G оперативной памяти, я бы дал 3G, так как у вас есть +1G на все остальное mysql мудрый + 2G на ОС.
Также у вас есть 1G для файла журнала транзакций, и я предполагаю, что у вас есть два файла журнала. У вас есть так много записей, чтобы иметь такие большие файлы? Вы можете использовать это руководство: https://www.percona.com/blog/2008/11/21/how-to-calculate-a-good-innodb-log-file-size/