Mysql 서버에 로그인해서 상태를 확인한다.

우선 Mysql 서거바 어떤 쿼리를 실행하고 있는지 어떤 프로세스가 특히 오랜시간 동안 실행되고 있는지 확인하는 것이 좋다.

Mysql의   "show processlist"  라는 명령은 다음과 같은 다양한 프로세스의 정보를 보여줌으로 Mysql 서버에 로그인해서 가장 먼저 확인해 보는 것이 좋다.

  • 현재  Mysql 서버에 존재하는 전체 프로세스 목록
  • 각 프로세스가 어떤 작업(SQL)를 실행하고 있는지
  • 각 작업의 현재상태
  • 각 작업의 실행시간

 

"show processlist"  명령은 Mysql 서버에 접속된 클라이언트 수만큼의 레코드를 출력한다.  이때 스레드라 함은 실제 클라이언트와 연결돼 있는 스레드만을 의미한다. 즉 이명령의 결과로 출력되는 내용에서 한 레코드는 하나의 프로세스를 의미함과 동시에 하나의 커넥션을 의미한다.

 

 

mysql> show processlist;
+-----+-----------+-------------------+---------+---------+--------+----------+------------------+
| Id  | User      | Host              | db      | Command | Time   | State    | Info             |
+-----+-----------+-------------------+---------+---------+--------+----------+------------------+
|   5 | saferzone | localhost         | DEFCON4 | Sleep   |   5746 |          | NULL             |
|   6 | saferzone | localhost         | DEFCON4 | Sleep   |    104 |          | NULL             |
|   7 | saferzone | localhost         | DEFCON4 | Sleep   |   5779 |          | NULL             |
|   8 | saferzone | localhost         | DEFCON4 | Sleep   |   4051 |          | NULL             |
|  72 | saferzone | localhost         | DEFCON4 | Sleep   |   4922 |          | NULL             |
|  96 | root      | 127.0.0.1:40020   | DEFCON4 | Sleep   | 100545 |          | NULL             |
|  98 | root      | 127.0.0.1:40024   | DEFCON4 | Sleep   | 100375 |          | NULL             |
|  99 | root      | 127.0.0.1:40026   | DEFCON4 | Sleep   |     24 |          | NULL             |
| 146 | root      | 192.168.2.2:59488 | DEFCON4 | Sleep   |  25743 |          | NULL             |
| 159 | root      | 192.168.2.3:57341 | DEFCON4 | Sleep   |   4114 |          | NULL             |
| 163 | root      | localhost         | NULL    | Query   |      0 | starting | show processlist |
+-----+-----------+-------------------+---------+---------+--------+----------+------------------+
11 rows in set (0.00 sec)

 

위 내용에서 주의깊게 봐야 할 항목은 Command 칼럼의 값과 Time 칼럼이다. 때로는 Info 칼럼에 출력되는 SQL도 간단히 문제의 원인을 찾는데 많은 도움이 된다.

 

  • Command 가  "Sleep" 이나 "Binlog Dump" 상태가 아닌 프로세스는 대부분 클라이언트의 요청으로 SQL을 실행하고 있음을 의미하는데, 이때 Time 칼럼의 값이 그 작업을 몇 초 동안 실행하고 있는지 알려준다.
  • 만약 특정 쿼리를 실행하고 있는 프로세스가 오랜 시간 동안 실행되고 있다면 해당 프로세스의 State 값을 확인하자 State 칼럼은 그 작업이 현재 어떤 상태인지를 보여주는데,  Waiting 일때는 다른 프로세스가 선점하고 있는 잠금을 기다리는 것을 의미한다. Waiting 상태의 프로세스가 많을 때는 대부분 테이블의 잠금을 획득하고 해제하지 않아서 이런 현상이 발생한다. 도한 갑자기 너무 많은 사용자가 테이블 한두 개를 집중적으로 읽고 쓸때도 이런 현상이 나타난다. State가 Waiting 상태로 표시되는 것은 테이블 잠글을 기다릴때만 해당되며, InnoDB 스토리지 엔진의 레코드 잠금은 Waiting 으로 표시되지 않고 update라고 표시된다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

+ Recent posts