Процесс MySQL, занимающий 150-400% ЦП

Мое программное обеспечение выполняет множество запросов MySQL к моему серверу, и в прошлом у меня никогда не было проблем с ним, но совсем недавно ничего не загружалось, ни веб-страницы, ни SQL не выполнялись, ничего. Мне удалось подключиться к WHM для моего сервера и убить процесс, только чтобы увидеть, как он снова вырос до 300%. Ничего из того, что я смог сделать, не привело к его снижению. Какой информацией мне нужно поделиться, чтобы получить помощь в этом вопросе? Я не системный администратор, и у меня нет ни одного ресурса для него. Обычно я не просил бы о помощи и просто оптимизировал все свои запросы для чего-то вроде этого, поскольку это не было проблемой в течение последних 3 месяцев, но внезапно стало проблемой из ниоткуда, по крайней мере, я этого не заметил. В этот момент моя программа сообщает, что одна из таблиц моей базы данных вышла из строя и нуждается в ремонте ... Что я могу сделать? Заранее благодарю за любую помощь...

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

Также я не уверен, помогает ли это, но отслеживание процесса в WHM печатает это повторно и ничего больше:

fcntl(16, F_GETFL)                      = 0x2 (flags O_RDWR)
fcntl(16, F_SETFL, O_RDWR|O_NONBLOCK)   = 0
accept(16, {sa_family=AF_LOCAL, NULL}, [2]) = 35
fcntl(16, F_SETFL, O_RDWR)              = 0
setsockopt(35, SOL_IP, IP_TOS, [8], 4)  = -1 EOPNOTSUPP (Operation not supported)
futex(0x13298a4, FUTEX_WAKE_OP_PRIVATE, 1, 1, 0x13298a0, {FUTEX_OP_SET, 0, FUTEX_OP_CMP_GT, 1}) = 1
futex(0x1327240, FUTEX_WAKE_PRIVATE, 1) = 1
poll([{fd=14, events=POLLIN}, {fd=16, events=POLLIN}], 2, -1) = 1 ([{fd=16, revents=POLLIN}])

/etc/my.conf

innodb_file_per_table=1
default-storage-engine=MyISAM
performance-schema=0
max_allowed_packet=268435456
open_files_limit=10000

Это все, что мне доступно по файлу my.conf. Журнал ошибок не существует в /var/log, поэтому мне нечего сказать по этому поводу ...

Версия SQL: [Server] # mysql -V mysql Ver 14.14 Distrib 5.6.41, for Linux (x86_64) using EditLine wrapper

У меня есть дополнительный вопрос или дополнение к этому. Я не знаю, имеет ли это большое значение, но, скажем, мой код работает с использованием 30% ЦП в процессе mysql, я могу фактически отключить код, и использование ЦП процессом mysql не изменится. Что это значит?

Обновлено: (все они истекают в течение недели с 12/09/2018)

Содержимое файла my.cnf, которое я перечислил, - это все, что там было. Ничего больше. Я получу команду top и iostat -xm 5 3, когда снова запущу программное обеспечение на полной скорости, чтобы увидеть результаты.

Лучше всего восстановить резервную копию вашей базы данных на отдельном сервере и использовать ее до тех пор, пока вы не определите проблему на сервере. Дополнительная загрузка ЦП более чем вероятна из-за попытки MySQL восстановить данные из двоичного журнала или неудачных попыток чтения / записи. Но если не знать больше, это похоже на проблему, связанную с оборудованием, такую ​​как неисправный сектор жесткого диска, отказ SSD или оперативной памяти, которые привели к повреждению данных таблицы. Вам нужно будет поделиться информацией из вашего журнала ошибок mysql, ваших настроек my.cnf (удаление конфиденциальной информации, такой как имя пользователя / пароль).

Will B. 06.12.2018 04:55

Проверьте журналы MySQL, возможно, как говорит ваша программа, у вас разбилась таблица

Sakura Kinomoto 06.12.2018 05:02

В порядке. Мой серверный хостинг проходит через godaddy, мне не на что быстро переходить. У вас есть какие-нибудь рекомендации? Вся база данных составляет около 14 ГБ с несколькими таблицами с несколькими миллионами записей, которые я создал. Полагаю, я могу вызвать им и надеюсь, что кто-нибудь, кто знает, что они делают, ответит на звонок. Позвольте мне получить журнал ошибок и настройки my.cnf. Последний раз смотрел, хотя в нем было всего 4 или 5 настроек. Стол, который у меня был, разбился, но я восстановил его через PhpMyAdmin

Pixelknight1398 06.12.2018 05:13

Включить журнал медленных запросов, это таблицы MyISAM или Innodb? Какая версия MySQL (SELECT VERSION())?

danblack 06.12.2018 05:20

Хорошо, я включу журнал медленных запросов, таблицы - это MyISAM, как показано в my.conf, и версия также указана сейчас. 5.6.41

