MySQL 데이터베이스 엔진을 어떻게 선택합니까


16

특히, 필요한 기능이 누락되지 않은 경우 (예 : 외래 키가 필요하지 않은 경우) MyISAM과 InnoDB 중에서 어떻게 선택합니까?

항상 두 가지 모두 시도하고 측정합니까? 또는 읽기 횟수와 쓰기 횟수 및 빈도와 관련하여 좋은 경험 규칙이 있습니까? 테이블 크기가 일반적인 선택에 영향을 줍니까?

답변:


6

정답은 항상 가능한 경우 자신의 데이터와 작업량으로 측정하는 것이 좋습니다.

데이터 액세스 패턴은 앱마다 크게 다를 수 있으므로 모든 워크로드에 대해 "최상의"스토리지 엔진을 결정하는 것은 어렵습니다.

그러나 지난주 MySQLConf / Percona Performance Conf에 참석 한 MySQL 공간에서 매우 고무적인 개발이 이루어지고 있습니다.

대체 스토리지 엔진 중 일부 :

  1. XtraDB (InnoDB 포크)
  2. InnoDB 플러그인
  3. PBXT
  4. TokuDB

또한 Percona, Google 등은 InnoDB 성능에 큰 도움이되는 패치를 제공했습니다. 개인적으로 OurDelta 빌드를 실행합니다. 그것은 나에게 잘 작동하며 OurDelta 및 Percona 빌드를 확인하는 것이 좋습니다.


벤치 마크에 관심이 있다면 sysbench 또는 iibench를 시도하십시오.
Jauder Ho

대체 스토리지 엔진 중 어느 것이 생산 현장에 적합 할만큼 안정적입니까?
Tony Meyer

Don MacAskill은 XtraDB를 프로덕션 환경에 도입하려고합니다. YMMV.
Jauder Ho

성능이 유일한 요구 사항은 아닙니다. 운영 문제도 고려하십시오 (사실 경험상 일반적으로 더 중요합니다)
MarkR

원래 요청이 성능에 대해 더 많이 요구한다고 생각하지만 성능이 유일한 요구 사항은 아닙니다. 운영 (지시 한대로) 및 기능과 같은 기타 고려 사항은 모두 선택 과정에서 중요한 역할을합니다.
Jauder Ho

5

단순한 상점 / 보고서 시스템이라면 MyISAM을 원시 성능으로 사용합니다.

행 수준 잠금을 활용하기 위해 많은 쓰기로 여러 동시 액세스에 관심이있는 경우 InnoDB를 사용합니다.


1
읽기와 쓰기를 혼합하는 모든 워크로드의 경우 InnoDB가 유일한 옵션입니다 (현재 배송 중).
Dave Cheney

4

다양한 MySQL 데이터베이스 엔진에 대한 많은 벤치 마크가 있습니다. Percona MySQL 퍼포먼스 블로그 에서 MyISAM, InnoDB 및 Falcon을 비교하는 것이 괜찮 습니다 . 여기를 참조 하십시오 .

위에서 언급 한 두 엔진 (MyISAM과 InnoDB) 사이에서 고려해야 할 또 다른 사항은 잠금 방법입니다. MyISAM은 테이블 잠금을 수행하는 반면 InnoDB는 행 잠금을 수행합니다. 완벽한 성능 수치뿐만 아니라 다양한 고려 사항이 있습니다.


4

응용 프로그램에서 절대적으로 요구하지 않는 경우에도 운영상의 이유로 매우 유용한 기능이 있습니다.

  • InnoDB에는 MVCC가있어 비 차단 일관성있는 백업을 수행 할 수 있습니다.
  • InnoDB에는 자동 복구 기능이있어 부정확 한 종료 후 긴 REPAIR TABLE 작업이 필요하지 않습니다
  • InnoDB를 사용하면 독자는 절대로 작가를 차단하지 않으며 그 반대도 마찬가지입니다 (일반적으로 말하면).
  • InnoDB는 기본 키에 행을 클러스터링하는데, 이는 기본 키가 충분히 잘 선택된 경우 읽기 작업을위한 적은 IO 작업을 의미 할 수 있습니다.

따라서 외래 키 제약 조건에도 불구하고 어쨌든 InnoDB를 사용하고 싶을 것입니다.

물론 이것은 스택 오버플로가 아닌 ServerFault이므로 올바른 대답은 다음과 같습니다.

  • 항상 응용 프로그램 개발자가 선택한 엔진을 사용해야합니다
  • 특정 엔진을 선택하지 않았다면 MySQL 사용에 대해 심각하지 않으며 제대로 사용하는 방법을 모를 것입니다.
  • 응용 프로그램을 테스트 한 엔진과 다른 엔진으로 전환 할 수 없으며 버그가 발생할 수 있습니다.

2
데이터베이스 엔진이 관리자가 아니라 개발자의 결정이라고 생각하십니까? 개발자로서 저는 "이 데이터를 가지고 있으며,이 작업을 수행 할 것"이라고 말하고 데이터베이스의 최적화 (및 백업 등)를 관리자에게 맡기고 싶습니다.
Tony Meyer

1
예, 개발자는 특정 엔진에 대해 앱을 개발하고 테스트 할 수 있어야합니다. 기능적으로나 성능면에서 크게 다르게 행동합니다.
MarkR

2

호스팅 제공 업체는 MyISAM을 완전히 제거하고 가능하지 않은 경우 InnoDB로 전환하라고 조언했습니다.

우리의 경우에는 하루에 몇 번에서 몇 번까지 심각한 데이터 손상이 발생하기 때문에 항상 REPAIR TABLE 및 관련 명령이 필요합니다.

일단 우리가 InnoDB로 변환 (또는 변환)되면 문제는 즉시 사라졌습니다. 우리가 가진 단점 / 구멍 :

  • FULLTEXT 색인으로 테이블을 변환 할 수 없습니다 (이 문제는 시간이 지남에 따라 사라졌습니다. 어쨌든 품질이 훨씬 우수한 Solr / Lucene 기반 솔루션으로 대체되었습니다)
  • 종종 COUNT (*)를 요구하는 수백만 행의 큰 테이블은 매우 느리게 전환 할 수 없었습니다.

그러나 참고 : 이것은 우리 환경 등에 따라 다르므로 일반적으로 적용되지 않을 수 있습니다.


MyISAM에서는 테이블에서 select count ( )빠릅니다. column = value가 MyISAM 및 InnoDB에서 유사한 성능을 갖는 테이블에서 count ( )를 선택하십시오 . mysqlperformanceblog.com/2006/12/01/count-for-innodb-tables
sumar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.