Mariadb tmp 용량 증가 ( Disk full )

성난호랑이 시니철 ㅣ 2024. 2. 23. 20:35

mariadb tmp 용량 증가

 

어느날 서비스를 잘 운영하던중 DB서버 disk가 용량이 100%됬다는 알림이 왔다...

 

확인해보니 100% ? 우선 DB서버에  backup에있는 mariadb dump 파일을 삭제했데 처음에는

 

잘되는거 같았는데 ...

 

다시 disk가 100% 됬다는 알람이 왔다..

 

용량이 왜이렇게 많은지 확인하다 테이블에 데이터가 많아저서 그런가 하고 테이블 용량을 확인했다.

 

mariadb table 용량 확인

SELECT table_name AS 'TableName',
                 ROUND(SUM(data_length+index_length)/(1024*1024), 2) AS 'All(MB)',
                 ROUND(data_length/(1024*1024), 2) AS 'Data(MB)',
                 ROUND(index_length/(1024*1024), 2) AS 'Index(MB)'
FROM information_schema.tables
GROUP BY table_name
ORDER BY data_length DESC;

 

생각보다.. 용량이 확 튀는게 없었습니다..

 

그러다가 서버에서 du -h * 로 어떤게 문제인지 찾았습니다 ㅜ

 

du -h * 현재 디렉토리 하위 포함 용량 확인 

 

tmp 폴더가 100G 넘어가는걸 확인했다 dump 파일을 삭제하면 tmp이 증가하는거엿다..

 

극혐.. 

 

찾아보니 이런 문제가 좀있는거 같습니다.

 

tmp 폴더는 

일반적으로 임시 파일을 저장하는 데 사용됩니다.

스토리지 엔진으로부터 받아온 레코드를 order by, group by, alter table 명령어 수행을 위해 내부적인 임시 테이블을 사용한다.
일반적으로 임시 테이블은 처음엔 메모리에 생성됐다가 설정값 (max_heap_table_size 혹은 tmp_table_size 값)을 초과하는 경우 디스크로 옮겨진다.
쿼리 수행이 완료되면 자동으로 삭제 된다.

 

라고 찾아보니 나오네요 .. 

 

휴 .. 다행히 DB서버가 내려간거는 아니라서 빨리 어떤 쿼리가  문제인지 찾아보았다.

 

지금 사용되고있는 프로세스 확인

show processlist;

 

 

내용을 조회 하면 위와 같은 데이터가 나옵니다. 지금은 없지만

 

id 프로세스 아이디 Mysql에서 관리하는 스레드 번호
User 접속하고 있는 유저 아이디
Host 유저가 접속하고있는 호스트명 ,IP
db 데이터베이스
Command 스레드의 현재 상태 (Sleep, Query, Locked ..  )
Time 스레드가 현재 커맨드상태에서 동작하는 시간
State 스레드의 상태에 대해 사람이 읽을 수 있는 형태의 정보
Info 실행되고있는 SQ

 

요기서 Time가 큰걸 발견 Command가 Query 이고  Info에 Query 내용이 나와있엇다 우선 프로세스를 죽이고 확인

kill 프로세스ID

 

이렇게 작업하고 정상 동작 확인했다

Info에나와있던 Query를 확인했으니 Query 만든 사람찾아 고쳐야할거 같습니다.

 

끝!