2011-10-30 3 views
0

mysql myisam 테이블 (ID, 타임 스탬프, 데이터)에 ~ 30k 바이트 데이터를 삽입하는 다중 프로세스 스크립트가 있습니다. 처음에는 모든 것이 매우 빠르지 만 얼마 후 (약 20-30 초) 삽입 시간이 몇 ms에서 1-2 초로 증가합니다.MySQL 삽입 성능 드롭 다운

나는 MySQL이 디스크에 데이터를 쓰고있는 것을 보았는데, 그 후에 잠시 좋은 성능을 보였습니다. 나는 벌크 삽입 버퍼 크기를 다른 값으로 설정하려했지만 효과가 없었다.

MySQL을 더 자주 작성하지만 작은 배치로 강제 작성하는 방법이 있습니까? 또는 한 수준에 속도를 삽입하는 다른 방법이 있습니까?

LOCK TABLE table 
(Do all your inserts) 
UNLOCK TABLE table 

이 때문에 인덱스의 아마 느린 :

+0

하드웨어 설정을 모르고도 정확하게 대답하기는 어렵습니다. –

+0

캐시 및 버퍼 크기와 관련된 MySQL 구성 파일의 섹션이 있습니다. – Jared

답변

1

이 시도해보십시오. 위의 명령은 인덱스를 다시 작성하기 전에 MySQL에 모든 데이터를 추가하도록합니다.

또한 인덱스를 작성할 때 디스크에 쓰고있는 것처럼 보이기 때문에 /etc/my.ini 설정을 편집하여 MySQL에 더 많은 RAM을 제공 할 수 있습니다.

또는 MySQL의 tmp 디렉토리를 RAM 드라이브로 변경하는 것이 바람입니다. 그런 다음 디스크에 쓰고 있다고 생각하는 경우에도 메모리에 쓰게됩니다.

+0

시도해보십시오. 그러나 하드웨어에서 많은 것을 얻고 싶었고 동일한 데이터를 HDD에 똑같이 쓰는 경우조차도 같은 방식으로 끝났습니다. – Fuxi

+0

당신은 MySQL 메모리 테이블을 사용할 수 있으며, 이것을 삽입 후 이것을 다시 일반 테이블로 변환하면 더 빠를 것이다. – Alasdair

+0

불행히도 데이터를 지속적으로 작성해야하므로 일반 테이블로 변환 할 시간이 없습니다. – Fuxi

관련 문제