MySQL, MariaDB

MySQL/MariaDB Temp table and Temp file 모니터링

SungWookKang 2019. 3. 24. 11:19
반응형

MySQL/MariaDB Temp table and Temp file 모니터링

 

·      Version : MySQL 5.7, Docker

 

MySQL/MariaDB에서 Temp table Temp file 모니터링하는 방법에 대해서 알아본다. 데이터베이스 서브 시스템에서 상대적으로 느린 부분이 디스크이다. 임시 테이블 임시 파일이 디스크에 기록될때 데이터베이스의 성능 저하가 발생할 있기기 때문에 지속적인 모니터링을 통해서 디스크에 생성되는 임시 테이블 파일이 높지 않은지 살펴보아야 한다.

아래 스크립트는 temp table temp file 지표를 나타낸다.

Show status where variable_name like ‘%tmp %’

 

 


Variable Name

Commets

Created_tmp_disk_tables

디스크에 생성된 temp table 횟수

Created_tmp_files

생성된 temp file 횟수

Created_tmp_tables

메모리와 디스크에 생성된 temp table 횟수

 

지표에서 성능 저하가 발생하는 부분은 Created_tmp_disk_tables 항목이다. 항목의 수치가 높다면 현재 쿼리를 처리하기 위해 디스크를 많이 사용하고 있다는 뜻이다. 일반적으로 아래와 같은 쿼리는 임시 테이블을 생성한다.

·       OEDER BY GROUP BY 명시된 컬림이 다른 쿼리

·       개의 쿼리에 DISTINCT ORDER BY 동시에 존재하는 경우

·       DISTINCT 인데스러 처리되지 못하는 쿼리

·       UNION ALL 사용된 쿼리

·       실행계획에 select_type UNION RESILT 나타나는 경우

·       실행계획에 select_type DERIVDE 쿼리

 

외에도 임시 테이블에 저장되는 레코드의 크기가 tmp_table_size 또는 max_heap_table_size보다 경우 디스크에 임시 테이블을 생성하여 저장한다. 디스크 사용을 줄이기 위해 tmp_table_size max_heap_table_size 시스템 변수 값을 증가시키면 MySQL 서버가 사용할 있는 메모리 공간이 줄어들기 때문에 주의해야 한다. 아래 스크립트는 tmp_table_size max_heap_table_size 확인하는 스크립트 이다.

show variables where variable_name in (‘tmp_table_size’, ‘max_heap_table_size’)

 

 

SELECT 절에서 사용되는 컬럼에 따라서도 디스크에 임시 테이블이 생성되는데, TEXT, BLOB 형식의 컬럼이 포함되는 경우 MEMORY 스토리지 엔진이 데이터 타입을 지원하지 않아 디스크에 임시 테이블을 생성한다.

 

[참고자료]

·       https://dev.mysql.com/doc/refman/8.0/en/server-status-variables.html#statvar_Created_tmp_disk_tables

 

 

2018-05-02 / 강성욱 / http://sqlmvp.kr / http://sqlangeles.com

 

MySQL, temp table, temp file 모니터링, 임시 테이블, 임시 파일 모니터링, tmp_table_size, max_heap_table_size, created_tmp_disk_tables, created_tmp_files, created_tmp_tables


반응형