Linux DB

show processlist의 state 종류

2012.05.11 01:00

호스트웨이 조회 수:19210

 - show processlist의 state 종류


mysqladmin processlist 명령이나 mysql 접속 후 show processlist; 쿼리문을 이용해 현재 실행되고 있는  mysql 프로세스 및 쿼리 등의 정보를 확인할 수 있습니다.
이 중 state 값의 종류에 대해 알아 보겠습니다.

[root@iamroot ~]# /usr/local/mysql/bin/mysqladmin processlist –p
Enter password:
+------+------+-----------+----+---------+------+-------+------------------+
| Id   | User | Host      | db | Command | Time | State | Info             |
+------+------+-----------+----+---------+------+-------+------------------+
| 7891 | root | localhost |    | Query   | 0    |       | show processlist |
+------+------+-----------+----+---------+------+-------+------------------+


1. closing tables
   스레드는 테이블 체크 오퍼레이션을 실행중
 
2. Closing tables
   스레드가 변경된 테이블 데이터를 디스크로 쏟아내고 사용된 테이블을 닫는 것을 의미합니다.
   이것은 빠른 오퍼레이션입니다. 만약 그렇지 않다면, 풀(full) 디스크를 가지고 있지 않은지
   그리고 디스크가 너무 과중하게 사용되지는 않는지 체크해야 합니다.
 
3. Connect Out
   리플리케이션 슬레이브는 그것의 마스터와 연결되어 있습니다.
 
4. Copying to tmp table
   서버는 메모리에 있는 테이블로 복사
 
5. Copying to tmp table on disk
   서버가 디스크에 있는 임시 테이블로 복사합니다.
   임시 결과 세트는 tmp_table_size 보다 크고, 스레드는 메모리를 절약하기 위해서 인-메모리에서
   디스크 기반 포멧으로 임시 테이블을 변경시킵니다.
 
6. Creating tmp table
   스레드는 쿼리의 결과 일부를 기억장치에 남겨두기 위해 임시 테이블을 생성함.
 
7. deleting from main table
   서버는 복함-테이블 삭제의 두 번째 부분을 실행하며, 다른 테이블로부터 매치된 로우를 삭제함.
 
8. Flushing tables
   스레드는 FLUSH TABLES를 실행하고 그 테이블을 종료하기 위해서 모든 스레드를 기다립니다.
 
9. FULLTEST initialization
   서버는 자연 언어처리 전문 검색을 준비함.
 
10. Killed
   누군가 KILL 문을 스레드에 보내면 kill 플래그를 체크하여 다음에 중단해야 합니다.
   플래그는 MySQL의 각각의 메이저 루프에서 점검됩니다. 그러나 몇몇의 경우, 스레드가 멈추는데
   짧은 시간이 걸리곤 합니다. 만약 스레드가 몇몇 다른 스레드에 의해 잠겨 있다면, kill은 다른
   스레드가 잠금을 해제하자마자 효력을 나타냅니다.
 
11. Locked
   쿼리는 다른 쿼리에 의해 잠깁니다.
 
12. Sending data
   스레드는 SELECT문으로 로우를 프로세싱하며 데이터를 클라이언트로 보냄.
 
13. Sorting group
   스레드는 GROUP BY 를 만족시키도록 정렬
 
14. Sorting for order
   스레드는 ORDER BY를 만족시키도록 정렬된다.
 
15. Opening tables
    스레드는 테이블을 열러고 합니다. 무언가 오픈을 방해하지 않는다면, 이것은
    매우 빠를 프로시져이다. 예를 들어, ALTER TABLE 또는 LOCK TABLE 문은 문이
    끝날 때 까지 테이블 오픈을 방해할 수 있다.
 
16. Reading from net
   서버는 네트워크로 부터 패킷을 읽음.
 
17. Removing duplicates
   초기단계에서 개별 오퍼레이션을 최적화 할 수 없는 것과 같은 그런 방법에서
   쿼리는 SELECT DISTINCT를 사용하고 있습니다. 이런 이유로 결과를 클라이언트에게
   전달하기 전에 모든 중복된 로우를 제거하기 위해서 MySQL은 별도의 단계가 필요합니다.
 
18. Reopen table
   스레드는 테이블을 잠갔습니다. 그러나 잠근 이후에 뒤에 숨은 테이블 구성이
   변경되었다는 것을 인지합니다. 잠금을 해제하고 테이블을 종료하며 그것을 다시 오픈하려

   합니다.
 
19. Repair by sorting
   복구 코드는 인덱스를 생성하기 위해 사용됩니다.
 
20. Repair with keycache
   복구 코드는 키 캐쉬 메모리를 통해 하나씩 키를 생성하는데 사용합니다.
   이것은 Repair by soting 보다 훨씬 느립니다.
 
21. Searching rows for update
   스레드는 로우를 업데이트하기 전에 모든 부합하는 로우를 찾기 위해 첫번째 단계를 행합니다.
   UPDATE가 관련된 로우를 찾는데 사용된 인덱스를 변경시킨다면, 이것은 실행해야 합니다.
 
22. Sleeping
   새로운 문을 보내기 위해서 스레드는 클라이언트를 기다립니다.
 
23. statistics
   서버는 쿼리 실행 플랜을 발전시키기 위해 통계를 계산합니다.
 
24. System lock
   스레드는 테이블의 외부 시스템 잠금을 기다립니다.
   같은 테이블에 액세스하는 복합 mysqld 서버를 사용하지 않는다면, --skip-external-locking 옵션을
   이용해 시스템 잠금 기능을 억제할 수 있습니다.
 
25. unauthenticated user
   클라이언트 커넥션과 결합되었으나 클라이언트 유저의 인증을 아직 받지 못한 스레드의 상태
 
26. Upgrading lock
   INSERT DELAYED 핸들러는 로우를 삽입하기 위해 테이블을 잠그려고 합니다.
 
27. Updating
   스레드는 업데이트할 로우를 찾아 업데이트 합니다.
 
28. updating main table
   서버는 복합-테이블 업데이트의 첫 번째 부분을 실행합니다.
   그것은 오로지 첫번째 테이블만 업데이트 하며, 다른 (레퍼런스) 테이블을 업데이트하는데
   사용될 필드와 오프셋을 절약합니다.
 
29. updating reference tables
   서버는 복합-테이블 업데이트의 두 번째 부분을 실행하고, 다른 테이블로부터 부합하는 로우를
   업데이트 합니다.
 
30. User Lock
   스레드는 GET_LOCK()을 기다림
 
31. Waiting for tables
   스레드는 테이블의 기초가 되는 체계가 변경되었다는 통보를 받았고, 새로운 체계를 만들기
   위해 테이블을 다시 오픈할 필요가 있습니다. 그러나 테이블을 다시 열기 위해서, 모든 다른
   스레드가 본 건에 대해 테이블을 종료할 때까지 기다려야 합니다.
 
   다른 스레드가 FLUSH TABLES를 사용하거나 또는 다음 문들 중 하나를 테이블에서 사용하면,
   이런 경고가 발생합니다.  
   :FLUSH TABLES tbl_name, ALTER TABLE, RENAME TABLE,REPAIR TABLE, ANALYZE TABLE,    또는 OPTIMIZE TABLE.
 
32. waiting for handler insert
   INSERT DELAYED 핸들러는 모든 팬딩된 삽입을 실행하고 새로운 것을 기다립니다.
 
33. Writing to net
   서버는 네트워크에 패킷을 씀.