Drupal 데이터베이스 innodb 또는 MyISAM?


10

Drupal 사이트가 있는데 성능 문제가 있습니다. 내가 찾은 내가 이노에의 MyISAM에서 데이터베이스를 변환하려면 어떻게합니까? 전환하면 성능이 향상 될 수 있음을 나타냅니다.

MySQL 데이터베이스가 InnoDB 또는 MyISAM인지 어떻게 알 수 있습니까?


1
테이블 유형이 카탈로그에 연결되어 있지 않습니다. MyISAM과 InnoDB 테이블이 혼합 된 카탈로그를 가질 수 있습니다.
mpdonadio

2
해당 수준에서 최적화하면 이점이 있지만 테이블 유형을 변경하면 성능 문제가 해결 될 것입니다. 차이점은 그렇게 크지 않습니다.
Letharion

1
@Chris J. Lee, 맞습니다. 혼합 테이블 유형은 성능상의 이유로 사용되거나 특정 테이블 유형 (예 : MyISAM 테이블이있는 FULLTEXT 검색)에서만 사용 가능한 기능을 이용할 수 있습니다. mysqld 기본값을 변경하고 카탈로그에 더 많은 테이블을 생성하면 우연히 발생할 수도 있습니다. :
mpdonadio

2
무기력 : 그것은 단지 틀린 것입니다. 테이블 유형 및 mysql 구성 방법은 성능에 큰 영향을 미칩니다!
Walter Heck

2
@Letharion : 사실 아키텍처 개선을 제외하고 SELECT와 UPDATE가 혼합 된 동시성 등의 경우 성능이 크게 향상됩니다. UPDATE는 MyISAM의 테이블을 잠그지 만 InnoDB의 행만 잠그면 성능이 크게 향상 될 수 있습니다. 테이블 엔진을 바꾸는 것 이상으로 볼 수 있습니다. 이제 어리석은 쿼리를 수행하는 경우 어리석은 쿼리를 수행하므로 테이블 유형을 변경해도 도움이되지 않습니다. 그러나 엔진 교체를 무시하는 것도 똑같이 잘못되었습니다.
BMDan

답변:


8

사용자 정의 쿼리를 실행할 수 있습니다.

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/


이전 MySQL 관리자 도구도 이와 같은 작업에 적합합니다. MySQL 웹 사이트를 둘러 보더라도 설치 프로그램을 찾을 수 있습니다.
mpdonadio

@MPD 와우 아직도 그래? 약간의 향수 만이라도 다운로드해야합니다 :)
Clive

이제 관리자 및 쿼리 브라우저는 공식적으로 사용되지 않으며 지원되지 않지만 여전히 다운로드 할 수 있습니다. 나는 Workbench를 싫어하고 여전히 이것을 사용합니다.
mpdonadio

명령 행에서 phpMyAdmin에서 본 것과 유사한 출력을 보려면을 사용하십시오 SHOW TABLE STATUS. 각 엔진 유형에 몇 개의 테이블이 있는지 간단히 계산하려면 SELECT ENGINE,COUNT(TABLE_NAME) FROM information_schema.TABLES WHERE TABLE_SCHEMA='database_name' GROUP BY ENGINE입니다.
BMDan

6

최고의 경험은 테이블 단위로 결정하는 것이 었습니다. InnoDB는 테이블 잠금을 피할 수 있기 때문에 (한 프로세스가 쓰는 동안 테이블에서 다른 프로세스를 읽을 수는 없기 때문에) 훌륭하지만 호출기 쿼리에 자주 사용되는 COUNT ()로 끔찍하게 수행됩니다.

(편집 : 아래의 Clives 의견 참조)

또한 사용중인 DB에 따라 MySQL 설정에 영향이 있습니다. 서버에 액세스 할 수 있으면 mysqltuner가 첫 번째 단계로 구성을 확인해야합니다.

https://github.com/rackerhacker/MySQLTuner-perl#readme


2
+1 나는 InnoDB하지만 느린 몰랐 COUNT에 따라, 쿼리 의 MySQL의 이전 고성능 그룹 관리자에 의해이 문서 는 단지 정말이 포함 된 쿼리에 영향을하지만 COUNT(*) 하지 않고WHERE 절을.
Clive

