max_heap_table_size는 MySQL의 시스템 변수로, 읽기와 쓰기가 모두 가능한(read/write) 속성을 가지고 있습니다. 이 변수는 MEMORY(HEAP) 테이블의 최대 크기를 제어하며, 기본값은 16MB입니다.
현재 max_heap_table_size 값 확인하기
먼저 현재 설정된 max_heap_table_size 값을 확인해 보겠습니다. 이 값은 바이트(byte) 단위로 저장됩니다. 다음 쿼리를 사용합니다.
mysql> select @@max_heap_table_size;
실행 결과는 다음과 같습니다.
+-----------------------+ | @@max_heap_table_size | +-----------------------+ | 16777216 | +-----------------------+ 1 row in set (0.00 sec)
바이트를 MB로 변환하는 방법
조회된 값 16777216이 실제로 16MB에 해당하는지 단위 변환을 통해 확인해 보겠습니다.
1 MB = 1024KB 1KB = 1024 Bytes 1MB = 1024 × 1024 bytes = 1,048,576 bytes
따라서 바이트 값을 MB로 변환하려면 1,048,576으로 나누면 됩니다.
= 16777216 / (1024 × 1024) = 16777216 / 1048576 = 16 MB
SET 명령어로 max_heap_table_size 변경하기
max_heap_table_size 값은 SET 명령어를 사용하여 변경할 수 있습니다. 기본 문법은 다음과 같습니다.
SET @@max_heap_table_size = 원하는_바이트_값;
이번에는 값을 33554432 바이트, 즉 32MB로 변경해 보겠습니다.
mysql> set @@max_heap_table_size=33554432; Query OK, 0 rows affected (0.00 sec)
변경된 값 검증하기
변경 후 다시 값을 조회하여 정상적으로 적용되었는지 확인합니다.
mysql> select @@max_heap_table_size;
실행 결과는 다음과 같습니다.
+-----------------------+ | @@max_heap_table_size | +-----------------------+ | 33554432 | +-----------------------+ 1 row in set (0.00 sec)
앞서 설명한 변환 공식을 활용하면 더욱 간편하게 MB 단위로 확인할 수 있습니다. 나누기 연산 결과에 별칭(alias)을 지정하여 조회해 보겠습니다.
mysql> select @@max_heap_table_size/1048576 as MB;
실행 결과는 다음과 같습니다.
+---------+ | MB | +---------+ | 32.0000 | +---------+ 1 row in set (0.00 sec)
결과가 정확히 32MB로 출력되는 것을 확인할 수 있습니다.
참고 사항
SET 명령어로 변경한 max_heap_table_size 값은 현재 세션 또는 전역(global) 범위에만 적용되며, MySQL 서버를 재시작하면 기본값으로 초기화됩니다. 영구적으로 값을 유지하려면 MySQL 설정 파일(my.cnf 또는 my.ini)에 다음과 같이 추가해야 합니다.
[mysqld] max_heap_table_size = 33554432
또한 MEMORY 테이블의 실제 최대 크기는 max_heap_table_size와 tmp_table_size 중 더 작은 값에 따라 결정되므로, 두 변수를 함께 고려하여 설정하는 것이 좋습니다.