Как я могу снизить нагрузку на ЦП при запросах MySQL?

Мы запускаем социальный сайт на основе Wowonder для небольшого сообщества, и как только мы набираем 100 пользователей в сети, наш сайт становится очень медленным из-за высокой загрузки процессора. Сам сценарий должен быть в порядке, потому что ни у кого из других клиентов нет проблем с этим, поэтому я считаю, что что-то с нашей стороны обречено. Это наш отчет о взглядах с сотней пользователей онлайн: отчет о взглядах. Как видите, загрузка нашего ЦП слишком высока, даже после настройки политик кеширования. Мы пробовали работать без query_cache, но результат был тот же.

[mysqld] innodb_buffer_pool_instances = 26 innodb_file_per_table = 1 innodb_read_io_threads = 16 innodb_write_io_threads = 16 innodb_buffer_pool_size = 26 ГБ innodb_io_capacity = 300 innodb_log_file_size = 3G performance_schema = ВКЛ table_definition_cache = 10000 join_buffer_size = 256 МБ пропустить имя-разрешение key_buffer_size = 512 МБ max_allowed_packet = 512 МБ thread_stack = 192 КБ thread_cache_size = 10 myisam_recover_options = РЕЗЕРВНОЕ КОПИРОВАНИЕ max_connections = 1000 query_cache_type = 1 query_cache_limit = 256 КБ query_cache_min_res_unit = 2 КБ query_cache_size = 50M

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

2
задан 2 June 2020 в 15:11
2 ответа

Как правило, высокая загрузка ЦП означает медленные (плохо проиндексированные или плохо спроектированные) запросы. Конфигурация, как правило, оказывает гораздо меньшее влияние, а плохая конфигурация обычно снижает использование вашего процессора и снижает скорость запросов.

Сказав это, некоторые части вашей конфигурации вопиюще плохи:

join_buffer_size=256M

Это, скорее всего, увеличивает использование вашего процессора и , что снижает производительность. Закомментируйте это, оставьте значение по умолчанию.

Вам почти наверняка не нужно отказываться от значений по умолчанию, поэтому подумайте о том, чтобы их закомментировать:

thread_stack        = 192K
thread_cache_size       = 10

Они обычно приносят больше вреда, чем пользы:

query_cache_type = 1
query_cache_limit = 256K
query_cache_min_res_unit = 2k
query_cache_size = 50M

Рассмотрите возможность замены на :

query_cache_type = 0
query_cache_size = 0
1
ответ дан 4 January 2021 в 08:10

Мой ответ - дополнить @Gordan Bobic

Проверить, какие запросы медленные:

mysql -e "SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST WHERE COMMAND<>'Sleep' and TIME > 5"

Для каждого запроса это медленный запуск EXPLAIN по запросу. Вы можете установить Percona Tools и запустить pt-visual-объяснение , чтобы лучше представить оператор EXPLAIN .

Если вы используете движок InnoDB, вы можете увидеть, что это такое. выполнение с помощью:

mysql -e "show engine innodb status \G"

Другие подробности можно найти в MySQL Performance Schema , которая также включает профилировщик . Здесь статья Percona о профилировщике.

Если вы хотите получить более полное представление об использовании процессора, вы можете использовать perf + FlameGraphs .

0
ответ дан 4 January 2021 в 08:10

Теги

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