데이터베이스가 디스크에 임시 테이블을 만들고 있음 - Amazon Aurora

데이터베이스가 디스크에 임시 테이블을 만들고 있음

최근 온디스크 임시 테이블 사용량이 최대 백분율까지 크게 증가했습니다. 데이터베이스는 초당 약 개수의 임시 테이블을 생성하고 있습니다. 이는 성능에 영향을 미치고 db-instance의 디스크 작업을 증가시킬 수 있습니다.

지원되는 엔진 버전

이 인사이트 정보는 Aurora MySQL의 모든 버전에서 지원됩니다.

컨텍스트

MySQL 서버가 쿼리를 처리하는 동안 내부 임시 테이블을 만들어야 하는 경우가 있습니다. Aurora MySQL은 내부 임시 테이블을 메모리에 보관할 수 있으며, 이 메모리는 TempTable 또는 MEMORY 스토리지 엔진에서 처리되거나 InnoDB에 의해 디스크에 저장될 수 있습니다. 자세한 내용은 MySQL 참조 설명서의 MySQL의 내부 임시 테이블 사용을 참조하세요.

이 문제의 잠재적 원인

온디스크 임시 테이블의 증가는 복잡한 쿼리를 사용함을 나타냅니다. 구성된 메모리가 메모리에 임시 테이블을 저장하기에 충분하지 않은 경우 Aurora MySQL이 디스크에 테이블을 생성합니다. 이는 성능에 영향을 미치고 디스크 작업을 증가시킬 수 있습니다.

작업

인사이트의 원인에 따라 다른 조치를 취할 것을 권장합니다.

  • Aurora MySQL 버전 3의 경우 TempTable 스토리지 엔진을 사용하는 것이 좋습니다.

  • 필요한 열만 선택하여 반환되는 데이터가 적도록 쿼리를 최적화합니다.

    모든 statement 도구가 활성화되고 시간이 설정된 상태에서 성능 스키마를 켜면 SYS.statements_with_temp_tables를 쿼리하여 임시 테이블을 사용하는 쿼리 목록을 검색할 수 있습니다. 자세한 내용은 MySQL 설명서의 sys 스키마 사용 전제 조건을 참조하세요.

  • 정렬 및 그룹화 작업과 관련된 열을 인덱싱하는 것을 고려해 보세요.

  • BLOBTEXT 열을 피하여 쿼리를 다시 작성합니다. 해당 열은 항상 디스크를 사용합니다.

  • tmp_table_sizemax_heap_table_size 데이터베이스 파라미터를 튜닝합니다.

    이러한 파라미터의 기본값은 16MiB입니다. 메모리 내 임시 테이블에 MEMORY 스토리지 엔진을 사용하는 경우 최대 크기는 tmp_table_size 또는 max_heap_table_size 값 중 더 작은 값으로 정의됩니다. 이 최대 크기에 도달하면 MySQL는 메모리 내 내부 임시 테이블을 InnoDB 온디스크 내부 임시 테이블로 자동 변환합니다. 자세한 내용은 Amazon RDS for MySQL 및 Amazon Aurora MySQL의 TempTable 스토리지 엔진 사용을 참조하세요.

    참고

    CREATE TABLE을 사용하여 MEMORY 테이블을 명시적으로 만들 때는 max_heap_table_size 변수만이 테이블의 최대 크기를 결정합니다. 온디스크 형식으로의 변환도 없습니다.

관련 지표

이 인사이트와 관련된 성능 개선 도우미 지표는 다음과 같습니다.

  • Created_tmp_disk_tables

  • Created_tmp_tables

자세한 내용은 MySQL 설명서에서 Created_tmp_disk_tables를 참조하세요.