mysql을 사용할 때, 테이블이 많은 데이터를 삭제하긴 하지만, 데이터 파일과 인덱스 파일은 이상할 정도로 작을 수 있습니다. 이는 mysql이 데이터를 삭제할 때 많은 데이터 구멍(특히 텍스트와 BLOB)을 남기는데, 이 구멍들이 원래 데이터 공간을 차지하기 때문에 파일 크기가 변하지 않기 때문입니다. 이 구멍들은 나중에 데이터가 삽입될 때 재사용할 수 있으며, 물론 그대로 유지될 수도 있습니다. 이 구멍은 저장 비용을 증가시킬 뿐만 아니라 데이터 단편화로 인해 테이블의 스캔 효율도 저하시킵니다.
사용 시나리오:테이블의 많은 부분을 삭제했거나, VARCHAR, BLOB, TEXT 열이 있는 가변 길이 행 테이블에 많은 변경을 했다면 OPTIMIZE TABLE을 사용해야 합니다. 삭제된 레코드는 연결 목록에 보관되며, 이후 INSERT 작업은 이전 레코드 위치를 재사용합니다. OPTIMIZE TABLE을 사용해 사용하지 않는 공간을 재활용하고 데이터 파일 조각을 정리할 수 있습니다. [라이브러리에서 많은 양의 데이터가 삭제되더라도 데이터 파일 크기가 줄지 않을 수 있습니다. 이는 삭제 작업 후 데이터 파일에 남은 단편화 때문입니다.
대부분의 환경에서는 OPTIMIZE TABLE을 실행할 필요가 전혀 없습니다. 가변 길이 행에 많은 업데이트를 하더라도, 특정 테이블에만 주일에 한 번이나 한 달에 한 번 정도 자주 실행할 필요는 없습니다.
OPTIMIZE TABLE은 MyISAM, BDB, InnoDB 테이블에만 적용됩니다.
BDB 테이블의 경우, OPTIMIZE TABLE은 현재 ANALYZE TABLE에 매핑되어 있습니다. InnoDB 테이블의 경우, OPTIMIZE TABLE은 ALTER TABLE에 매핑되어 ALTER TABLE이 테이블을 재구성합니다. 재구성 작업은 인덱스 통계를 업데이트하고 클러스터 인덱스의 미사용 공간을 확보합니다.
참고: MySQL은 OPTIMIZE TABLE 실행 중에 테이블을 잠깁니다.
myisam의 경우, 최적화 테이블을 직접 사용할 수 있습니다 table.name,InnoDB 엔진일 때는 "테이블이 최적화를 지원하지 않으니 대신 재생성 + 분석을 하세요"라고 보고하고, 보통 myisam에서 innodb로 변환하면 alter table table.name engine='innodb'를 사용해서 변환하게 되며, 이 방법으로 최적화도 가능합니다.따라서 InnoDB 엔진일 때는 최적화 대신 alter table table.name engine='innodb'를 사용할 수 있습니다。
전후 효과를 보려면 [데이터베이스]에서 '[table_name]' 같은 'show table status' 명령어를 사용할 수 있습니다; 반환 결과의 data_free은 공허가 차지하는 저장 공간입니다.
MySQL 시간 처리된 배치 검사 테이블 복구 및 최적화 테이블 최적화 테이블을 구현하는 셸 스크립트는 다음과 같습니다:
원문 언어:
하이퍼링크 로그인이 보입니다.
하이퍼링크 로그인이 보입니다.
|