MySQL이 "데이터 전송"상태에있을 때 무슨 의미입니까?


163

Mysql 쿼리가 의미하는 것은 무엇입니까?

SHOW PROCESSLIST;

상태 열에 "데이터 전송"을 반환합니까?

쿼리가 실행되었고 MySQL이 "결과"데이터를 클라이언트에 보내는 것을 의미한다고 생각하지만 시간이 너무 오래 걸리는 이유가 궁금합니다.

감사합니다.


1
프로세스에서 클라이언트로 데이터를 전송한다는 의미입니다. Sending data실행 SHOW PROFILE후 시간이 걸리는 단계로 보이면 실제로 소비 된 시간이 이전 단계에 속합니다.
NB

불행히도 'SHOW PROFILE'기능이 비활성화되어 있다는 메시지가 나타납니다. 'enable-profileing'으로 MySQL을 빌드해야합니다.
user1345414

그리고 추가 질문입니다. 쿼리는 이미 내부적으로 완료되었습니다. 네트워크 나 버스와 같은 전송을위한 리소스 문제입니까?
user1345414

3
아니, 당신은 듣고 있지 않습니다. Sending data시간이 걸리는 것으로 보이는 이유 는 그것이 MySQL 프로파일 링 버그이기 때문 Executing query입니다. 단지 쿼리를 실행하는 데 시간이 걸린다는 의미입니다. Sending data수백 메가 바이트의 데이터를 스트리밍하지 않는 한 단계는 일반적으로 빠릅니다.
NB

3
아마도 해당 질문의 이름이 "MySQL에서 '데이터 전송'상태의 의미는 무엇입니까"로 변경 될 수 있습니다. 질문을 찾기가 더 쉬울 것입니다.
56

답변:


249

이것은 오해의 소지가 있습니다. "데이터 읽기 및 필터링"이라고합니다.

이것은 MySQL아직 읽히지 않은 디스크 (또는 메모리)에 일부 데이터가 저장되어 있음을 의미합니다 . 테이블 자체, 인덱스, 임시 테이블, 정렬 된 출력 등일 수 있습니다.

하나의 레코드 만 필요한 1M 레코드 테이블 (인덱스 없음)이있는 경우 MySQL아직 아무것도 전송하지 않았음에도 불구하고 테이블을 스캔하는 동안 상태를 "데이터 전송"으로 출력합니다.


12
더 추론 때문에 시간 디스크 액세스를하는 많은의 가능성이 가장 높은 것을 설명 문서 : dev.mysql.com/doc/refman/5.0/en/general-thread-states.html
마태 복음 콜브

4
그리고 디스크 I / O가 거의없이 99 % CPU를 사용하면서 MySQL이 "데이터를 전송"한다면 어떨까요?
rustyx

@RustyX 데이터가 RAM의 버퍼에 이미 존재하고 약 100k 또는 1M 행을 정렬하는 방법은 무엇입니까?
sjas

23

이 상태에서 :

스레드가 SELECT 문에 대한 행을 읽고 처리 하고 클라이언트에 데이터를 전송 중입니다.

이 상태에서 발생하는 작업이이 상태에서 대량의 디스크 액세스 (읽기) 를 수행하는 경향이 있습니다.

그렇기 때문에 완료하는 데 시간이 더 걸리고 지정된 쿼리 수명 동안 가장 오래 실행되는 상태 입니다.

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