쿼리 (Query)
- 단어 뜻으로는 '질의', '문의', '묻다', '질문하다'
- 데이터베이스 등에서 원하는 정보를 검색하기 위해 요청하는 것
- 이러한 질의를 위한 특정한 구조의 프로그램 언어를 사용하기도 하며 대표적으로 SQL (Structured Query Langauge) 이 있다.
- 쿼리문을 작성한다 라고 하면 데이터베이스에서 내가 원하는 정보를 가져오게 하는 코드를 작성하는 것을 말한다.
- 쿼리문을 잘 작성한다 라고 하면 데이터베이스에서 필요한 데이터에 빠르게 접근하고, 데이터를 능숙하게 핸들링한다는 말로도 볼 수 있다.
Slow Query
DBMS 가 클라이언트로부터 요청받은 쿼리를 수행할 때 일정 시간 이상 수행되지 못한 쿼리를 말한다.
길어야 1-2초 걸리는 DB 쿼리가 예상보다 오래 걸리는 경우를 말한다.
슬로우 쿼리 로그
지정한 시간 이상이 소요된 쿼리가 기록되는 파일이다.
파일에 기록할 수도 있고, 테이블에 기록할 수도 있다.
슬로우 쿼리 로그는 에러가 발생한 쿼리를 기록하지 않는다.
제너럴 로그에서는 에러가 발생한 쿼리를 포함해서 모든 쿼리를 기록하기 때문에 두 개의 로그를 모두 활성화하면 프로파일링에 더 도움된다.
서브쿼리
쿼리 안에 있는 쿼리를 말한다.
슬로우 쿼리를 해결하려면..
어떤 쿼리가 문제인지 확인해야 한다.
수행 시간이 오래 걸리는 쿼리를 잡기 위해서 슬로우 쿼리 로그를 활성화한다.
※ 다만 여기서도 슬로우 쿼리 수집 자체가 서버의 안정성에 부담이 될 수도 있다는 점을 고려해야 한다. 안하느니만 못할 수도 있는 것이다.
해당 쿼리를 찾아 컬럼을 추가하거나, 인덱스를 걸거나 하는 식으로 최적화한다.
그러나 슬로우 쿼리가 발생하는 이유는 다양하기 때문에 복합적으로 판단해서 해결해야 한다.
디비설계, 인덱스 설계가 잘못되었다던가, apache, mysql의 설정, 서버의 설정, 프로그램의 코딩오류 (뺑이치게 하는 코딩법), 부적절한 mysql index, sql 문장, 지나치게 많거나 복잡한 sql query 갯수, 과도하게 트래픽을 유발하는 이미지, 서버의 h/w 용량부족, 부적절한 h/w 설정 등의 수많은 요인 때문에 발생하는 것..
하나씩 찾아가면서 수사망을 좁혀가며 원인, 혹은 복합적인 원인들을 찾아 해결해야 한다고 한다.
참고)
https://365kim.tistory.com/102
https://hyperconnect.github.io/2020/08/31/improve-slow-query.html
https://jsonobject.tistory.com/408
http://opencode.co.kr/bbs/board.php?bo_table=gnu4_turning&wr_id=168
'자라나라 PM' 카테고리의 다른 글
호스팅, 웹스팅, 서버호스팅 등에 관련한 개념 정리 (0) | 2022.07.18 |
---|---|
MAU, DAU, ACU, ARPU (0) | 2022.07.14 |
인덱스 (index) (0) | 2022.07.14 |
모듈, 패키지, 프레임워크, 라이브러리 (0) | 2022.07.13 |
REST API 와 Websocket API 의 차이는? (0) | 2022.07.12 |