pqsql 최근쿼리 확인

진웅·2025년 8월 12일

네, PostgreSQL에서 특정 데이터베이스에 대한 최근 쿼리를 확인하는 여러 방법이 있습니다.

1. pg_stat_activity로 현재/최근 쿼리 확인

-- 특정 데이터베이스의 활성 세션
SELECT 
    pid,
    usename,
    datname,
    application_name,
    client_addr,
    query_start,
    state,
    query
FROM pg_stat_activity 
WHERE datname = 'your_database_name'
  AND query != '<IDLE>';

2. pg_stat_statements 확장 사용 (권장)

먼저 확장 기능이 설치되어 있는지 확인:

-- 확장 기능 설치 확인
SELECT * FROM pg_extension WHERE extname = 'pg_stat_statements';

-- 설치되지 않았다면
CREATE EXTENSION pg_stat_statements;

최근 쿼리 통계 조회:

-- 가장 최근 실행된 쿼리들 (호출 횟수 순)
SELECT 
    query,
    calls,
    total_exec_time,
    mean_exec_time,
    last_exec,
    queryid
FROM pg_stat_statements 
ORDER BY last_exec DESC 
LIMIT 20;

-- 특정 패턴 검색
SELECT 
    query,
    calls,
    total_exec_time,
    last_exec
FROM pg_stat_statements 
WHERE query ILIKE '%table_name%'
ORDER BY last_exec DESC;

3. 특정 사용자의 쿼리 확인

SELECT 
    s.query,
    s.calls,
    s.last_exec,
    r.rolname as username
FROM pg_stat_statements s
JOIN pg_authid r ON s.userid = r.oid
WHERE r.rolname = 'specific_username'
ORDER BY s.last_exec DESC;

4. 로그 파일 확인 (로깅 활성화된 경우)

PostgreSQL 설정에서 쿼리 로깅이 활성화되어 있다면:

-- 현재 로그 설정 확인
SHOW log_statement;
SHOW log_min_duration_statement;

5. 실시간 모니터링

-- 5초마다 새로운 쿼리 모니터링
SELECT 
    now() as check_time,
    pid,
    usename,
    datname,
    query_start,
    state,
    left(query, 100) as query_preview
FROM pg_stat_activity 
WHERE datname = 'your_database_name'
  AND state = 'active'
  AND query NOT LIKE '%pg_stat_activity%';

주의사항

  • pg_stat_statements는 가장 유용하지만 확장 기능 설치가 필요합니다
  • superuser 권한이 없으면 자신의 쿼리만 볼 수 있습니다
  • 로그 레벨 설정에 따라 기록되는 쿼리가 다릅니다
  • pg_stat_statements는 정규화된 쿼리를 보여줍니다 (파라미터는 $1, $2로 표시)

pg_stat_statements 확장을 활성화하는 것이 쿼리 히스토리 추적에 가장 효과적입니다.

profile
bytebliss

0개의 댓글