SQL 실전 · 성능과 실행계획 · 퀴즈
퀴즈: 성능과 실행계획
문항 7개. 정답과 해설은 풀어 본 뒤에 보여 드립니다.
EXPLAIN 의 cost 값에 대한 설명으로 옳은 것은?
- 밀리초 단위로 환산해 놓은, 예상되는 실행 시간이다
- 순차 페이지 한 장 읽기를 1.0 으로 놓은 임의 단위이며 같은 쿼리의 계획 후보를 비교하는 데만 의미가 있다
- 읽어야 할 것으로 추정한 행 수다
- 예상되는 메모리 사용량이다
실행 계획을 읽을 때 가장 중요한 신호는?
- Seq Scan 노드의 존재 여부
- 예상 rows 와 실제 rows 의 괴리
- cost 의 절대값
- 노드의 개수
actual time=0.008..0.011 rows=4 loops=52310 인 노드의 실제 총 기여 시간은?
- 약 575ms
- 약 0.011ms
- 약 4ms
- 계획에 적혀 있다
Hash 노드에 Batches: 32 로 표시되었다. 가장 효과적인 조치는?
- 조인 컬럼에 인덱스를 추가한다
- ANALYZE 로 통계를 갱신한다
- 해당 세션의 work_mem 을 올린다
- 쿼리에서 조인 순서를 바꾼다
계획에서 Filter 와 Index Cond 의 차이는?
- 표기만 다를 뿐 동일하다
- Filter 가 항상 더 빠르다
- Index Cond 는 인덱스가 없을 때 표시된다
- Filter 는 행을 읽은 뒤 버리는 것이고 Index Cond 는 애초에 읽지 않는 것이다
같은 쿼리가 어제는 20ms, 오늘은 900ms 였다. 계획은 동일했다. 가장 먼저 확인할 것은?
- Buffers 의 shared read 비율 (캐시에 없어 디스크로 내려간 블록)
- 마지막 통계 갱신 시각
- 대상 테이블에 걸려 있는 인덱스의 개수와 종류
- 세션의 트랜잭션 격리 수준
EXPLAIN ANALYZE 로 UPDATE 문을 분석할 때 반드시 해야 할 일은?
- 읽기 전용 복제본에서 실행한다
- LIMIT 를 붙인다
- 트랜잭션으로 감싸고 롤백한다
- 옵션에 SAFE 를 추가한다