준호씨의 블로그

mysql - show processlist 에 where 조건 사용하기 본문

개발이야기

mysql - show processlist 에 where 조건 사용하기

준호씨 2016. 11. 24. 21:40
반응형


mysql 에서 현재 클라이언트 커넥션 상태나 현재 동작하고 있는 쿼리 정보 등을 알고 싶을 때, show processlist; 라는 명령어를 이용 할 수 있다.

mysql> show processlist;
+--------+--------+----------------------+-------+---------+-------+--------------+------------------------------------------------------------------------------------------------------+
| Id     | User   | Host                 | db    | Command | Time  | State        | Info                                                                                                 |
+--------+--------+----------------------+-------+---------+-------+--------------+------------------------------------------------------------------------------------------------------+
| 10**** | ****   | 10.28.***.***:42828   | ***db | Query   | 14267 | Sending data | SELECT /* someQuery */ count(*)             FROM   some_table             W |
...

그런데 Info 내용이 잘려서 전체 쿼리가 나오지 않고 특정 조건에 맞는 항목만 보고 싶을 때가 있다. sql 처럼 where 조건을 사용 할 수 없을까?
(참고로 내용이 잘리는 건 show full processlist; 로 해결 가능 하다.)

show processlist 에서는 불가능 하고 해당 정보가 있는 테이블을 select 하면 된다. time 이 10 초를 초과 했고 Info 내용이 null 이 아닌 내용을 확인 하고 싶으면 다음과 같이 하면 된다.
SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST where time > 10 and info is not null;

 
mysql> SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST where time > 10 and info is not null;
+--------+------+----------------------+-------+---------+-------+--------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| ID     | USER | HOST                 | DB    | COMMAND | TIME  | STATE        | INFO                                                                                                                                                                                                                                                                                                                                                                  |
+--------+------+----------------------+-------+---------+-------+--------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| 10**** | **** | 10.28.***.**:42828   | ***db | Query   | 14520 | Sending data | SELECT /* someQuery */ count(*)             FROM   some_table             WHERE  id = 1164             AND    email NOT IN (SELECT email                                   FROM   some_table2                                   WHERE  *******_id = 594                                   AND    status = 'C410')                     |
...

다만 INFORMATION_SCHEMA.PROCESSLIST 테이블은 MySQL 5.1.7 에서 추가 되었기 때문에 오래된 버전에서는 사용 할 수 없다.


참고
how to customize `show processlist` in mysql? 2009.05.30

Chapter 23 The INFORMATION_SCHEMA PROCESSLIST Table


반응형
Comments