[SQL] The table is full과 mysql 32bit
오류발생 : 1114, The table is full
새로운 DB서버와 함께 새로운 프로젝트를 하던 중 생소한 에러를 만났다
MySQL
에서 떨군 1114, The table is full
에러.
데이터 양은 약 4GB. 전혀 많은 양은 아니었다.
아무래도 이상해 MySQL 공식 자료를 보니 32bit MySQL의 default 테이블 크기는 4GB라고 되어있다.
테이블 크기 제한을 늘리자
alter table table_nm max_rows=10000000 avg_row_length=20480;
위 쿼리는 1000,0000줄 * 20480 Byte로 테이블 크기를 키워준다.
어림잡아 200GB로 키우고 다시 데이터를 삽입하니 잘 되는 것 처럼 보였다.
다시 오류발생 : 2013, Lost connection to MySQL server during query
이후 몇 번 삽입이 잘 되었으나, 다시 오류가 발생한다.
2013, Lost connection to MySQL server during query
마치 서버 연결이 끊어진 듯 되어있었다.
보통 이 에러는 질의 시간이 너무 길어지거나, 질의 중 네트워크 문제로 서버 연결이 끊어질 때 발생한다.
아무래도 이상하니 DB에 직접 붙어 확인해보았다.
갑자기 조회도 안 된다! DB 재기동을 해보아도 마찬가지
which is outside the tablespace bounds
라고 안내문이 발생한다.
분명 테이블 크기를 키웠는데 왜이럴까 검색해보니 MySQL 공식 자료에 이유가 나와있었다.
MySQL-32bit의 테이블 크기는 4GB가 최대
이 프로젝트 환경에서는 아까 확인한 테이블 크기 제한을 32bit에서 더 늘릴 수가 없었다.
그 이유는
- Linux 2.2- 32bit 환경은 file size limit이 4GB이기 때문
Windows에서 FAT
방식의 파일시스템은 단일 파일을 최대 4GB까지, NTFS
는 2TB까지 지원하는 것 처럼,
Linux에서 ext2
혹은 낮은 버전의 os
에서는 단일 파일을 최대 4GB, ext3
부터는 2TB까지 지원한다.
아래는 파일시스템 별 지원하는 크기 제한이다.
Operating System | File-size Limit |
---|---|
Linux 2.2-Intel 32-bit | 2GB (LFS: 4GB) |
Linux 2.4+ | (using ext3 filesystem) 4TB |
Solaris 9/10 | 16TB |
Win32 w/ FAT/FAT32 | 2GB/4GB |
Win32 w/ NTFS | 2TB (possibly larger) |
MacOS X w/ HFS+ | 2TB |
사실 어찌어찌 파일 시스템을 바꾸어 포맷한다고 해도, MySQL 공식문서에서
“32-bit 플랫폼에서는 프로세스 메모리 할당을 2GB까지 밖에 못 한다.”
라고 메모리 제한에 대해서도 소개하고 있기 때문에, 큰 테이블끼리의 JOIN 등이 생기면 죽을 가능성이 높아보인다.
어떻게 할까
위에서 말했듯 어찌어찌 고쳐서 쓴다고 해도 차후에 점점 피곤해질 것이 예상되었다.
그래서 우리는 프로젝트에 Hadoop
을 들이기로 했다.(서버를 구매할 돈이 없다!)
난 아무래도 RDBMS
가 익숙해서 NoSQL
은 좀 무서웠는데,
빅데이터는 비정형데이터가 대부분이 때문에 RDBMS
를 고집할 필요가 없다.
오히려 설계 비용이 덜 들기 때문에 대부분의 빅데이터 프로젝트는 NoSQL
을 쓰는 것으로 보인다.
이제 수집한 데이터들의 핸들링은 Hadoop에서 진행하고,
분석 결과 등 시각화 할 필요가 있는 자료나, 사용자에게 서비스 할 데이터만 MySQL에 담을 예정이다.
댓글남기기