2009-11-03 3 views
0

MySQL 데이터베이스를 사용하는 프로그램을 작성했으며 데이터베이스 서버 (매우 강력한 서버)와 클라이언트 간의 트랜잭션이 ADSL 연결 (1 Mbit/s) 이상 발생했습니다.MySQL 패킷 크기가 감속을 유발합니까?

하지만 각 클라이언트와 서버간에 매우 느린 연결이 있습니다. 약 3-4 KB/s 데이터 만 서버를 통해 전송됩니다. 서버 나 클라이언트는 다른 용도로 인터넷을 사용하지 않으며, 내 프로그램은 인터넷을 사용합니다.

왜 그런지 알 수 없습니까? 이유는 MySQL 서버 패킷 크기입니까?

제안 사항?

+0

실제로 경기 침체의 이유가 무엇인지 설명해 주시겠습니까? –

+0

@Daniel Schneller 어 - 오 죄송합니다. 나는 큰 이노 테이블을 "SELECT COUNT (*) FROM"테이블을 사용하고 그것은 감속을 일으킨다. 필자는 프로그래밍 아이디어를 바꿨으며 이제는 MySQL이 매우 빠르게 향상되었습니다. – rasputin

답변

1

mytop을 사용해 서버 성능 저하 원인을 확인하십시오. 또 하나 : 테이블 스캔을 유발하는 큰 InnoDB 테이블에 대해 SELECT COUNT (*) FROM ..을 사용할 수 있습니다.

그리고 기계 간의 교환 데이터 속도가 괜찮은지 다른 서비스를 테스트해볼 수 있습니까? ADSL 사용자의 출력 대역폭이 더 낮더라도 3-4 kB는 성능 저하의 원인이 아닐 수도 있습니다.

1

먼저 두 연결을 디버깅해야합니다.

WinSCP (으)로 파일을 업로드하는 경우 업로드 속도는 얼마입니까? 그것은 ADSL 1 Mbit/s로 90 KB/s 가까이 있어야합니다.

+0

확인했지만 서버의 업로드 속도는 80kb/s 이상입니다. 다른 아이디어가 있습니까? – rasputin

+0

SQLyog 또는 유사한 GUI를 사용하여 테스트 SHOW FULL PROCESSLIST를 시도하십시오. 다른 검색어가 있는지 확인하십시오. 구성 확인 : SHOW VARIABLES; max_allowed_packet은 '대역폭'에 영향을주지 않습니다. – jujule

1

유효 전송률은 클라이언트와 서버 간의 왕복 횟수에 의해 크게 제한됩니다. 코드를 보지 않고는 말할 수 없지만 발생하는 요청 수를 확인해야합니다. 하나의 요청으로 인해 많은 레코드가 반환되는 경우 각 행을 몇 개만 전달하는 것보다 많은 수의 요청보다 대역폭을 더 잘 사용해야합니다. 후자의 경우 실제 결과 전송은 아마도 매우 빠르지 만 "제어 통신"(즉, 명령문 자체, 로그인 요청 등)에 수반되는 대기 시간이 합쳐져 전체 처리량을 효과적으로 낮추게됩니다.

패킷 크기는 매우 작 으면 통신에 오버 헤드가 많아 상기 효과가 증가합니다. 메모리가 작동하는 경우 서버의 기본값은 max_allowed_packet이고 크기가 1MB이면 연결에 문제가 없습니다.