programing

InnoDB 테이블을 My ISAM 테이블과 결합하는 중

newstyles 2023. 10. 6. 20:57

InnoDB 테이블을 My ISAM 테이블과 결합하는 중

조직, 조직 사용자, 조직 부서 등 메타 수준 데이터를 포함하는 표 세트가 있습니다.이 모든 테이블은 매우 적은 쓰기 작업으로 무겁게 읽힐 것입니다.또한 테이블 크기가 상당히 작을 것입니다(최대 레코드 수는 약 30K - 40K).

또 다른 테이블 세트는 읽기와 쓰기 양이 많은 청구서 트랜잭션, 사용자 작업 등과 같은 OLTP 데이터를 저장합니다.이 표들은 상당히 방대할 것입니다(표당 약 3천만 개의 레코드).

첫 번째 테이블 세트는 My ISAM으로, 두 번째 테이블은 InnoDb 엔진으로 진행할 예정입니다.우리의 많은 기능들은 또한 이 두 세트의 테이블에 조인스가 필요합니다.

My ISAM 테이블을 InnoDB 테이블과 결합할 때 성능 문제가 있습니까?또한 이러한 설계로 인해 발생할 수 있는 다른 문제(db 백업, 튜닝 등)가 있습니까?

어떤 피드백이라도 주시면 대단히 감사하겠습니다.

바로 저에게 달려드는 것은 저의 ISAM입니다.

ASPECT #1 : 조인 자체

MyISAM 및 InnoDB와 관련된 조인이 있을 때마다 InnoDB 테이블은 쿼리에 MyISAM의 참여로 인해 행 수준 잠금 대신 테이블 수준 잠금 동작을 수행하게 되며 MVCC는 MyISAM 데이터에 적용할 수 없습니다.MVCC는 InnoDB에 적용할 수 없는 경우도 있습니다.

ASPECT #2 : 내 ISAM의 관여

다른 관점에서, INSERTs, UPDATE 또는 DELETE를 통해 MyISAM 테이블이 업데이트되는 경우, JOIN 쿼리에 포함된 MyISAM 테이블은 다른 DB Connections에서 잠기고 JOIN 쿼리는 MyISAM 테이블을 읽을 수 있을 때까지 기다려야 합니다.안타깝게도 JOIN 쿼리에 InnoDB와 MyISAM이 혼재되어 있는 경우, InnoDB 테이블은 JOIN 쿼리의 MyISAM 파트너와 같이 쓰기가 지연되어 간헐적으로 잠금 상태를 경험해야 합니다.

MVCC는 여전히 READ-UNCOMITED Repeatable-READ 트랜잭션이 정상적으로 작동할 수 있도록 허용하고 특정 보기의 데이터를 다른 트랜잭션에 사용할 수 있도록 허용합니다. READ-COMITED 및 SERINABLE에 대해서는 동일한 말을 할 수 없습니다.

ASPECT #3 : 쿼리 옵티마이저

MySQL은 인덱스 카디널리티에 의존하여 최적화된 EXPLAINE 계획을 결정합니다.인덱스 카디널리티는 MyISAM 테이블에서 많은 INSERT, UPDATE 및 DELETE가 테이블에 발생할 때까지 안정적이며, 이를 통해 주기적으로 실행할 수 있음OPTIMIZE TABLE내 ISAM 테이블을 상대로.innoDB 인덱스 카디널리티는 절대 안정적이지 않습니다!!!뛰면SHOW INDEXES FROM *innodbtable*;, 해당 명령을 실행할 때마다 인덱스 카디널리티가 변경됩니다.InnoDB가 카디널리티를 추정하기 위해 지수에 뛰어들기 때문입니다.뛰어도OPTIMIZE TABLEInnoDB 테이블에 대해 테이블 조각 모음만 수행합니다.OPTIMIZE TABLE실행할 것입니다ANALYZE TABLE내부적으로 테이블에 대한 인덱스 통계를 생성합니다.그건 마이 아이샘에 적합해요.InnoDB는 이를 무시합니다.

당신을 위한 조언은 모든 것을 InnoDB로 변환하고 그에 따라 설정을 최적화하라는 것입니다.

UPDATE 2012-12-18 15:56 EDT

믿거나 말거나 InnoDB/My에는 아직 오픈 티켓이 있습니다.업데이트위한 선택ISAM 가입.읽어보면 해상도가 다음과 같이 요약됩니다: DON'T DO IT!!!

My ISAM 테이블이 처리를 하지 않기 때문에 트랜잭션 관리가 제대로 또는 전혀 작동하지 않을 것 같습니다.

언급URL : https://stackoverflow.com/questions/5475283/joining-innodb-tables-with-myisam-tables