개요
MySQL 8.0에서 InnoDB 스토리지 엔진은 데이터베이스의 핵심 역할을 담당하며, 모든 테이블 데이터와 인덱스는专属 테이블스페이스 파일에 저장된다. 본 문서에서는 InnoDB 테이블스페이스 파일의 내부 구조와 효율적인 관리 방법을 상세히 다룬다.
InnoDB 테이블스페이스 파일의 정의
InnoDB 테이블스페이스 파일(.ibd)은 MySQL 8.0에서 테이블의 실제 데이터를 저장하는 물리적 파일이다. InnoDB 스토리지 엔진은 각 테이블에 대해 별도의 테이블스페이스 파일을 생성할 수 있으며, 이 파일에는 테이블의 모든 데이터 행, 인덱스 구조, 메타정보가 포함되어 있다.
독립 테이블스페이스模式下에서는 각 테이블이 개별적인 .ibd 파일을 보유하므로, 특정 테이블의 백업과 복원이 용이하다는 장점이 있다.
내부 구조 분석
.ibd 파일은 页(Page) 단위로 구성되며, 각 页의 기본 크기는 16KB이다. 주요 页 유형은 다음과 같다:
- 데이터 页: 테이블의 실제 레코드 저장
- 인덱스 页: B+트리 기반 인덱스 구조 저장
- Undo 页: 트랜잭션 롤백을 위한 정보 저장
- 시스템 页: InnoDB 내부 메타데이터 관리
- 체인지 버퍼 页: 인덱스 수정 정보 임시 저장
이러한 页들은 B+트리 구조로 연결되어 있으며, 효율적인 데이터 접근을 가능하게 한다.
관리 방법론
테이블 생성 및 삭제
InnoDB 테이블 생성 시 자동으로 해당 테이블스페이스 파일이 생성된다. 다음 예제를 참조:
CREATE TABLE user_data (
user_id INT PRIMARY KEY,
username VARCHAR(100),
email VARCHAR(150),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB;
위 SQL 실행 시 user_data.ibd 파일이 데이터 디렉토리에 생성된다. 테이블 삭제 시:
DROP TABLE user_data;
해당 테이블스페이스 파일도 함께 제거된다.
테이블스페이스 모드 설정
MySQL 8.0은 두 가지 테이블스페이스 관리 방식을 지원한다:
독립 테이블스페이스(File-Per-Table): 각 테이블마다 개별 파일 할당. 기본값이며 권장되는 방식이다.
공유 테이블스페이스: 모든 테이블이 ibdata1 파일을 공유한다.
설정 파라미터로 전환 가능:
[mysqld]
innodb_file_per_table = ON
성능 최적화 기법
테이블스페이스 최적화는 데이터베이스 성능 향상과 디스크 공간 효율화에 필수적이다.
테이블 재구성:
OPTIMIZE TABLE user_data;
테이블 통계 정보 갱신:
ANALYZE TABLE user_data;
테이블 무결성 검사:
CHECK TABLE user_data;
REPAIR TABLE user_data;
백업 및 복원 전략
독립 테이블스페이스模式下에서 특정 테이블만 선택적으로 백업할 수 있다.
백업 절차:
- MySQL 서비스 중지
- 대상 테이블의 .ibd 파일과 .frm(또는 SDI) 파일 복사
- MySQL 서비스 재시작
복원 절차:
- MySQL 서비스 중지
- 백업된 파일을 원본 디렉토리에 복원
- MySQL 서비스 재시작
- 다음 명령어로 테이블스페이스 임포트:
ALTER TABLE user_data IMPORT TABLESPACE;