2017년 3월 3일 금요일

MySQL 쿼리 실행시간 제한은 없는 듯 하다

MySQL 쿼리 실행시간 제한은 없는 듯 하다


잘 못 실행된 쿼리로 인해 DB 서버가 먹통이 되는 현상을 경험했다면,
응급 조치로는 show processlist 로 확인하고 해당 id 를 kill 해주는 방법이 있습니다.

php 와 같이 사용하는 경우에는 php 에서 실행시간을 제한(max_execution_time 설정값 또는 set_time_limit 함수이용)을 걸 수가 있지만, mysql 환경설정에는 아무리 구글링을 해봐도 찾지를 못하겠네요.

현재로써는 cron 을 이용해서 쉘스크립트로 프로세스를 체크해서 Time 이 일정 수치 이상된 프로세스 id 는 kill 을 해주도록 해주는 방법이 최선인 듯 합니다.

MariaDB [mysql]> show processlist;
+----+------+-----------+-------+---------+------+------------+-------------------+----------+
| Id | User | Host      | db    | Command | Time | State      | Info              | Progress |
+----+------+-----------+-------+---------+------+------------+-------------------+----------+
|  8 | root | localhost | mysql | Query   |    0 | NULL       | show processlist  |    0.000 |
| 15 | root | localhost | NULL  | Query   |    4 | User sleep | select sleep(300) |    0.000 |
+----+------+-----------+-------+---------+------+------------+-------------------+----------+
2 rows in set (0.00 sec)

MariaDB [mysql]> kill 15;
Query OK, 0 rows affected (0.00 sec)

MariaDB [mysql]> show processlist;
+----+------+-----------+-------+---------+------+-------+------------------+----------+
| Id | User | Host      | db    | Command | Time | State | Info             | Progress |
+----+------+-----------+-------+---------+------+-------+------------------+----------+
|  8 | root | localhost | mysql | Query   |    0 | NULL  | show processlist |    0.000 |
+----+------+-----------+-------+---------+------+-------+------------------+----------+
1 row in set (0.00 sec)

MariaDB [mysql]>