문제

MySQL과의 거래가 필요할 것 같으며 MysQL에서 MysQL에서 트랜잭션을 혼합 한 innodb/myisam 테이블로 어떻게 관리 해야하는지 전혀 모릅니다. 모두 큰 혼란처럼 보입니다.

왜 테이블을 섞고 싶은지 물어볼 수 있습니다. Anwer는 성능입니다. 많은 개발자들이 알 수 있듯이 InnoDB 테이블은 일반적으로 성능이 좋지 않지만 그 대가로 더 높은 격리 수준 등을 제공합니다 ...

이 문제에 대한 조언이 있습니까?

도움이 되었습니까?

해결책

나는 당신이 Myisam과 Innodb의 성능 차이를 과대 평가하고 있다고 생각합니다. MyISAM은 데이터웨어 하우징 상황 (예 : 전체 테이블 스캔보고 등)에서 더 빠르지 만, InnoDB는 대부분 OLTP 쿼리를 사용하면 실제로 더 빠를 수 있습니다.

innodb는 손잡이가 많기 때문에 조정하기가 더 어렵지만, 적절하게 조정 된 innodb 시스템은 잠금이 개선되고 I/O 패턴이 더 좋기 때문에 MyISAM보다 더 높은 처리량을 가질 수 있습니다.

다른 팁

MyISAM 테이블에 거래를 할 수 없다는 것을 감안할 때 실제 문제가 무엇인지 잘 모르겠습니다. 트랜잭션이 필요한 모든 데이터는 InnoDB 테이블에 있어야하며 사용중인 액세스 라이브러리 또는 수동 SQL 명령을 사용하여 트랜잭션을 관리해야합니다.

정확히 하나의 엔진을 사용하면 명확한 성능 이점이 있습니다.

한 엔진에 맞게 조정 된 서버는 다른 엔진을 위해 조정되지 않습니다. 둘 다 독점적 인 사용에 상당한 양의 RAM을 할당해야하므로 최적의 양을 모두 줄 수 없습니다.

당신은 당신이 당신의 8g의 RAM (분명히 64 비트이지만 여전히 비교적 작은) 데이터베이스 서버를 가지고 있다고 가정하면 IndoDB 페이지 캐시에 약 3/4를 할당 할 수 있습니다. 또는 MyISAM을 사용하는 경우 key_buffer의 절반 정도가 원할 수 있습니다. 당신은 둘 다 할 수 없습니다.

엔진을 선택하여 독점적으로 사용하십시오. 성능 문제를 해결하는 방법이 있습니다. 대부분은 쉽지 않습니다 (즉, 데이터 구조 나 응용 프로그램을 재 설계해야합니다).

짧은 대답은 MyISAM에 거래 지원이 없다는 것입니다. 트랜잭션을 시작하고 일부 innoDB 테이블에서 데이터를 추가 또는 수정하면 MyISAM 테이블에서 데이터를 추가 또는 수정 한 다음 롤백해야합니다. MyISAM 변경을 제거 할 수 없습니다. 이와 같은 혼합 엔진을 지원하기 위해 응용 프로그램은 저장된 데이터에 대한 변경 사항이 트랜잭션의 "외부"에 발생한다는 것을 알아야합니다.

일부 프로세스에 대한 트랜잭션이 필요한 경우 거래 가능 해야하는 데이터를 격리하고 모두 Innodb의 데이터.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top