Принудительное время ожидания для MysqlQuery из PHP - PullRequest
3 голосов
/ 21 августа 2010

Есть ли способ заставить Mysql из PHP убить запрос, если он не вернулся в течение определенного периода времени?

Иногда я вижу, как дорогие запросы выполняются в течение нескольких часов (очевидно, к этому времени HTTP-соединение синхронизированоили пользователь ушел).Когда таких запросов накапливается достаточно, это начинает плохо влиять на общую производительность.

Ответы [ 2 ]

4 голосов
/ 21 августа 2010

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

Если вы все еще хотите этого, вы можете использовать команду SHOW PROCESSESLIST, чтобы получить все запущенные процессы. А затем используйте KILL x, чтобы разорвать клиентское соединение. Но чтобы это работало, вы должны проверить это из другого PHP-скрипта, так как многопоточность пока невозможна. Также не рекомендуется разрешать пользователям, использующим гранты PHP, связываться с настройками сервера.

1 голос
/ 21 августа 2010

Предупреждение: Теперь предполагаемое поведение должно использоваться с чем-то вроде upstart.

Вы хотите создать DAEMONS для такого рода вещей, но вы также можете использовать cron.
Просто создайте скрипт, который просматривает заданные интервалы для запросов выше xyz time и убейте их.

// this instruction kills all processes executing for more than 10 seconds
SELECT CONCAT('KILL ',id,';') 
FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE state = "executing" AND `time` >= 10

Однако, если запросы выполняются в течение столь длительного времени ... они должны быть оптимизированы .

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...