InnoDB로 마이그레이션하거나 마이그레이션 할 수있는 테이블과 MyISAM을 유지해야하는 테이블은 무엇입니까? 할 테이블에 대한

제목에 따라 : 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=FIXED72,73 페이지의 사용 을 권장 합니다. 내부적으로 모든 VARCHAR 필드를 CHAR로 변환합니다. MyISAM 테이블은 더 커지지 만 실행 된 SELECT는 훨씬 빠릅니다. 나는 이것을 개인적으로 증명할 수 있습니다. 한때 1.9GB의 테이블이있었습니다. 로 형식을 변경했습니다 ALTER TABLE tblname ROW_FORMAT=FIXED. 테이블은 3.7GB가되었습니다. 그것에 대한 SELECT의 속도는 다른 것을 개선하거나 변경하지 않고 20-25 % 더 빠릅니다.

이것에 대한 유일한 두통은 응용 프로그램이 별도의 읽기 슬레이브를 인식하게 만드는 것입니다.

발문

각 스토리지 엔진의 다른 이점을 살펴 보려면 DBA StackExchange를 확인하십시오.


답변

귀하의 웹 사이트는 읽기가 많은 편이므로 모든 테이블을 InnoDB로 변환하기 만하면됩니다. 그런 다음 InnoDB 버퍼 풀과 쿼리 캐시의 크기를 적절히 조정하여 읽기 성능을 최적화 할 수 있습니다. 이러한 방식으로 Drupal 호스팅 인프라의 전용 데이터베이스 서버에서 초당 수천 개의 쿼리를 달성하고 있습니다.


답변