본문 바로가기
데이터베이스/MySQL

[Mysql] java.sql.SQLException: The table {} is full

by KHRDev 2023. 11. 30.

 

개발 중 위 에러를 만났을 때 대처법🤔

해당 에러는 mysql 메모리 테이블이 증가할 수 있는 최대 크기를 초과했거나 내부 메모리 내 임시 테이블의 최대 크기를 초과한 경우 발생한다.

 

* 해결 방법

1. DB를 재시작해야 하는 경우

mysql.cnf 파일을 찾아(/etc/mysql/~)

max_heap_table_size = {원하는 사이즈} 
tmp_table_size = {원하는 사이즈}

위의 설정값을 추가 후 DB를 재시작해주도록 하자. 

 

mysql 8.0.~ 버전 기준 default size는 16777216이다. 만약 문제가 생겼다면 default size보다 크게 설정하도록 하자.

 

2. DB를 재시작하지 않아도 되는 경우

실제 운영중엔 DB를 곧바로 재시작할 수 없을 것이다..

DB를 재시작할 수 없는 경우 아래 방법으로 설정값을 바꿀 수 있다. 다만 DB가 재시작이 되었을 때 default 설정값으로 되돌아가게 되니 위의 1번 방법도 병행할 것을 추천한다.

 

mysql에 접속해 

SHOW VARIABLES LIKE 'max_heap_table_size';
또는
SELECT @@GLOBAL.max_heap_table_size;

SHOW VARIABLES LIKE 'tmp_table_size';
또는
SELECT @@GLOBAL.tmp_table_size;

위의 명령어를 통해 현재 설정된 size를 확인하도록 하자. 

 

SET GLOBAL max_heap_table_size = {원하는 사이즈}
SET GLOBAL tmp_table_size = {원하는 사이즈}

위의 명령어를 통해 설정값을 바꿔주도록 하자.

 

그 후 SHOW VARIABLES를 통해 사이즈를 확인해 보면 반영이 되어 있지 않을 것이다. 현재 연결에서 바로 반영되지 않는다.

DB에 재접속하게 되면 반영된 사이즈를 확인할 수 있다.

 

 

 

max_heap_table_size와 tmp_table_size의 차이점


 

max_heap_table_size는 내부적으로 생성된 임시 테이블을 포함해 사용자가 생성한 메모리 테이블이 증가할 수 있는 최대 크기이다.

tmp_table_size는 메모리 테이블에는 반영되지 않는 내부 메모리 내에 임시 테이블의 최대 크기이다.

 

실제 사이즈 제한은 max_heap_table_size와 tmp_table_size 값 중 더 적은 값으로 제한되기 때문에 두 설정값을 동일하게 하는 것이 일반적이다.

'데이터베이스 > MySQL' 카테고리의 다른 글

[MYSQL] 테이블 정의서 만들기  (1) 2023.11.19

댓글