2013-05-31 2 views
1

엔진을 MyISAM에서 MEMORY로 변경하면 테이블 크기가 너무 커지는 이유는 무엇입니까? 1300 만 개의 레코드가있는 테이블을 MEMORY로 변경하려고하는데 6GB 메모리가 있고 Myisam에서 크기가 1.5GB이고 MEMORY 엔진을 사용하여이 메모리 크기를 사용하여 메모리 제한에 맞도록하려고합니다.왜 MEMORY 엔진으로 전환하면 테이블 크기가 증가합니까?

내가이

{tmp_table_size=5.5G 
max_heap_table_size=5.5G} 

나는 여전히 "테이블이 가득"얻을 오류를 정의

, 그래서 내 유일한 생각은 MEMORY 엔진으로 변환 할 때 테이블 크기가 10~15기가바이트 주위 할 필요가 있다는 것입니다 .

+0

해당 테이블의 구조는 무엇입니까? – raina77ow

답변

1

메모리 (또는 HEAP) 테이블 엔진은 고정 행 형식을 지원하는 주셔서 감사합니다.

결과적으로 VARCHAR(255) 열은 CHAR(255)과 같이 저장됩니다. 단 10 문자 만 포함되어 있어도 각 행에 255 바이트를 더하고 메타 데이터 (예 : 길이를 저장하기 위해)에 대해 몇 바이트를 소비합니다. 열이 UTF-8 인 경우 문자 당 3 바이트, 즉 행당 3 * 255, 메타 데이터를 사용합니다.

https://dev.mysql.com/doc/refman/5.5/en/memory-storage-engine.html에서 MEMORY 테이블의 물리적 특성을 참조하십시오

MEMORY 테이블은 고정 길이 행 저장 형식을 사용합니다. VARCHAR와 같은 가변 길이 유형은 고정 길이를 사용하여 저장됩니다.

관련 문제