3 min read

Mysql 문제되는 쿼리 찾기

이 글은 Mysql의 튜닝과는 무관한 글이고 소프트웨어적으로 느린 포인트를 알기 위해 적는 글이다.

DB의 특정쿼리가 느려 소프트웨어가 느려지는 경우가 많다. 이를 slow_query라고 하며 mysql에서는 이를 찾아내주는 여러 방법이 있다.

대표적으로 slow_query_log이고 slow_query의 기준을 정해주는 long_query_time이다.

long_query_time 기본값은 10초로 되어있지만 이를 2초로 해주시기 바랍니다. 그 이유는 10초가 걸리는 서비스라는 경우는 거의 없기 때문이다. 사실 1초도 길다고 생각이 들지만 1초인 경우 너무 많은 slow_query가 발생할수 있어 2초라고 이야기 하였다.

이제 slow_query를 모았다고 가정해보자. 하지만 모은 slow_query가 엄청나게 많아 분석하기 힘들다면 mysqldumpslow를 사용해보는것이 좋다.

원사진 : https://www.programering.com/q/MjMykDNwATM.html

해당 프로그램은 mysql이 설치된곳에 기본적으로 깔려있는 툴이다. 해당툴은 슬로우 쿼리를 요약하고 얼마나 시간을 사용하는지 평균을 측정해주기 때문에 문제되는 쿼리 순부터 해결할수 있다.

이제까지는 시간이 걸린 쿼리에 대해서만 이야기하였지만 그 반대도 있다.

인덱싱이 안걸린 쿼리중에 용량이 작아 빠른시간안에 끝나는 쿼리가 있다. 이와 같은경우는 슬로우쿼리가 아니지만 추후에 데이터가 많아지면 문제가 되는 쿼리이다. 사실 빠르게 된다고 한들 시스템에 약영향에 걸린다.

이와 같은 문제를 해결하기 위해 mysql에서는 log_queries_not_using_indexes이 존재한다. 해당 옵션을 키게되면 아무리 slow_quey 가 만족하는 시간을 만족을 안해도 인덱싱이 안걸린 쿼리문인경우 log에 저장된다.

위와 같은 방법으로 Slow_query를 찾았다고 한들 왜 느린지는 설명해주지는 않습니다. 분석의 경우에는 다음에 따로 포스팅을 하겠습니다.