2011-09-27 2 views
1

필자는 상대적으로 큰 MySQL InnoDB 테이블 (압축)을 사용하고 있으며 때로 스키마 (컬럼 크기를 늘리거나 필드를 추가)를 변경해야한다.스키마를 변경할 때 MySQL에서 테이블 재구성 속도를 높이려면 어떻게해야합니까?

수백만 행이있는 500MB 테이블의 경우 약 1 시간이 걸리지 만 서버 사용량이 많지는 않습니다 (CPU @ 5 %, RAM 사용량이 많지 않음, I/O로 2.5MB/s).

테이블은 프로덕션에서 사용되지 않으므로 동시 요청이 동시에 없습니다. 1 차 색인 (처음 5 개 열에 있음)과 하나의 외부 키 제한 조건 만 있습니다.

테이블 변경 프로세스의 속도를 높이는 방법에 대한 의견이 있으십니까?

+0

서버를 실행하는 데 더 나은 하드웨어가 필요합니까? 이것은 설정에 대해 알지 못해도 대답하기 어려운 질문입니다. – Bojangles

+0

내가 준 수치에 따르면 하드웨어는이 작업에 약점이 없음을 보여줍니다 ... –

+0

죄송합니다, 나쁜 농담. 다소 흥미롭지 만 2.5MB/s는 약간 느립니다. 디스크 입출력 속도를 말하는 거지? – Bojangles

답변

1

InnoDB가 "고정"될 때까지 저장소 엔진을 변경하는 것 (TokuDB과 같은 최신 세대 엔진으로 변경)이 방법입니다.

0

정확한 테이블과 기본 키/인덱스 정의를 아는 것이 도움이되며, 중요도가 낮은 행 계수는 가장 가까운 백만에 해당합니다. 테이블이 500MB 밖에되지 않으므로 2 천만 행 미만일 것입니다. 또한, 테이블 변화에 당신의 접근 방식 - 새 스키마를 만들고 여기에 삽입, 또는 내가

  • 변화와 같은 방법으로 전이 지역에서 성공을 했어 등 테이블 변경

    를 사용하는 고유 한 키를 추가하는 인덱스 키 구성

  • 인덱스를 먼저 삭제 한 다음 테이블을 변경 한 다음 인덱스를 다시 추가합니다. 변경 사항의 영향을받는 독립 인덱스는 실제 성과 킬러가 될 수 있습니다.
  • 데이터를 분리 해 불필요한 또는 대형 열
  • 제거하기 위해 테이블 ​​구조를 최적화 (일반적으로 열을하지만 당신은 수직으로 어떤 상황에서 파티션 수) 만 작은 휘젓다 있도록 변경 될 핵심 구조에서 변경되지 않습니다 테이블의 일부
+0

ALTER TABLE을 사용하고 있습니다. 예를 들어 나는 갑자기 테이블에 떨어 뜨린 외래 키를 읽었으며 영원히 (이번에는 3GB 테이블 만) 걸립니다. 테이블은 string/datetime/numeric 유형으로 만 구성되며 하나의 INT 외래 키가 있습니다. –

관련 문제