[SQL] The table is full과 mysql 32bit

오류발생 : 1114, The table is full

새로운 DB서버와 함께 새로운 프로젝트를 하던 중 생소한 에러를 만났다

error1114.png

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

이후 몇 번 삽입이 잘 되었으나, 다시 오류가 발생한다.

error2013.png 2013, Lost connection to MySQL server during query 마치 서버 연결이 끊어진 듯 되어있었다.
보통 이 에러는 질의 시간이 너무 길어지거나, 질의 중 네트워크 문제로 서버 연결이 끊어질 때 발생한다.
아무래도 이상하니 DB에 직접 붙어 확인해보았다.

error08s01.png

갑자기 조회도 안 된다! 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에 담을 예정이다.


참고페이지

카테고리:

업데이트:

댓글남기기