MyISAM에서 InnoDB로 변환하는 데 어려움이 있습니까?


11

MyISAM에서 InnoDB로 옮길 준비가되었지만 찾아야 할 전체 목록이 있는지 알고 싶습니까? 예를 들어, DISABLE KEYSInnoDB 테이블에서 실행 하면에 대한 매뉴얼 페이지를 제외하고 경고가 발생 한다는 언급이 없습니다 ALTER TABLE. 변환하기 전에 알아야 할 것이 있습니다. 나는 내 질문에는 괜찮을 것이라고 생각했지만 분명히 그렇지는 않았다.

답변:


7

여기 몇 가지 문제가 있습니다

메모리 사용량

MyISAM

InnoDB

  • 데이터 페이지와 색인 페이지를 캐시합니다.
  • MySQL 5.5 이전의 하나의 버퍼 풀과 하나의 크기
  • MySQL 5.5로 시작하는 하나 이상의 버퍼 풀

다음은 MyISAM 키 캐시 및 InnoDB 버퍼 풀에 적합한 크기를 선택하는 방법에 대해 이전에 작성하고 게시 한 쿼리 입니다.

FULLTEXT 인덱스

MyISAM

  • FULLTEXT 인덱스 지원

InnoDB

  • MySQL 5.6부터는 그래도 베타 버전입니다 (업데이트 : MySQL 5.6이 존재하고 FULLTEXT 색인이 있습니다. MySQL 5.6에서 FULLTEXT 색인을 사용하는 경우 InnoDB 관련 FULLTEXT 옵션을 사용하고 있는지 확인하십시오 )
  • MySQL 5.6 이전 버전에서는 MyISAM을 InnoDB로 변환 할 수 없습니다.

MySQL 5.5 이상

FULLTEXT 인덱스가있는 MyISAM 테이블을 찾으려면이 쿼리를 실행하십시오.

select tbl.table_schema,tbl.table_name from
(
    select table_schema,table_name
    from information_schema.tables
    where engine='MyISAM'
    and table_schema NOT IN ('information_schema','mysql')
) tbl
INNER JOIN
(
    select table_schema,table_name
    from information_schema.statistics
    where index_type='FULLTEXT'
) ndx
USING (table_schema,table_name);

이 쿼리에서 나온 것은 MySQL 5.6으로 업그레이드 할 때까지 InnoDB로 변환 할 수 없습니다.

최적화 테이블

MyISAM

  • MyISAM 테이블이 축소되었습니다
  • ANALYZE TABLE 은 모든 인덱스에서 인덱스 통계를 실행합니다

InnoDB


"엔진"대신 "engin"
Andrew

@RolandoMySQLDBA : InnoDB에 공간 인덱스가 없음을 추가 할 수 있습니다.
ypercubeᵀᴹ

2

가장 큰 문제는 innodb가 거래되는 것입니다. 당신은 당신의 어플리케이션이 기본적으로 auto_commit에 의해 사용되는 MySQL 라이브러리를 알고 싶을 것이다.

예를 들어 Python 은 자동 커밋하지 않습니다. 즉, 응용 프로그램이 연결을 닫기 직전에 행을 삽입하는 경우 innodb로 변경하면 해당 삽입이 롤백됩니다. 예를 들어 파이썬 스크립트는 반드시 connection.commit ()을 호출해야합니다.

또 다른 차이점은 다중 행 삽입 또는 업데이트와 관련이있을 수 있습니다. 단일 다중 행 삽입자를 고려하십시오.

insert into tbl values (...row1...),  (...row2...),  (...rowN....);

row3에서 고유 한 키 충돌과 같은 오류가 발생하면 어떻게되는지 고려하십시오. MyISAM을 사용하면 처음 두 행이 쓰여졌을 것이고, innodb에서 모든 행이 롤백되어 오류가 발생하더라도 아무 것도 기록되지 않았습니다.

innodb를 사용하면 교착 상태의 세계에 들어갑니다. 작업이 수행되는 것을 막기 위해 이러한 빈도로 발생하지 않는 한 본질적으로 나쁘지 않습니다. 그러나 응용 프로그램은 교착 상태를 예상하고 적절하게 처리하는 방식으로 코딩해야합니다 (대부분의 경우 재시도).

메모리 / 스토리지 제한을 고려하십시오. Innodb는 MyISAM보다 훨씬 많은 리소스를 사용합니다. 버퍼 풀을 모든 테이블을 수용 할 수있을만큼 크게 유지할 수있는 충분한 RAM이 있다면 황금색입니다.

기본 키가 큰 테이블을 찾으십시오. Innodb의 클러스터형 인덱싱은 각 보조 인덱스가 해당 행 PK의 다른 사본을 보유 함을 의미합니다. 2 개의 보조 인덱스가있는 경우 각 행 PK가 3 번 저장됩니다 (PK + 각 인덱스). pk가 여러 열 및 큰 데이터 유형 (예 : char (N))에 걸쳐 있으면 innodb에서 인덱스 요구 사항이 어떻게 빠르게 폭발하는지 확인할 수 있습니다.

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