3
그 이유는 MyISAM이 테이블의 행 수에 대한 테이블 당 값을 유지하기 때문입니다. 이는 단순 SELECT COUNT(*) FROM table이 해당 값으로 즉시 리턴 할 수 있음을 의미합니다 . InnoDB는 그렇지 않으므로 전체 기본 키 인덱스를 스캔해야합니다. Drupal은 많은 작업을 수행하지만 SELECT COUNT(*), 전체 코드에서 WHERE절 없이 수행하는 한 곳만 생각할 수 있습니다 . 따라서이 특별한 경우에 대해 MyISAM을 걱정하지 마십시오. 적당한 크기의 버퍼 풀이있는 InnoDB는 모든 실제 쿼리에서 더 빠릅니다.
BMDan

6

웹 사이트를 더 빨리 얻기 위해 노력하는 것은 맹목적으로 변화하는 자동차와 같으며 다음에 더 빨리 자동차를 구입하기를 바랍니다.

먼저 낮은 매달린 과일을 시도하십시오. 도움이되지 않으면 실제 병목 현상을 찾으십시오.

  1. 페이지 캐싱 (익명 사용자에게만 유효), CSS 및 JS 집계와 같은 기본 메커니즘을 설정 했습니까?
  2. 호스트가 APC와 같은 opcode 캐시를 제공하는 경우 켜십시오.
  3. 전체 DB를 포함하여 Drupal 지역을 설정하십시오.
  4. XDebug가 실행 중인지 확인하십시오.
  5. 실제 성능 프로파일 링을 시작하십시오. 이렇게하면 웹 사이트의 어느 부분이 많은 시간을 소비하는지 식별 할 수 있습니다. 웹 사이트가 느릴수록 유죄 코드 / 구성 요소를 쉽게 찾을 수 있습니다.

종종 인덱스가 필요한 느린 DB 쿼리이거나 느린 방식으로 작업을 수행하는 모듈입니다.

또한 호스트 간의 큰 차이점도 발견했습니다. 상자에서 신선한 드루팔을 설치하면 성능이 정상입니까? 그렇지 않은 경우 다른 호스트를 찾아야합니다.


5

거의 20K 노드 Drupal 6.x 사이트에서 일부 성능 문제가 발생하여 모든 테이블을 InnoDB로 옮기기로 결정했습니다. 내가 다루는 방식은 mysqldump를 사용하여 모든 내용을 sql 파일로 덤프하고 편집기 (sed)를 사용하여 모든 MyISAM 항목을 InnoDB로 바꾼 다음 해당 파일에서 데이터베이스를 다시로드하는 것이 었습니다. 단점 중 하나는 InnoDB 데이터베이스 (IIRC)에서 공간을 복구 할 수 없지만 중복 테이블을 별도의 DB에 보관하는 한 아무런 문제가 없다는 것입니다. 아, 그리고 성능이 크게 향상되었습니다. 그리고 Drupal 인스턴스가 4 개이기 때문에 파일 시스템에서 많은 수의 테이블 파일이 제거되었습니다 (예, InnoDB 파일 자체에 포함되어 있음). 이것은 내 $ .02 가치입니다.


2
단일 InnoDB 테이블 스페이스를 사용하면 디스크 공간을 희생시키면서 inode를 절약 할 수 있지만 (자신이 언급 한대로) 많은 양의 데이터를 삭제하더라도 해당 디스크 공간을 회수 할 수 없습니다. 또한 불필요한 큰 백업 파일이 생성되고 단일 테이블을 복원 할 수 없습니다. 그래서 innodb_file_per_table옵션 사용을 선호합니다 .
geewiz 2013

1
또한 테이블을 제자리에서 변환 할 수 있습니다 for tbl in $(mysql -Ne 'show tables' databasename); do mysql -e "ALTER TABLE $tbl ENGINE=InnoDB"; done. 필요한 경우 -uroot -psomepass두 옵션에 적절한 옵션 ( 예 :)을 추가하십시오 mysql.
BMDan

5

그냥 머리 위로. Drupal 6을 사용하는 경우 DBTuner 모듈을 설치할 수 있습니다 . MyISAM에서 InnoDB로 테이블을 쉽게 옮길 수 있습니다. 예, 그 모듈이 있습니다!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.