Loading...
MySQL 9.5 Reference Manual 9.5의 17.11.4 Defragmenting a Table의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
secondary index에 대한 랜덤한 insert 또는 delete 작업은 index가 조각난(fragmented) 상태가 되게 할 수 있습니다. 조각화(fragmentation)란, 디스크 상에서의 index 페이지들의 물리적 정렬 순서가 페이지 상의 레코드들의 index 순서와 가깝지 않거나, index에 할당된 64페이지 블록들 안에 사용되지 않은 페이지가 많이 존재하는 상태를 의미합니다.
조각화의 한 가지 징후는, 테이블이 “원래” 필요로 하는 것보다 더 많은 공간을 차지하는 경우입니다. 그 “원래”가 정확히 어느 정도인지는 판단하기 어렵습니다. 모든 InnoDB 데이터와 index는 B-trees에 저장되며, 그 fill factor는 50%에서 100%까지 다양할 수 있습니다.
조각화의 또 다른 징후는 다음과 같은 테이블 스캔이 “원래”보다 더 오랜 시간이 걸리는 경우입니다:
1SELECT COUNT(*) FROM t WHERE non_indexed_column <> 12345;
위의 쿼리는 MySQL이 대형 테이블에 대해 가장 느린 유형의 쿼리인 full table scan을 수행하도록 합니다.
index 스캔을 빠르게 하기 위해, 주기적으로 “null” ALTER TABLE 작업을 수행할 수 있으며, 이 작업은 MySQL이 테이블을 재구성하도록 합니다:
1ALTER TABLE tbl_name ENGINE=INNODB
또한 ALTER TABLE tbl_name FORCE를 사용하여 테이블을 재구성하는 “null” alter 작업을 수행할 수도 있습니다.
ALTER TABLE tbl_name ENGINE=INNODB와
ALTER TABLE tbl_name FORCE는 모두 online DDL을 사용합니다. 자세한 내용은 Section 17.12, “InnoDB and Online DDL”을 참조하십시오.
조각화를 수행하는 또 다른 방법은 mysqldump를 사용하여 테이블을 텍스트 파일로 덤프하고, 테이블을 drop한 다음, 덤프 파일에서 다시 로드하는 것입니다.
index에 대한 insert가 항상 오름차순으로 수행되고, 레코드가 끝부분에서만 delete되는 경우, InnoDB 파일 스페이스 관리 알고리즘은 index에서 조각화가 발생하지 않음을 보장합니다.
17.11.3 InnoDB Checkpoints
17.11.5 Reclaiming Disk Space with TRUNCATE TABLE