यदि आपके पास MySQL 5.1 है, जहां INFORMATION_SCHEMA में प्रक्रिया सूची है, तो आप 20 मिनट (1200 सेकंड) से अधिक समय तक चलने वाले क्वेरी के लिए mysql क्लाइंट के भीतर से बल्क में KILL QUERY कमांड उत्पन्न करने के लिए ऐसा कर सकते हैं:
SELECT GROUP_CONCAT(CONCAT('KILL QUERY ',id,';') SEPARATOR ' ') KillQuery
FROM information_schema.processlist WHERE user<>'system user'
AND time >= 1200\G
आप एक विशिष्ट क्वेरी, लंबे समय से चल रहे प्रश्नों के विरुद्ध TIME फ़ील्ड या किसी विशिष्ट डेटाबेस के विरुद्ध DB फ़ील्ड देखने के लिए INFO फ़ील्ड के विरुद्ध क्लॉस कर सकते हैं।
यदि आप रूट @ लोकलहोस्ट हैं, तो आपके पास इसे चलाने के लिए पूरे विशेषाधिकार होने चाहिए
SECONDS_TOO_LONG=1200
KILLPROC_SQLSTMT="SELECT GROUP_CONCAT(CONCAT('KILL QUERY ',id,';') SEPARATOR ' ') KillQuery FROM information_schema.processlist WHERE user<>'system user' AND time >= ${SECONDS_TOO_LONG}"
mysql -uroot -ppassword -ANe"${KILLPROC_SQLSTMT}" | mysql -uroot -ppassword
आप इसे निम्न प्रकार से लिख सकते हैं:
SECONDS_TOO_LONG=1200
QUERIES_RUNNING_TOO_LONG=`mysql -uroot -ppassword -ANe"SELECT COUNT(1) FROM information_schema.processlist WHERE user<>'system user' AND time >= ${SECONDS_TOO_LONG}"`
if [ ${QUERIES_RUNNING_TOO_LONG} -gt 0 ]
then
KILLPROC_SQLSTMT="SELECT GROUP_CONCAT(CONCAT('KILL QUERY ',id,';') SEPARATOR ' ') KillQuery FROM information_schema.processlist WHERE user<>'system user' AND time >= ${SECONDS_TOO_LONG}"
mysql -uroot -ppassword -ANe"${KILLPROC_SQLSTMT}" | mysql -uroot -ppassword
fi
यहाँ एक और भिन्नता है:
SECONDS_TOO_LONG=1200
QUERIES_RUNNING_TOO_LONG=`mysql -uroot -ppassword -ANe"SELECT COUNT(1) FROM information_schema.processlist WHERE user<>'system user' AND time >= ${SECONDS_TOO_LONG}"`
if [ ${QUERIES_RUNNING_TOO_LONG} -gt 0 ]
then
KILLPROC_SQLSTMT="SELECT CONCAT('KILL QUERY ',id,';') KillQuery FROM information_schema.processlist WHERE user<>'system user' AND time >= ${SECONDS_TOO_LONG}"
mysql -uroot -ppassword -ANe"${KILLPROC_SQLSTMT}" > /tmp/kill_log_queries.sql
mysql -uroot -ppassword < /tmp/kill_log_queries.sql
fi
BTW आपके पास एक myDB निर्दिष्ट नहीं है क्योंकि मैंने स्पष्ट रूप से information_schema.processlist से पूरी तरह से योग्य टैब्लेमनाम के रूप में पढ़ा है।
यहाँ एक प्रदर्शन है जो आपको देखना चाहिए। इस उदाहरण के लिए, मैं उन सभी प्रक्रियाओं के KILL कमांड की गूंज करूंगा जिनका समय> 20000 सेकंड:
[root@***** ~]# mysql `lwdba_connect` -ANe"SELECT GROUP_CONCAT('KILL ',id,'; ' SEPARATOR ' ') FROM information_schema.processlist WHERE time > 25000 AND user<>'system user';"
+----------------------------------------------------+
| KILL 180186; KILL 180141; KILL 176419; KILL 3; |
+----------------------------------------------------+
[root@***** ~]#
मैं पिछले 5 सालों से इस तकनीक को कर रहा हूं। वास्तव में, मैंने यह उत्तर पिछले साल डीबीए स्टैकएक्सचेंज को प्रस्तुत किया था और इसे स्वीकार कर लिया गया था ।