답변:
하드웨어 및 OS가 올바르게 구성 및 조정되었는지 확인하십시오.
MySQL / InnoDB 인스턴스가 올바르게 조정되었는지 확인하십시오.
Load data infile
명령은 일련의 인서트에 훨씬 빠릅니다.select count(*) from table;
myisam보다 innodb의 속도가 훨씬 느립니다.우리 환경에서는 한 가지 유형의 업데이트 쿼리가 느리다는 상황이있었습니다. 배치 작업 완료 예상 시간은 2 일입니다 !!! 느린 쿼리 로그를 분석 한 후이 유형의 업데이트 쿼리를 완료하는 데 4 초가 소요됩니다. 쿼리는 다음과 같습니다
update table1 set field1=value1 where table1.field2=xx table2.field3=yy and table2.field4=zz
. 업데이트 쿼리를 선택 쿼리로 변환하고 찾은 선택 쿼리에 대해 Explain을 실행 한 후이 유형의 쿼리는 인덱스를 사용하지 않습니다. 적절한 인덱스를 생성 한 후 업데이트 쿼리 실행 시간을 밀리 초로 줄이고 전체 작업을 2 시간 이내에 완료했습니다.
유용한 링크들 :
기본 innoDB 설정을 사용하면 트랜잭션을 디스크에 쓰고 플러시 할 수있는 속도로 제한됩니다. 약간의 ACID 손실을 처리 할 수 있으면 innodb_flush_log_at_trx_commit을 실험하십시오. 약 1 초마다 로그를 디스크에 쓰고 플러시하려면 0으로 설정하십시오. 커밋 할 때마다 쓰고 플러시하려면 1 (기본값)로 설정하십시오. 모든 커밋 후에 로그 파일에 쓰지만 초당 1 회만 플러시하려면 2로 설정하십시오.
1 번의 트랜잭션 손실을 처리 할 수 있으면 쓰기 성능을 크게 향상시킬 수 있습니다.
또한 디스크의 작업에주의하십시오. RAID 10> RAID 5는 추가 디스크 비용으로 쓰기 작업을 수행합니다.
잠금 문제는 다음의 연결 상태로 표시됩니다. show full processlist;
my.cnf
및 MySQL 설명서를 읽으십시오 . 구성 옵션은 매우 잘 문서화되어 있습니다.
일반적으로, 가능한 많은 메모리에서 처리되기를 원합니다. 쿼리 최적화를 위해서는 임시 테이블을 피해야합니다. 인덱스의 올바른 적용.
튜닝은 선호하는 데이터베이스 엔진 및 응용 프로그램 아키텍처에 따라 다릅니다. 인터넷 검색에 이미 존재하는 상당한 리소스가 있습니다.
Innodb 모니터를 켜면 잠금 및 교착 상태의 원인을 식별 할 수 있습니다.
InnoDB는 꽤 좋은 엔진입니다. 그러나 '조정'에 크게 의존합니다. 한 가지 사항은 삽입이 기본 키를 늘리는 순서가 아닌 경우 innoDB가 MyISAM보다 약간 오래 걸릴 수 있다는 것입니다. 더 높은 innodb_buffer_pool_size를 설정하면이를 쉽게 극복 할 수 있습니다. 내 제안은 총 RAM의 60-70 %로 설정하는 것입니다. 현재 프로덕션에서 이러한 서버 4 대를 실행하고 있으며 분당 약 350 만 행을 삽입합니다. 그들은 이미 3 테라 바이트에 가깝습니다. InnoDB는 높은 동시 삽입 때문에이어야했습니다. 인서트 속도를 높이는 다른 방법이 있습니다. 그리고 나는 일부를 벤치마킹했습니다.