동일한 서버에서 InnoDB 및 MyISAM 테이블을 혼합하는 것이 일반적입니까?


21

8GB RAM이있는 서버에서 실행되는 약 4.5GB의 단일 데이터베이스가 있습니다. 대부분의 테이블은 MyIsam (약 4.3GB)이지만 곧 일부를 InnoDB 로 변환 할 예정 입니다. (처음에는 쓰기 집약적 인 테이블에 중점을 둔 느린 프로세스가 될 것입니다).

두 가지 유형의 스토리지 엔진이 모두있는 전용 서버를 실행하는 데 문제가 있습니까?


Is there anything wrong with running a dedicated server where both types of storage engines exist? 어쩌면 Multiple types?
John

내가 '둘 다'라고 말한 유일한 이유는이 질문이 '미세하게 조정'되도록 구성된 두 개의 주요 엔진에 관한 것이기 때문입니다. MEMORY 또는 MERGE와 같은 다른 유형의 엔진을 무시하려고하는데 afaik이 성능 조정의 대상이 아닐 정도로 드문 경우입니다.
데릭 다우니

답변:


18

각각의 장단점을 이해하는 한 동일한 물리적 시스템에서 여러 스토리지 엔진을 사용하는 데 아무런 문제 가 없습니다 . 모든 플러그인 스토리지 유형에 대한 성능 고려 사항, 기능 제한 사항 및 유스 케이스가 있습니다.

예를 들어, 쓰기가 90 % 인 작은 테이블이 있으면 MyISAM을 선택할 수 있습니다. 데이터를 쉽게 재생성 할 수 있고 큐와 같이 작은 테이블 인 경우 메모리를 선택할 수 있습니다. 읽기가 90 % 인 테이블이 있고 데이터를 찾을 때 데이터가 있으면 InnoDB와 같이 트랜잭션 및 구성 가능한 원 자성을 지원하는 스토리지 엔진을 선택했을 것입니다. 데이터를 손상시키지 않고 파일 시스템을 통해 접근성을 원한다면 CSV를 선택할 수 있습니다.

그럼에도 불구하고 물리적 호스트뿐만 아니라 동일한 스키마 내에서 여러 스토리지 엔진을 안전하게 사용할 수 있습니다.

그래도 버퍼가이 엉망진창에 영향을 미칩니다. MyISAM과 InnoDB를 모두 사용하는 경우 key_buffer와 innodb_buffer_pool이 경쟁하지 않도록주의해야합니다. 이를 위해서는 신중한 계획이 필요하지만 이것이 바로 우리의 일입니다.


4
+1 또 다른 일반적인 사용 사례는 전체 텍스트 검색이 필요한 테이블의 경우 MyISAM이고 다른 모든 테이블의 경우 InnoDB입니다.
Asaph

@Aseph : 귀하의 의견이있을 때에도 InnoDB 는 전체 텍스트 색인을 지원했습니다 .
BlueRaja-대니 Pflughoeft

2
^^^^ "MySQL 5.6 기능"은
2013

1
@randymelder 좋은 답변입니다. "key_buffer와 innodb_buffer_pool이 경쟁하지 않도록주의해야합니다"라는 의미를 자세히 설명 할 수 있습니까?
Neel

1
나는 틀렸다는 것을 증명하고 싶지만 논리는이 stackoverflow.com/a/6796566/5645769 와 반대입니다 .
Tᴀʀᴇǫ Mᴀʜᴍᴏᴏᴅ

7

이것이 일반적인 관행인지 말할 수 없습니다. 나는 내 자신의 경험에 대해 말할 수 있습니다.

나는 항상 작업에 가장 적합한 도구를 사용하므로 항상 엔진을 혼합합니다. 내 프로젝트의 대부분은 MyISAM을 기본 엔진으로 사용합니다.

InnoDB에서 사용할 수있는 특수 기능이 필요할 때 사용합니다.

테이블이 대부분 읽기 전용이면 깜박이기 전에 보관 엔진을 선택합니다.

머신 서버에 충분한 메모리가 있다는 것을 알면 모든 임시 데이터가 힙 테이블에 저장됩니다.

과거에는 MyISAM과 InnoDB를 혼합하는 속도 저하가 있었지만 이것은 특정 MySQL 문제가 아닙니다. 엔진을 하나만 사용할 때 보이지 않는 디자인 문제입니다. 실제로 잘못된 엔진을 사용하면 MyISAM, InnoDB 또는 두 가지가 혼합 된 경우 속도가 더 중요하지 않습니다. 속도 저하시기를 알 수있는 공식을 정의하기는 어렵습니다. 실제 테스트만으로도 가능합니다.

물론 고유 한 쿼리에서 InnoDB와 MyISAM을 혼합하여 무결성과 일관성을 유지할 수 없었습니다.


보관 엔진은 인덱싱을 지원하지 않으므로 보관에 저장하는 이유는 무엇입니까?
user4951

0

동일한 데이터베이스에서 MyISAM과 InnoDB 테이블을 혼합하지 않으려 고 노력하지만 이것은 실제적인 이유가 아니라 온전한 이유입니다. 그러나 전체 텍스트 검색을 위해 MyISAM 테이블이있는 데이터베이스를 보유하는 것이 유용하므로 사이트에서 실행할 수 있습니다. 각 항목마다 외래 키가있는 별도의 데이터베이스에 보관하면 DB를 작업하는 다른 개발자가 진행 상황을 쉽게 확인할 수 있습니다.


MyISAM을 사용할 때 외래 키를 어떻게 가질 수 있습니까?
a_horse_with_no_name

잘못된 용어이지만 외래 키처럼 작동합니다. InnoDB 테이블에서 항목의 ID 번호를 저장하고 검색 결과에서 페이지를 조회하는 데 사용합니다.
Kenzo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.