명령어/DB

[PostgreSQL] \timing 쿼리 실행 시간을 잰다

jykim23 2026. 8. 2. 19:47
반응형

설치·접속: 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:'
반응형