나는 아주 간단한 테이블을 가지고있다.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
명령을 사용하여 새 설정을 확인하십시오.
CREATE INDEX가 실행되는 동안 SHOW PROCESSLIST를 실행하면 CREATE INDEX 프로세스의 상태는 어떻습니까? –
11.5 시간 동안 상태는 "copy to tmp table"이었습니다. –