최근 쿼리 튜닝을 통해 성능을 향상시키는 것에 흥미가 생겨 오랜만에 기록을 남깁니다..!
*MsSQL관련 내용을 기반으로 정리하였으나 최대한 MySQL과 중복되는 부분만을 공유합니다!
*따라서 MsSQL의 내용이 섞일 수 있습니다..!
그보다 쿼리튜닝이 뭐지?
관계형 데이터베이스에서의 쿼리튜닝이란 SQL문을 최적화해 원하는 결과를 좀 더 빠르게 하는것을 뜻한다.
그럼 쿼리 튜닝을 왜 해야 할까?
빠른 데이터 조회를 통해 사용자가 더 빠르게 원하는 결과를 받을 수 있게 된다!
그러면 사용자 경험 즉, UX가 향상되어 웹사이트에 더 오래 머무르게 되고 이는 수익으로 직결 될수도 있다!
그렇다면 쿼리 튜닝을 어떻게 해야할까?
쿼리튜닝을 하기 전에 알아두어야 할것들이 몇가지 있다.
오늘은 짧게 용어와 쿼리 튜닝전 명심해야할 것들에 대해 설명하겠습니다.
Cardinality Estimation(CE)
- 쿼리 튜닝에서 가장 중요한 선수작업이다.
- 우리말로는 행수 추정이라고 한다.
- 쉽게 말하자면 SELECT문의 결과 행수가 몇개나 되는지를 말한다.
- 행수추정을 기반으로 데이터베이스 엔진 내부에 있는 옵티마이저가 인덱스를 사용할 것인지, 사용하면 어느 방법을 통해 데이터를 조회할 것인지 등을 정하게 된다. 따라서 행수추정이 잘못되면 잘못된 실행계획이 설립되게 되므로 쿼리 성능이 매우 느려진다!!
Density
- 우리말로 하면 밀도이다.
- (1/유일값개수)로 0에 가까울수록 중복된 값이 적음을 뜻하고, 1에 가까울수록 중복된 값이 많다는 것을 의미한다.
Selectivity
- 우리말로 선택도라고 한다.
- (결과 행수/테이블 행수)로 선택도가 좋다는 것은 SELECT의 결과로 적은 행이 선택된다는 의미이고, 선택도가 나쁘다라는 것은 많은 행이 선택된다는 의미이다.
Cost-Based Optimizer
- 대부분의 SQL에서 사용하는 엔진으로, 예상되는 비용을 비교해서 어떤 방법으로 실행할지 선택하는 방법이다.
- CE를 기반으로 비용이 산정되며, CE자체가 예상 행수이기 때문에 최종적으로 계산 되는 비용도 예상값이다.
- 따라서 CE를 이상하게 하면 비용계산도 이상하게 계산되어 쿼리 성능이 좋아지기 어렵다.
OLTP vs OLAP
Online Transaction Processing(OLTP)
- 주로 단쿼리를 말하며 작은 범위의 결과를 얻어야 할 때 사용되는 쿼리의 유형이다.
- SELECT 되는 결과가 적기 때문에 INDEX처리를 해줘야 성능이 좋아진다.
- 또한 CPU가 하나면 충분한 쿼리이다.
Online Analytical Processing(OLAP)
- 반면 OLAP는 JOIN이 엄청 많이 되어야 한다거나 대량의 데이터를 조회해야 할 때 사용되는 쿼리의 유형이다.
- 대량의 데이터 조회 특성상 병렬처리가 이루어져야 하며, 따라서 여러개의 CPU가 필요하다.
- 좋은 서버가 필요한 이유는 바로 OLAP의 성능을 위해서이다.
두가지 쿼리 유형을 왜 알아야 할까?
바로 쿼리의 유형별로 튜닝의 방법이 정해지기 때문이다.
따라서 해당 쿼리가 어느 유형의 쿼리인지 먼저 판단하고 진단분석의 결과가 해당 쿼리 유형의 특징을 따르고 있는지 보는 것이 쿼리 튜닝의 가장 기본적인 사항이다.
여기까지 쿼리 튜닝을 위한 기본적인 사항을 알아보았습니다! 끝!
반응형
SMALL
'웹 프로그래밍 > BackEnd' 카테고리의 다른 글
[Docker] Docker란? (0) | 2021.11.11 |
---|---|
[Express] pm2로 로컬에서 배포하기 (0) | 2021.10.20 |
[Express, nodejs] SPA에서 socket.io로 채팅 구현하기 (2) | 2021.10.13 |
[네트워크] Websocket과 socket.io (0) | 2021.10.06 |
[Backend] OAuth란?(+ 동작방법) (3) | 2021.09.30 |