2009-10-09 3 views
2

나는 아주 간단한 테이블을 가지고있다.MySQL 인덱스 생성 속도가 느립니다 (EC2에서).

requestparams (
    requestid varchar(64) NOT NULL, 
    requestString text, 
) ENGINE=MyISAM; 

"LOAD DATA"라는 테이블을 채운 후에 스키마를 변경하고 "requestid"기본 키를 만들고있다.

이 테이블에는 1100 만 개의 행이 있고 데이터 크기는 2GB (MYD 파일의 크기) 미만입니다. 인덱스 파일 크기는 프로세스가 끝날 때 약 600M입니다.

내 노트북에서 색인 생성 시간이 20 분 미만입니다. 하지만 아마존의 EC2 (중간 인스턴스)에서 프로세스를 실행했을 때 프로세스는 12 시간 이상이 걸렸습니다. 전체 프로세스 동안, 디스크는 40-100 %의 IO 대기 (top 참조)로 매우 훌륭했습니다. CPU가 대부분 유휴 상태였습니다. 나는 EC2의 디스크가 그렇게 느리다 고 생각하지 않는다.

MySQL 메일 링리스트에서 일부는 서버 변수 myisam_sort_buffer_size & myisam_max_sort_file_size를 변경하도록 제안했습니다. 나는 각각 512MB & 4GB로 설정했다. 그러나 색인 생성은 똑같이 느렸다. 사실, MySQL의 메모리 사용량은 거의 40M을 넘지 않았습니다.

어떻게 수정합니까?

솔루션 : "key_buffer_size"를 늘리면 도움이되었습니다. 이 값을 1GB로 설정하고 프로세스가 4 분 내에 완료되었습니다. mysqladmin variables 명령을 사용하여 새 설정을 확인하십시오.

+0

CREATE INDEX가 실행되는 동안 SHOW PROCESSLIST를 실행하면 CREATE INDEX 프로세스의 상태는 어떻습니까? –

+0

11.5 시간 동안 상태는 "copy to tmp table"이었습니다. –

답변

2

받은 제안이 정확합니다. 나는 당신이 만든 변화가 실제로 효력을 발휘하지 않았다고 생각합니다. my.cnf를 변경하고 서버를 다시 시작하십시오.

+0

예, my.cnf를 변경하고 서버를 다시 시작했습니다. 그러나 도움이되지 않았습니다. –

+0

SHOW VARIABLES LIKE 'myisam_sort %'를 실행하면 어떻게됩니까? - 출력을 여기에 붙여 넣을 수 있습니까? –

+0

이러한 값이 예상대로라면 "key_buffer_size"및 "sort_buffer_size"를 늘릴 것을 고려할 수도 있습니다. 특히 이전의 –