본문 바로가기

MySQL & MariaDB

[Aurora MySQL] 쿼리 수행중 the table tmp is full Error 발생

글을 작성하기 전에

해당 에러는 MySQL 8.0 버전 이상에서도 동일하게 발생하는 현상이지만, 해당 포스트에서는 Aurora MySQL 3.0x( MySQL 8.0 호환) 에서 발생하는 이슈에 대해 언급합니다.

1. 현상

Aurora MySQL 3.02 버전을 운영 중 서비스 담당 현업분들에게 쿼리 수행이 불가하다는 이슈를 받았다.
쿼리를 확인해보니 튜닝되지 않은 실적 추출용 쿼리수행 시 아래 에러가 발생하였다.

 

에러 상세 메시지

error code [xxxx]; The table '/rdsdbdata/tmp/#sqlxxxx_yyyy_z' is full 

 

2. 분석

해당 에러는 Order by, Group by 등의 쿼리 수행으로 인한 temp 테이블을 사용할 때 파라미터로 설정된 값을 초과했을 때 발생하는 버그이다.(https://bugs.mysql.com/bug.php?id=99100)

8.0.27 버전 릴리즈로 해당 버그가 해소되었다.(https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-27.html)

3. 상세 파라미터

위의 문제는 8.0.27 버전이하에서 발생할 수 있지만, Workaround 해결 방법이 있다.


문제가 발생하는 조건은 MySQL 8.0부터 신규파라미터로 추가된 ‘internal_tmp_mem_storage_engine' 파라미터와 관련있으며, Default로 설정된 TempTable 설정 되어 있을 때 문제가 발생한다.

TempTable이 temptable_max_ram, temptable_max_mmap 으로 설정된 값보다 더 많이 사용할 때 에러 메시지가 발생한다.


문제점을 해결하기위해서는 ‘internal_tmp_mem_storage_engine 의 설정값을 Memory로 변경해야한다

 

4. Aurora MySQL 에서의 문제점

그러나 Aurora의 경우는 MySQL과 스토리지 구조가 달라서, 동일한 Workaround 방식의 해결방법이 불가하다.
.다른 방법으로 temptable_max_ram, temptable_max_mmap 의 값을 증가시켜 해결해야한다.



참조) https://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/AuroraUserGuide/ams3-temptable-behavior.html

https://forums.percona.com/t/mysql-8-0-the-table-tmp-sql1-f519f-7-is-full/10767/3

https://aws.amazon.com/ko/blogs/database/use-the-temptable-storage-engine-on-amazon-rds-for-mysql-and-amazon-aurora-mysql/