내용으로 건너뛰기

Amazon RDS 및 Aurora MySQL 호환 환경에서 임시 테이블 및 스토리지 가득 참 문제를 해결하려면 어떻게 해야 합니까?

3분 분량
0

Amazon Relational Database Service 또는 Amazon Aurora MySQL 호환 버전 데이터베이스에서 쿼리를 실행할 때 임시 테이블 및 스토리지 가득 참 문제가 발생합니다.

간략한 설명

Amazon RDS 또는 Aurora MySQL 호환 환경에서 쿼리를 실행할 때 다음과 같은 오류 메시지가 표시될 수 있습니다.

"The table '/rdsdbdata/tmp/#sqlxx_###' is full"

Amazon RDS 또는 Aurora MySQL 호환 인스턴스의 모든 임시 테이블 스토리지를 사용하면 위와 같은 오류 메시지가 표시됩니다. 또한 구성된 스토리지 할당량을 초과하는 대규모 임시 테이블을 생성하는 쿼리를 실행할 때도 이 오류 메시지가 표시됩니다.

해결 방법

전체 임시 테이블 해결

MySQL 8.0 및 Aurora MySQL 호환 3.x는 중간 결과를 저장해야 하는 복잡한 쿼리에 TempTable 스토리지 엔진을 사용합니다.

TempTable 스토리지 엔진은 temptable_max_ram 파라미터의 기본 크기까지 메모리에 임시 테이블을 만듭니다. 할당량을 초과하면 임시 테이블은 메모리 매핑 파일을 사용하여 temptable_max_mmap 파라미터의 기본 크기까지 디스크 스토리지로 오버플로합니다.

쿼리가 생성하는 임시 데이터가 temptable_max_mmap 파라미터의 기본 크기를 초과하면 ‘Table is full’ 오류가 발생할 수 있습니다.

이 문제를 해결하려면 다음 작업을 수행하십시오.

  • temptable_max_ramtemptable_max_mmap 파라미터를 늘려 임시 테이블에 더 많은 메모리와 디스크 공간을 허용합니다. 자세한 내용은 MySQL 웹 사이트의 temptable_max_ramtemptable_max_mmap을 참조하십시오.
    참고: temptable_max_mmap 파라미터는 Aurora 인스턴스의 로컬 스토리지 크기 중 80%를 초과해서는 안 됩니다.
  • internal_tmp_mem_storage_engine 파라미터를 MEMORY로 설정하여 temptable_max_mmap 디스크 할당량을 방지합니다. 또한 tmp_table_sizemax_heap_table_size 파라미터를 설정하여 개별 내부 임시 테이블의 크기를 제한합니다. 자세한 내용은 MySQL 웹 사이트의 internal_temp_mem_storage_engine, tmp_table_sizemax_heap_table_size를 참조하십시오.
    참고: MEMORY 설정은 Aurora 라이터 인스턴스에만 적용됩니다. 리더 인스턴스에서 Aurora MySQL은 TempTable 스토리지 엔진을 사용합니다.
  • aurora_tmptable_enable_per_table_limit를 활성화하고 tmp_table_size 파라미터를 조정하여 각 내부 임시 테이블의 최대 메모리를 제한합니다.
  • FreeLocalStorage Amazon CloudWatch 지표를 사용하여 Aurora DB 인스턴스와 연결된 로컬 스토리지 공간을 모니터링합니다. RDS MySQL 인스턴스와 연결된 사용 가능한 데이터 스토리지 공간을 모니터링하려면 FreeStorageSpace CloudWatch 지표를 사용합니다.

쿼리를 최적화하여 임시 테이블 줄이기

일부 쿼리는 오류를 일으킬 수 있는 대규모 임시 테이블을 생성할 수 있습니다.

쿼리를 최적화하려면 다음 작업을 수행하십시오.

  • 특히 GROUP BY, ORDER BY, 하위 쿼리 및 파티션된 테이블의 뷰를 포함하는 쿼리의 경우 적절한 인덱스를 사용합니다.
  • 전체 테이블을 스캔하지 않도록 파티션된 테이블의 쿼리에 파티션 정리를 사용합니다.
  • 파일 정렬을 수행하는 쿼리에 인덱스를 사용하여 암시적 임시 테이블을 생성합니다. 또는 sort_buffer_size 파라미터를 조정합니다.

스토리지 가득 참 문제의 다른 원인 해결

다음과 같은 문제로 인해 Amazon RDS 및 Aurora MySQL 호환 인스턴스에서 스토리지 가득 참 문제가 발생할 수도 있습니다.

  • 로컬 스토리지 용량을 초과하는 대규모 데이터베이스 또는 테이블 크기
  • 감사 로그, 느린 쿼리 로그 또는 일반 쿼리 로그별 로컬 디스크 공간 사용량

이러한 문제를 해결하려면 다음 작업을 수행하십시오.

  • 인덱스 재구축 또는 테이블 변경과 같은 DDL 작업의 경우 대규모 임시 테이블을 생성하지 않도록 Percona 툴킷을 사용합니다. 자세한 내용은 Percona 웹 사이트의 pt-online-schema-change를 참조하십시오.
  • 로컬 스토리지 사용량을 모니터링합니다.
  • 쿼리 및 테이블 구조를 최적화합니다.
  • 로그를 비활성화합니다.
  • Aurora MySQL 인스턴스의 규모를 조정하여 로컬 스토리지 용량을 늘립니다.

관련 정보

Amazon RDS for MySQL 및 Amazon Aurora MySQL의 TempTable 스토리지 엔진 사용

Aurora MySQL 버전 3의 새로운 임시 테이블 동작

Aurora MySQL의 임시 스토리지 한도

AWS 공식업데이트됨 일 년 전