[mysql] MySQL 명령의 SHOW PROCESSLIST : sleep

MySQL 데이터베이스에서 SHOW PROCESSLIST를 실행하면 다음과 같은 출력이 나타납니다.

mysql> show full processlist;

+--------+------+-----------+--------+---------+-------+-------+-----------------------+
| Id     | User | Host      | db     | Command | Time  | State | Info                  |
+--------+------+-----------+-------+---------+-------+-------+-----------------------+
| 411665 | root | localhost | somedb | Sleep   | 11388 |       | NULL                  |
| 412109 | root | localhost | somedb | Query   |     0 | NULL  | show full processlist |
+--------+------+-----------+-------+---------+-------+-------+------------------------+

명령하에있는 “수면”프로세스를 알고 싶습니다. 무슨 뜻이에요? 왜 오랫동안 실행되고 NULL을 표시합니까? 그것은 데이터베이스를 느리게 만들고 프로세스를 종료하면 정상적으로 작동합니다. 제발 도와주세요.



답변

연결을 기다리는 쿼리가 아닙니다. 타임 아웃이 종료되기를 기다리는 연결 포인터입니다.

성능에 영향을 미치지 않습니다. 모든 연결에서 사용하는 유일한 것은 몇 바이트입니다.

정말 최악의 경우 : 풀의 하나의 연결을 사용하고 있습니다. 콘솔 클라이언트를 통해 여러 번 연결하고 연결을 닫지 않고 클라이언트를 닫으면 모든 연결을 다 사용하고 시간 초과가 다시 연결될 수있을 때까지 기다려야 할 수 있습니다 …하지만 가능성은 거의 없습니다. 🙂

참조 MySQL의 Proccesslist는 “너무 많은 연결”로 이어지는 “수면”항목 가득? /dba/1558/how-long-is-too-long-for-mysql-connections-to-sleep 더 많은 정보를 얻을 수 있습니다.


답변

“절전”상태 연결은 대부분 데이터베이스에 대한 지속적인 연결을 유지하는 코드에 의해 생성됩니다.

여기에는 응용 프로그램 프레임 워크에서 만든 연결 풀이나 클라이언트 측 데이터베이스 관리 도구가 포함될 수 있습니다.

위에서 언급했듯이 이러한 연결에 대해 걱정할 이유가 없습니다.

(주의 : 이러한 종류의 연결 목록이 많으면 동시 연결이 부족할 위험이 있습니다.)


답변

이 답변은 /dba/1558 에서 찾았습니다 . 간단히 말해 다음을 사용하거나 my.cnf 내에서 시간 초과 문제를 제거합니다.

SET GLOBAL interactive_timeout = 180;
SET GLOBAL wait_timeout = 180;

이렇게하면 연결이 3 분 동안 (또는 사용자가 정의한대로) 절전 상태로 유지되면 연결이 종료됩니다.


답변

수면은 스레드가 아무것도하지 않음을 의미합니다. 스레드 쿼리를 수행하기 때문에 시간이 너무 큽니다. 그러나 서버 연결을 끊지 않습니다. 기본값은 wait_timeout = 28800입니다. 따라서 값을 더 작게 설정할 수 있습니다 (예 : 10). 또한 스레드를 종료 할 수 있습니다.


답변