pqsql queyr txn 확인 테스트

진웅·2025년 8월 12일

간단한 commit 테스트를 위한 test 테이블 생성과 트랜잭션 테스트입니다.

1. 테스트 테이블 생성

-- 간단한 테스트 테이블 생성
CREATE TABLE test_table (
    id SERIAL PRIMARY KEY,
    name VARCHAR(50),
    created_at TIMESTAMP DEFAULT NOW()
);

2. 기본 COMMIT 테스트

-- 트랜잭션 시작
BEGIN;

-- 데이터 삽입
INSERT INTO test_table (name) VALUES ('test1');
INSERT INTO test_table (name) VALUES ('test2');

-- 데이터 확인 (트랜잭션 내에서)
SELECT * FROM test_table;

-- COMMIT 테스트
COMMIT;

-- 커밋 후 확인
SELECT * FROM test_table;

3. ROLLBACK 테스트

-- 트랜잭션 시작
BEGIN;

-- 데이터 삽입
INSERT INTO test_table (name) VALUES ('test3');

-- 현재 상태 확인
SELECT * FROM test_table;

-- 롤백
ROLLBACK;

-- 롤백 후 확인 (test3는 없어야 함)
SELECT * FROM test_table;

4. 시간 측정하며 COMMIT 테스트

-- 시작 시간 확인
\timing on

BEGIN;
INSERT INTO test_table (name) VALUES ('timing_test');
-- COMMIT 시간 측정
COMMIT;

-- 타이밍 끄기
\timing off

5. 대량 데이터 COMMIT 테스트

-- 대량 데이터로 COMMIT 성능 테스트
BEGIN;

-- 1000개 레코드 삽입
INSERT INTO test_table (name) 
SELECT 'bulk_test_' || generate_series(1, 1000);

-- COMMIT (시간이 오래 걸릴 수 있음)
COMMIT;

-- 결과 확인
SELECT COUNT(*) FROM test_table;

6. 트랜잭션 상태 모니터링

-- 다른 세션에서 실행하여 트랜잭션 상태 확인
SELECT 
    pid,
    state,
    query_start,
    xact_start,
    query
FROM pg_stat_activity 
WHERE datname = current_database()
  AND pid != pg_backend_pid();

7. 간단한 스트레스 테스트

-- 연속 트랜잭션 테스트
DO $$
BEGIN
    FOR i IN 1..10 LOOP
        BEGIN
            INSERT INTO test_table (name) VALUES ('stress_test_' || i);
            COMMIT;
        END;
    END LOOP;
END $$;

8. 테스트 결과 확인

-- 전체 데이터 확인
SELECT name, COUNT(*) 
FROM test_table 
GROUP BY name 
ORDER BY name;

-- 테이블 크기 확인
SELECT pg_size_pretty(pg_total_relation_size('test_table')) as table_size;

9. 정리

-- 테스트 완료 후 테이블 삭제
DROP TABLE test_table;

빠른 테스트용 원라이너

-- 한 번에 실행 가능한 간단 테스트
CREATE TABLE IF NOT EXISTS quick_test (id SERIAL, data TEXT);
BEGIN; INSERT INTO quick_test (data) VALUES ('test'); COMMIT;
SELECT * FROM quick_test;
DROP TABLE quick_test;

이 테스트들로 현재 PostgreSQL의 COMMIT 동작이 정상인지 확인할 수 있습니다. 특히 \timing on을 사용하면 COMMIT에 걸리는 시간을 측정할 수 있어서 성능 문제 진단에 도움이 됩니다.

profile
bytebliss

0개의 댓글