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.