MySQL 명령의 SHOW PROCESSLIST : sleep


85

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을 표시합니까? 그것은 데이터베이스를 느리게 만들고 프로세스를 종료하면 정상적으로 작동합니다. 제발 도와주세요.


아무것도하지 않고 그냥 앉아서 연결을 "기다립니다".
Rufinus

1
연결을 기다리는 쿼리를 찾을 수 있습니까? 내 질문이 이해가 되나요? 왜 내 데이터베이스 속도가 느려지나요?
gthm

8
연결을 기다리는 쿼리가 아닙니다. 타임 아웃이 종료되기를 기다리는 연결 포인터. 성능에 영향을주지 않습니다. 사용하는 유일한 것은 모든 연결과 마찬가지로 몇 바이트입니다. 정말 최악의 경우는 풀의 하나의 연결을 사용하는 것입니다. 콘솔 클라이언트를 통해 여러 번 연결하고 연결을 닫지 않고 클라이언트를 닫으면 모든 연결을 다 사용할 수 있으며 시간 초과가 다시 연결할 수있을 때까지 기다려야합니다. ... 그러나 이것은 가능성이 매우 낮습니다. :-)
Rufinus

2
@ Rufinus, 나도 같은 문제가 있습니다. 왜 당신은 말하지만 이것은 가능성이 매우 낮 습니까? my.cnf의 구성 시간 초과 연결 수면과 관련된 매개 변수는 무엇입니까?
Hamidreza

답변:


75

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

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

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

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


2
데이터베이스에 대한 연결이 제한된 경우 문제가 될 수 있습니다. 이러한 연결조차도 성능에 영향을 미치지 않기 때문에 여전히 연결로 간주됩니다.
mrded

26

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

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

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

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


5

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

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

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


0

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.