Drupal 사이트가 있는데 성능 문제가 있습니다. 내가 찾은 내가 이노에의 MyISAM에서 데이터베이스를 변환하려면 어떻게합니까? 전환하면 성능이 향상 될 수 있음을 나타냅니다.
MySQL 데이터베이스가 InnoDB 또는 MyISAM인지 어떻게 알 수 있습니까?
Drupal 사이트가 있는데 성능 문제가 있습니다. 내가 찾은 내가 이노에의 MyISAM에서 데이터베이스를 변환하려면 어떻게합니까? 전환하면 성능이 향상 될 수 있음을 나타냅니다.
MySQL 데이터베이스가 InnoDB 또는 MyISAM인지 어떻게 알 수 있습니까?
답변:
사용자 정의 쿼리를 실행할 수 있습니다.
SELECT TABLE_NAME, ENGINE
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'database_name'
데이터베이스의 모든 테이블과 각각에 사용되는 엔진을 나열합니다.
또는 phpMyAdmin을 사용하여 데이터베이스에 로그인하고 데이터베이스를 선택할 수 있습니다 ... Type
테이블 목록의 열에 엔진이 표시됩니다.
개인적으로 Navicat for MySQL을 추천 합니다. 매우 훌륭한 MySQL GUI이며 이와 같은 것을 쉽게 찾을 수 있습니다.
출처 : http://www.electrictoolbox.com/mysql-table-storage-engine/
SHOW TABLE STATUS
. 각 엔진 유형에 몇 개의 테이블이 있는지 간단히 계산하려면 SELECT ENGINE,COUNT(TABLE_NAME) FROM information_schema.TABLES WHERE TABLE_SCHEMA='database_name' GROUP BY ENGINE
입니다.
최고의 경험은 테이블 단위로 결정하는 것이 었습니다. InnoDB는 테이블 잠금을 피할 수 있기 때문에 (한 프로세스가 쓰는 동안 테이블에서 다른 프로세스를 읽을 수는 없기 때문에) 훌륭하지만 호출기 쿼리에 자주 사용되는 COUNT ()로 끔찍하게 수행됩니다.
(편집 : 아래의 Clives 의견 참조)
또한 사용중인 DB에 따라 MySQL 설정에 영향이 있습니다. 서버에 액세스 할 수 있으면 mysqltuner가 첫 번째 단계로 구성을 확인해야합니다.
COUNT
에 따라, 쿼리 의 MySQL의 이전 고성능 그룹 관리자에 의해이 문서 는 단지 정말이 포함 된 쿼리에 영향을하지만 COUNT(*)
하지 않고WHERE
절을.
SELECT COUNT(*) FROM table
이 해당 값으로 즉시 리턴 할 수 있음을 의미합니다 . InnoDB는 그렇지 않으므로 전체 기본 키 인덱스를 스캔해야합니다. Drupal은 많은 작업을 수행하지만 SELECT COUNT(*)
, 전체 코드에서 WHERE
절 없이 수행하는 한 곳만 생각할 수 있습니다 . 따라서이 특별한 경우에 대해 MyISAM을 걱정하지 마십시오. 적당한 크기의 버퍼 풀이있는 InnoDB는 모든 실제 쿼리에서 더 빠릅니다.
웹 사이트를 더 빨리 얻기 위해 노력하는 것은 맹목적으로 변화하는 자동차와 같으며 다음에 더 빨리 자동차를 구입하기를 바랍니다.
먼저 낮은 매달린 과일을 시도하십시오. 도움이되지 않으면 실제 병목 현상을 찾으십시오.
종종 인덱스가 필요한 느린 DB 쿼리이거나 느린 방식으로 작업을 수행하는 모듈입니다.
또한 호스트 간의 큰 차이점도 발견했습니다. 상자에서 신선한 드루팔을 설치하면 성능이 정상입니까? 그렇지 않은 경우 다른 호스트를 찾아야합니다.
거의 20K 노드 Drupal 6.x 사이트에서 일부 성능 문제가 발생하여 모든 테이블을 InnoDB로 옮기기로 결정했습니다. 내가 다루는 방식은 mysqldump를 사용하여 모든 내용을 sql 파일로 덤프하고 편집기 (sed)를 사용하여 모든 MyISAM 항목을 InnoDB로 바꾼 다음 해당 파일에서 데이터베이스를 다시로드하는 것이 었습니다. 단점 중 하나는 InnoDB 데이터베이스 (IIRC)에서 공간을 복구 할 수 없지만 중복 테이블을 별도의 DB에 보관하는 한 아무런 문제가 없다는 것입니다. 아, 그리고 성능이 크게 향상되었습니다. 그리고 Drupal 인스턴스가 4 개이기 때문에 파일 시스템에서 많은 수의 테이블 파일이 제거되었습니다 (예, InnoDB 파일 자체에 포함되어 있음). 이것은 내 $ .02 가치입니다.
innodb_file_per_table
옵션 사용을 선호합니다 .
for tbl in $(mysql -Ne 'show tables' databasename); do mysql -e "ALTER TABLE $tbl ENGINE=InnoDB"; done
. 필요한 경우 -uroot -psomepass
두 옵션에 적절한 옵션 ( 예 :)을 추가하십시오 mysql
.
그냥 머리 위로. Drupal 6을 사용하는 경우 DBTuner 모듈을 설치할 수 있습니다 . MyISAM에서 InnoDB로 테이블을 쉽게 옮길 수 있습니다. 예, 그 모듈이 있습니다!