제목에 따라 : InnoDB로 마이그레이션 할 테이블에 대한 빠른 후보 목록이 있습니까? 그리고 MyISAM으로 남아 있어야 할 것은 무엇입니까?
추가 정보
- 이 사이트에는 상당히 많은 읽기로드가 있지만 태그와 함께 시간당 약 10 개의 노드를 삽입합니다.
- 우리는 CCK (의 형식으로 많은 양의 정규화 된 테이블
content_field%
)를 많이 사용합니다. - 또한 모든 블록과 페이지에 대해 뷰 를 사용 합니다. 그러나 많은 것들이 데이터베이스 쿼리와 그 쿼리의 무거움을 줄이기 위해 사용자 정의 모듈로 대체 할 수 있습니다.
- 사용자는 모두 익명입니다. 로그인 한 편집자와 웹 마스터를 제외하고
답변
테이블 잠금 문제를 방지하려면 모든 데이터를 InnoDB로 변환해야합니다. 그러나 다음은 고려해야 할 사항입니다.
전체 텍스트 인덱싱
현재는 MyISAM 만 FULLTEXT 인덱싱을 지원합니다. InnoDB에 대한 FULLTEXT 인덱싱은 현재 MySQL 5.6에서 작동하지만 프로덕션 준비가 아닙니다 . FULLTEXT 인덱스가있는 Drupal 테이블이 있으면 현재 InnoDB로 변환 할 수 없습니다.
FULLTEXT 인덱싱에 대한 업데이트
MySQL 5.6은 이제 GA (생산 용도로 사용)입니다. InnoDB에서 FULLTEXT 인덱싱을 시도하십시오.
FULLTEXT
인덱스 가있는 테이블을 찾으려면 다음 쿼리를 실행하십시오.
SELECT table_schema,table_name
FROM information_schema.statistics
WHERE index_type='FULLTEXT';
행이 다시 나타나지 않으면 모든 InnoDB 테이블을 마음의 내용으로 변환하십시오. mysql 만 사용하여 모든 MyISAM 테이블을 InnoDB로 변환하는 방법에 대한 이전 게시물을 작성했습니다 .
MySQL 복제
읽기가 많은 환경 인 경우 다음을 수행하면 MyISAM에서 읽기가 더 빨라질 수 있습니다.
- 마스터 / 슬레이브 복제 설정
- 마스터 아래에 하나 이상의 읽기 슬레이브 생성
--skip-innodb
모든 슬레이브에서 /etc/my.cnf에 추가 (데이터를 슬레이브로로드 할 때 테이블을 MyISAM으로 변환)- 이 명령으로 모든 슬레이브에서 모든 MyISAM 테이블의 행 형식을 FIXED로 변경하십시오.
ALTER TABLE tblname ROW_FORMAT=FIXED;
- DBA StackExchange에 이것에 뭔가를 게시했습니다.
- MySQL Database Design and Tuning 책은
ROW_FORMAT=FIXED
72,73 페이지의 사용 을 권장 합니다. 내부적으로 모든 VARCHAR 필드를 CHAR로 변환합니다. MyISAM 테이블은 더 커지지 만 실행 된 SELECT는 훨씬 빠릅니다. 나는 이것을 개인적으로 증명할 수 있습니다. 한때 1.9GB의 테이블이있었습니다. 로 형식을 변경했습니다ALTER TABLE tblname ROW_FORMAT=FIXED
. 테이블은 3.7GB가되었습니다. 그것에 대한 SELECT의 속도는 다른 것을 개선하거나 변경하지 않고 20-25 % 더 빠릅니다.
이것에 대한 유일한 두통은 응용 프로그램이 별도의 읽기 슬레이브를 인식하게 만드는 것입니다.
발문
각 스토리지 엔진의 다른 이점을 살펴 보려면 DBA StackExchange를 확인하십시오.
Apr 14, 2011
: InnoDB와 MyISAM의 주요 차이점은 무엇입니까?Sep 20, 2011
: MyISAM 및 InnoDB 최고May 02, 2012
: 어떤 MySQL 스토리지 엔진을 선택해야합니까?May 03, 2012
: InnoDB 또는 MyISAM 중 어느 것이 더 빠릅니까?
답변
귀하의 웹 사이트는 읽기가 많은 편이므로 모든 테이블을 InnoDB로 변환하기 만하면됩니다. 그런 다음 InnoDB 버퍼 풀과 쿼리 캐시의 크기를 적절히 조정하여 읽기 성능을 최적화 할 수 있습니다. 이러한 방식으로 Drupal 호스팅 인프라의 전용 데이터베이스 서버에서 초당 수천 개의 쿼리를 달성하고 있습니다.