Pixelknight1398 06.12.2018 05:24

Журнал медленных запросов включен. Я могу вставить сюда вывод?

Pixelknight1398 06.12.2018 05:38

Поскольку GoDaddy предоставляет хостинг; их техническая поддержка уровня 2 должна быть в состоянии предоставить вам поддержку в отношении диагностики и возможного решения проблемы, особенно если она связана с оборудованием, если только она не вызвана приложением. Журнал медленных запросов будет определять только аномальные запросы, выполнение которых занимает много времени, но не обязательно коррелирует с загрузкой ЦП. Найдите в каталоге /var/lib/mysql или SELECT @@log_error файлы журнала. Вы должны увидеть файл mysql-error.log, в котором будет отображаться информация о запуске службы и любые ошибки, в зависимости от вашего уровня log_error_verbosity.

Will B. 06.12.2018 15:01

Я точно. Я постараюсь перезвонить им через несколько минут. Я позволил журналу медленных запросов работать всю ночь с моим кодом, и он ничего не добавил в журнал. Я только что проверил журнал ошибок, который почему-то был под другим именем. Ничего необычного не кажется. Есть немного для неразрешенного IP-адреса, некоторые для восстановления таблицы и иного перезапуска службы MySQL, а также моего сервера. (Единственный способ, который я нашел, чтобы очистить процессор). Ничего очевидного.

Pixelknight1398 06.12.2018 15:53

Я не знаю, имеет ли это большое значение, но, скажем, мой код работает с использованием 30% ЦП в процессе mysql, я могу фактически отключить код, и использование ЦП процессом mysql не изменится. Что это значит? Кроме того, даже если я буду очень осторожен с этим, загрузка ЦП по какой-то причине будет медленно расти. Скажем, это 30%, и я позволил всему работать, он будет на 90%, затем 150% к этому моменту таблица выйдет из строя, но. Раньше, когда я писал этот пост, я запустил свое программное обеспечение, и загрузка ЦП была увеличена до 350%, но с тех пор я был осторожен. Может быть, от незакрытых подключений?

Pixelknight1398 06.12.2018 15:54

Это только означает, что проблема не проявляется, если mysql не взаимодействует так, как работает приложение. Например, читает и / или записывает в базу данных и / или определенные таблицы или путем вызова определенных процедур / триггеров. Например, вызов функции MySQL выполняется как бесконечный цикл. Если в журнале ошибок ничего не выделяется, а ваш уровень детализации равен 3, я бы посмотрел на проблемы уровня приложения, такие как бесконечные циклы. PHP и MySQL имеют тайм-ауты соединения по умолчанию, которые вы не указали, когда вы изменили, и PHP закрывает соединения после завершения каждого запроса.

Will B. 06.12.2018 22:19

Точно. В течение последних нескольких часов процент использования моего процессора по непонятным причинам довольно сильно колебался. Мое приложение написано на Python и использует библиотеку mysql.connector. Кажется, не существует бесконечных циклов, как они представлялись бы в приложении, которое я мог бы себе представить. Он определенно зацикливается, как двигатель, но только до остановки. Последние несколько часов я работал над устранением ненужных (лишних) соединений, а также перечислял свои запросы для создания индексов в БД. Не знаю, что еще делать, пока не найду другое решение.

Pixelknight1398 06.12.2018 22:36
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
11
959
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Скорость в секунду = количество запросов в секунду. Предложения для рассмотрения на основе отчета Linux ulimit -a.

ulimit -n 16384       to raise Open Files limit from 1024 to support your activities.

Чтобы это сохранялось при выключении / перезагрузке Linux, просмотрите этот URL.

https://glassonionblog.wordpress.com/2013/01/27/increase-ulimit-and-file-descriptors-limit/

Ваши особенности могут немного отличаться в зависимости от версии Linux.

Предложения для вашего раздела my.cnf [mysqld]

innodb_lru_scan_depth=100  # from 1024 to reduce CPU busy every second.  93% savings for this one function.
thread_cache_size=32  # from 9 for thread breathing room and growth.
innodb_io_capacity=1800  # from 200 to take advantage of your HDD IOPS capacity
key_cache_age_threshold=7200  # from 300 seconds to reduce key_reads RPS of 16 
query_cache_size=0  # from 1M to conserve RAM - QC is OFF and not used
query_cache_limit=0  # from 1M to conserve RAM - QC is OFF and not used
key_buffer_size=128M  # from 8M which had NO free space at the end of your work day

Дополнительные предложения см. В моем профиле, в профиле сети для получения контактной информации.

@ Pixelknight1398 У вас было время применить 7 предложений, опубликованных 11 декабря 2018 г.? Каково ваше текущее положение? Счастливых праздников.

Wilson Hauck 14.12.2018 16:03

Другие вопросы по теме