-- [SQL-10-3-5-a]: Oracle에서 아래 SQL을 실행했다고 가정
UPDATE startdbora.tr_ord_vac t1
SET ord_amt = 0
-- WHERE ord_no = 10;
SQL
복사
-- [SQL-10-3-5-b] A 세션
-- A 세션은 매뉴얼 커밋으로 변경
-- DBeaver 메뉴로 매뉴얼 커밋 모드로 변경
-- 데이터베이스>트랜잭션모드>Manual Commit
-- 1. 매뉴얼 커밋에서 tr_ord_vac를 조회
SELECT *
FROM startdbpg.tr_ord_vac t1
WHERE t1.ord_no = 10;
-- 7. COMMIT
COMMIT; -- B 세션은 오토 커밋을 유지
SQL
복사
-- [SQL-10-3-5-b] B 세션
-- B 세션은 오토 커밋을 유지
-- 2. 1,000건 UPDATE(데드 튜플 1,000개 생성)
UPDATE startdbpg.tr_ord_vac t1
SET ord_st = t1.ord_st
WHERE t1.ord_no <= 1000;
-- 3. 데드 튜플 확인(n_dead_tup = 1000)
SELECT t1.n_dead_tup ,t1.n_live_tup
FROM pg_stat_user_tables t1
WHERE t1.relid = 'startdbpg.tr_ord_vac'::regclass;
-- 4. 베큠 수행(VERBOSE로 상세 정보 출력)
VACUUM VERBOSE startdbpg.tr_ord_vac;
-- 5. 다시 데드 튜플 확인(n_dead_tup이 그대로 1,000)
SELECT t1.n_dead_tup ,t1.n_live_tup
FROM pg_stat_user_tables t1
WHERE t1.relid = 'startdbpg.tr_ord_vac'::regclass;
-- 6. tr_ord_vac에 락을 잡고 있는 pid 확인
SELECT t1.locktype, t1.pid
FROM pg_locks t1
WHERE t1.relation = 'startdbpg.tr_ord_vac'::regclass;
SQL
복사
