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

Как связать запрос mysql с процессом php?

Я заметил, что у меня слишком много mysqld процессы, у которых есть различные запросы mysql; Я перезапустил mysqld и все эти процессы возвращаются в течение 10 секунд.

Я знаю, что процессы создаются с помощью php; но не знаю, как это отследить. Как это сделать?

Чтобы ответить на мой собственный вопрос, вот что я обнаружил; это сильно зависит от вашей среды и включает использование lsof и strace.

Вам нужно будет найти идентификатор процесса вашего запроса (используя lsof или netstat или любой другой сетевой инструмент в Linux). Как только вы получите это, вам понадобится идентификатор родительского процесса, который вы можете пройти ps. Затем вы захотите связать этот PPID следующим образом: strace -f -tt -T -s 10000 -p <PPID> -o ~/out.strace.

Другой способ сделать это более продвинутый и предполагает использование /proc/. Вам также нужно будет получить PPID вашего соединения, используя lsof. Затем вы выполните ls -la /proc/<ppid>/fd/ и grep для socket:[*number*]. Затем вы выполните lsof на всех числоs, а затем strace все pid от тех числос.

Выполните следующий запрос из CLI-клиента, из phpmyadmin или вашего любимого mysql-инструмента:

SELECT `USER`, 
       `HOST`, 
       `DB`, 
       `COMMAND`, 
       `TIME`, 
       `STATE`, 
       LEFT(`INFO`, 51200) AS `Info` 
   FROM `information_schema`.`PROCESSLIST`;

и вы увидите, кто заблокировал ваши базы. Конечно, я уверен, что хоть один индекс в ваших базах сломан и его нужно перестраивать. Вы должны запустить анализ / восстановление БД, чтобы решить вашу проблему:

REPAIR TABLE database.table;

Если вы не используете несколько экземпляров базы данных, у вас должен быть запущен только один процесс mysqld.