Mysql 문제되는 쿼리 찾기
이 글은 Mysql의 튜닝과는 무관한 글이고 소프트웨어적으로 느린 포인트를 알기 위해 적는 글이다.
DB의 특정쿼리가 느려 소프트웨어가 느려지는 경우가 많다. 이를 slow_query라고 하며 mysql에서는 이를 찾아내주는 여러 방법이 있다.
대표적으로 slow_query_log이고 slow_query의 기준을 정해주는 long_query_time이다.
![](https://www.kudryavka.me/content/images/wordpress/2019/01/slow.jpg)
long_query_time 기본값은 10초로 되어있지만 이를 2초로 해주시기 바랍니다. 그 이유는 10초가 걸리는 서비스라는 경우는 거의 없기 때문이다. 사실 1초도 길다고 생각이 들지만 1초인 경우 너무 많은 slow_query가 발생할수 있어 2초라고 이야기 하였다.
이제 slow_query를 모았다고 가정해보자. 하지만 모은 slow_query가 엄청나게 많아 분석하기 힘들다면 mysqldumpslow를 사용해보는것이 좋다.
![](https://www.kudryavka.me/content/images/wordpress/2019/01/mysqldumpslow.jpg)
해당 프로그램은 mysql이 설치된곳에 기본적으로 깔려있는 툴이다. 해당툴은 슬로우 쿼리를 요약하고 얼마나 시간을 사용하는지 평균을 측정해주기 때문에 문제되는 쿼리 순부터 해결할수 있다.
이제까지는 시간이 걸린 쿼리에 대해서만 이야기하였지만 그 반대도 있다.
인덱싱이 안걸린 쿼리중에 용량이 작아 빠른시간안에 끝나는 쿼리가 있다. 이와 같은경우는 슬로우쿼리가 아니지만 추후에 데이터가 많아지면 문제가 되는 쿼리이다. 사실 빠르게 된다고 한들 시스템에 약영향에 걸린다.
![](https://www.kudryavka.me/content/images/wordpress/2019/01/log_queries_not_using_indexes.jpg)
이와 같은 문제를 해결하기 위해 mysql에서는 log_queries_not_using_indexes이 존재한다. 해당 옵션을 키게되면 아무리 slow_quey 가 만족하는 시간을 만족을 안해도 인덱싱이 안걸린 쿼리문인경우 log에 저장된다.
위와 같은 방법으로 Slow_query를 찾았다고 한들 왜 느린지는 설명해주지는 않습니다. 분석의 경우에는 다음에 따로 포스팅을 하겠습니다.