일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Protecle
- spring boot
- 오블완
- RootGraph
- sendFractionalSeconds
- https
- yml
- apatch poi
- pooled-lo
- @CreateDate
- deserializer
- mysql =
- fractional seconds
- EmbeddedId
- 버전 문자열 비교
- NamedEntityGraph
- MYSQL
- MSSQL
- mysql equal null
- 1*1000
- +9:00
- 운동해서 광명찾자
- getEntityGraph
- AuditingEntityListener
- load order
- createEntityGraph
- 티스토리챌린지
- mysql not equal null
- getDateCellValue
- @EntityListeners
- Today
- Total
Hello
MySQL delete 실행 시 Table disk size가 줄어들지 않음 본문
개발 도중 데이터 정리가 필요해 보여 특정 테이블 데이터 전체를 다 날렸는데 테이블 사이즈가 줄어들지 않아 의문이 들었다. 분명 테이블을 조회 하면 데이터가 0개 인데 테이블 사이즈는 1gb에서 바뀌지 않았다.
아래 쿼리로 실제 테이블의 크기를 확인 할 수 있다. Data_length, Index_length 컬럼을 합친 값이 실제 테이블이 점유하는 테이블 크기이다.
SHOW TABLE STATUS LIKE 'tb_t1';
MySQL의 테이블스페이스는 데이터베이스 테이블 데이터, 인덱스가 저장되는 물리적인 공간(파일)을 의미 하며 아래 5가지 테이블스페이스를 가진다. 이 중 실제 데이터는 File-Per_Table Tablespace에 저장 된다.
The System Tablespace
File-Per_Table Tablespace
General Tablespace
Undo Tablespace
Temporary Tablespace
File-Per_Table Tablespace
File-Per_Table Tablespace는 단일 InnoDB테이블에 대한 데이터와 인덱스를 포함하는 테이블스페이스입니다. 파일 시스템에 단일 데이터 파일로 저장된다.
File-Per_Table Tablespace 문서를 확인하면서 내가 확인하고자 했던 내용을 확인할 수 있었다. "테이블당 파일 테이블스페이스를 사용하면 각 테이블에는 동일한 테이블의 행에서만 사용할 수 있는 사용되지 않은 공간이 있을 수 있으며, 제대로 관리하지 않으면 공간이 낭비될 수 있습니다."
나의 경우 공간이 낭비된다고 생각해 데이터를 삭제했지만 실제 디스크 영역이 할당 되어 있어 기대와 달랐던 것이 이해가 되었다.
강제로 물리적인 테이블 사이즈 조정을 위해 "OPTIMIZE TABLE tb_t1" 쿼리를 물리적 공간을 최적화 시켜주었다.
OPTIMIZE TABLE은 테이블 데이터 및 인덱스 데이터의 물리적 스토리지를 재구성해 실제 스토리지를 줄이고 테이블에 엑세스할 때 I/O 효율성을 올린다.
삭제한 행으로 인해 테이블 내에 빈 공간이 발생한 경우 해당 공간을 회수 하며 테이블의 실제 크기를 조정한다. 이는 insert가 발생했을 때 공간을 효율적으로 활용하기 위함이며, 이로인해, 테이블 파일이 디스크공간을 낭비가 있을 수도 있다.
OPTIMIZE TABLE을 실행하면 InnoDB엔진은 테이블을 복사하고 기존 테이블을 대체 합니다. 이 과정에서 빈 공간이 회수되며 테이블 파일의 실제 크기가 줄어들어 디스크 공간을 절약할 수 있습니다.
참고 : https://dev.mysql.com/doc/refman/8.0/en/innodb-file-per-table-tablespaces.html
https://dev.mysql.com/doc/refman/8.0/en/optimize-table.html
https://dev.mysql.com/doc/refman/8.0/en/innodb-purge-configuration.html
'DB' 카테고리의 다른 글
[MySQL] 특정 조건일 때 join이 필요한 경우 (0) | 2023.07.28 |
---|---|
조회 쿼리 sort 성능 개선 (0) | 2023.07.21 |
MySQL FK on update, on delete (0) | 2023.05.17 |
REDIS SENTINEL (0) | 2023.03.09 |
mySql join을 사용해 update 할 때 (0) | 2022.10.24 |