API latency가 DB 실행 시간에 끌려갑니다.
느린 쿼리는 API, ORM, DB를 같이 봐야 고친다
SQL 한 줄만 보지 말고 요청 화면, 관계 로딩, 인덱스, 반환 데이터 크기를 같은 흐름에서 점검합니다.
CPU, I/O, connection 대기가 늘어납니다.
불필요한 scan과 전송량이 누적됩니다.
긴 transaction과 lock이 요청을 막습니다.
Request shape
화면이 실제로 필요한 데이터부터 좁힙니다.
- 필터와 정렬
WHERE, JOIN, ORDER BY가 인덱스 후보입니다. - 반환 범위
보여줄 컬럼과 관계만 고릅니다.
NestJS / ORM
편한 API 뒤에 숨어 있는 SQL 모양을 확인합니다.
- Repository find
관계 로딩과 SELECT 범위가 숨을 수 있습니다. - QueryBuilder
join, select, where를 명시합니다.
Database engine
DB가 실제로 어떻게 읽고 기다리는지 봅니다.
- EXPLAIN
scan 방식, 인덱스, rows 예측을 확인합니다. - Lock
긴 작업은 다른 요청의 대기로 보입니다.
| 증상 | 먼저 볼 것 | 대표 조치 |
|---|---|---|
| rows가 많다 | 반환 row와 읽은 row를 분리 | pagination, select 축소 |
| 쿼리 수가 많다 | 같은 SQL 반복 여부 | join 또는 batch loading |
| scan이 크다 | 필터와 정렬 컬럼 | 단일/복합 인덱스 검토 |
| 락이 길다 | transaction 범위 | 작업 범위와 격리 수준 축소 |
핵심: 요청 패턴이 SQL 모양을 만들고, SQL 모양이 DB 비용과 사용자 응답 시간을 결정한다.