반응형
설치·접속: PostgreSQL 설치와 접속
부제: 쿼리마다 걸린 시간을 밀리초 단위로 출력해 성능을 눈으로 잡는다
psql -d shop -c '\timing on' -c 'SELECT count(*) FROM orders;' # 켜고 실행
# psql 안에서는 \timing 한 번이 토글 (켜짐/꺼짐 반복)
psql -d shop -c '\timing on' -c 'EXPLAIN ANALYZE SELECT * FROM orders WHERE user_id = 40;'
Timing is on.
count
-------
200
(1 row)
Time: 0.490 ms\timing을 켜면 이후 실행하는 모든 쿼리 밑에 Time: x.xxx ms가 붙는다. 인덱스를 걸기 전후를 비교하거나, 느린 쿼리 후보를 좁힐 때 가장 손쉬운 계측 도구다. 다만 여기 찍히는 시간은 클라이언트가 요청을 보내고 응답을 받기까지의 왕복 시간이라, 순수 실행 계획 시간이 궁금하면 EXPLAIN ANALYZE와 함께 보는 게 정확하다. 대화형 psql에서는 \timing을 한 번 더 치면 꺼진다.
이렇게도 쓴다
실행 계획과 실제 시간을 함께 뜯어본다. (조합: EXPLAIN ANALYZE)
psql -d shop -c '\timing on' -c 'EXPLAIN ANALYZE SELECT * FROM orders WHERE user_id = 40;'
인덱스가 붙은 조인의 시간을 잰다.
psql -d shop -c '\timing on' -c 'SELECT u.name, count(*) FROM orders o JOIN users u ON u.id=o.user_id GROUP BY u.name ORDER BY 2 DESC LIMIT 3;'
같은 쿼리를 두 번 재서 캐시 효과를 비교한다.
psql -d shop -c '\timing on' -c 'SELECT sum(qty) FROM orders;' -c 'SELECT sum(qty) FROM orders;'
SQL 파일 전체의 실행 시간을 각 구문마다 찍는다. (조합: -f)
psql -d shop -c '\timing on' -f batch.sql
시간 라인만 뽑아 로그로 남긴다. (조합: grep)
psql -d shop -c '\timing on' -c 'SELECT * FROM orders;' 2>&1 | grep '^Time:'반응형
'명령어 > DB' 카테고리의 다른 글
| [PostgreSQL] 미사용·중복 인덱스 색출 — pg_stat_user_indexes로 안 쓰는 57MB 걷어내기 (0) | 2026.08.02 |
|---|---|
| [PostgreSQL] pg_trgm GIN — `LIKE '%foo%'` 선행 와일드카드를 인덱스로 (0) | 2026.08.02 |
| [PostgreSQL] 디스크가 차오를 때 어디가 부었는지 찾기 — 테이블·인덱스 크기와 bloat (0) | 2026.08.02 |
| [PostgreSQL] 통계와 ANALYZE — 대량 적재 직후 플래너가 행 수를 5000으로 헛짚을 때 (0) | 2026.08.02 |
| [PostgreSQL] 지금 서버에서 뭐가 돌고 뭐가 멈춰 있나 — pg_stat_activity (0) | 2026.08.02 |