본문 바로가기

Database

RDS tmp_table_size를 올려야하는 이유

mariadb(mysql)은 수행되는 쿼리 문에 order by 와 같은 sort 문이 들어갈 경우

데이터를 호출하고 -> 임시테이블에 호출된 데이터를 sort 하고 -> sort 완료된 데이터를 load 한다

 

데이터가 많은 테이블에 다량의 order by 쿼리가 들어올 경우 tmp 테이블이 감당할 수 있는 만큼은 memory에 적재하여 수행하지만...이후에는 disk를 사용하기 시작하고 cpu까지 부하가 발생

 

lock걸린 테이블 또는 processlist를 보면 아래와 같이 "Copying to tmp table" 또는 "Copying to tmp table on disk" 두개의 state 확인이 가능하다.

RDS를 쓰는 우리의 tmp 기본값은 16MB로 설정되어 있었고 해당 값을 256MB로 늘림.

RDS는 global variable을 RDS의 parameter에서 변경해야 하고 해당 변경건은 DB에 즉시 반영되는 항목 이였다.

'max_heap_table_size' = 1024 * 1024 * 256
'tmp_table_size' = 1024 * 1024 * 256

단, 위 값을 증가 시킨다고 해서 저 상태가 사라지지는 않는다 왜냐면 이미 connection 되어 있는 session에는 적용되지 않기 때문. 즉, 저 서비스를 하는 connection을 끊고 새로 연결해야 적용.

 

아직 tmp 테이블 용량이 늘어남이 어떤 side effect를 주는지는 모르겠지만(1GB 이런식으로 늘리면 안되나??)

tmp 용량을 늘리고 나선 disk를 쓰는 일은 사라졌다