주로 MyISAM 테이블이있는 경우 대량 삽입 버퍼를 늘려야합니다 . 다음은 bulk_insert_buffer_size 설정에 대한 MySQL 설명서의 내용입니다 .
MyISAM은 특수 트리와 같은 캐시를 사용하여 비어 있지 않은 데이터를 추가 할 때 INSERT ... SELECT, INSERT ... VALUES (...), (...), ... 및 LOAD DATA INFILE에 대한 대량 삽입을 더 빠르게 만듭니다. 테이블. 이 변수는 캐시 트리의 크기를 스레드 당 바이트 수로 제한합니다. 0으로 설정하면이 최적화가 비활성화됩니다. 기본값은 8MB입니다.
당신이해야 할 두 가지가 있습니다
1) /etc/my.cnf에 추가하십시오
[mysqld]
bulk_insert_buffer_size=512M
2) 글로벌 가치 설정
SET GLOBAL bulk_insert_buffer_size = 1024 * 1024 * 512;
bulk_insert_buffer_size를 전체적으로 설정할 권한이없는 경우 다음을 수행하십시오.
service mysql restart
물론 이것은 InnoDB를위한 것이 아닙니다.
다른 각도에서 테이블이 InnoDB이든 MyISAM이든 인덱스가 테이블보다 크면 인덱스가 너무 많을 수 있습니다. 나는 보통 MyISAM mysqldump의 재로드가 mysqldump가 만드는 데 3 배가 걸린다는 것을 손님에게 이야기한다. 또한 InnoDB mysqldump의 재로드는 mysqldump가 만드는 데 4 배가 걸린다는 것을 손님에게 이야기합니다.
mysqldump를 다시로드 할 때 4 : 1 비율을 초과하는 경우 다음 두 가지 문제 중 하나가 발생합니다.
- 너무 많은 색인
- 큰 열로 인해 너무 큰 인덱스
다음을 사용하여 스토리지 엔진별로 데이터 크기를 측정 할 수 있습니다.
SELECT IFNULL(B.engine,'Total') "Storage Engine",
CONCAT(LPAD(REPLACE(FORMAT(B.DSize/POWER(1024,pw),3),',',''),17,' '),' ',
SUBSTR(' KMGTP',pw+1,1),'B') "Data Size", CONCAT(LPAD(REPLACE(
FORMAT(B.ISize/POWER(1024,pw),3),',',''),17,' '),' ',
SUBSTR(' KMGTP',pw+1,1),'B') "Index Size", CONCAT(LPAD(REPLACE(
FORMAT(B.TSize/POWER(1024,pw),3),',',''),17,' '),' ',
SUBSTR(' KMGTP',pw+1,1),'B') "Table Size" FROM
(SELECT engine,SUM(data_length) DSize,SUM(index_length) ISize,
SUM(data_length+index_length) TSize FROM
information_schema.tables WHERE table_schema NOT IN
('mysql','information_schema','performance_schema') AND
engine IS NOT NULL GROUP BY engine WITH ROLLUP) B,
(SELECT 3 pw) A ORDER BY TSize;
인덱스가 데이터보다 크거나 같은지 확인하십시오
다음과 같이 이진 로깅을 비활성화하는 것을 고려할 수도 있습니다.
echo "SET SQL_LOG_BIN=0;" > footable.sql
mysqldump --databases foo >> footable.sql
스크립트를 다시로드하기 전에