테마
한빛유통은 외부 분석 업체에 주문 데이터를 넘기기 전에, 분석 DB 사본 T_ORD_BIG의 고객번호를 가명(해시값)으로 바꾸기로 했다. 개발자가 칸 길이를 늘리고 UPDATE 한 문장으로 바꾸는 스크립트를 리허설했더니 2분 47초가 걸리고 redo가 약 598MB 나왔다.
끝난 뒤에는 분석 업체가 쓸 기간 조회가 전보다 1.5배 많은 블록을 읽었다. 오과장: "값만 바꿨고 행 수는 그대로인데 조회는 왜 느려지죠?"
T_ORD_BIG(분석 DB 사본): 1,000,000행 · 5,826블록(블록당 약 172행, 행 평균 약 43바이트) · PCTFREE 10 · CUS_ID VARCHAR2(40) 'CUS_000123'(10자)RAWTOHEX(STANDARD_HASH(…, 'SHA256'))로 만든 64자다. 행마다 54바이트씩 길어진다.IX_ORD_BIG_DT_AMT (ORD_DT, ORD_AMT) 하나다. 분석 업체 계정 ANL_VENDOR에 SELECT 권한이 있고, 통계는 최신이다(ORD_ST에 히스토그램). 트리거와 FK는 없다.-- 분석 DB · 업체 전달 전 가명 처리 (리허설)
ALTER TABLE T_ORD_BIG MODIFY (CUS_ID VARCHAR2(64));
UPDATE T_ORD_BIG
SET CUS_ID = RAWTOHEX(STANDARD_HASH('HBANL' || CUS_ID, 'SHA256'));
COMMIT;
------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers |
------------------------------------------------------------------------------------------
| 0 | UPDATE STATEMENT | | 1 | | 0 |00:02:47.10 | 3108K |
| 1 | UPDATE | T_ORD_BIG | 1 | | 0 |00:02:47.10 | 3108K |
| 2 | TABLE ACCESS FULL| T_ORD_BIG | 1 | 1000K| 1000K|00:00:00.43 | 5826 |
------------------------------------------------------------------------------------------
[세션 통계 — UPDATE 한 번]
redo size 약 598 MB
undo change vector size 약 141 MB
db block changes 약 3,060,000
[UPDATE 뒤 — ANALYZE TABLE T_ORD_BIG LIST CHAINED ROWS]
블록 5,826 → 12,630 · CHAINED_ROWS 517,300행 (52%)
업체의 기간 조회 (2024년 6월 · IX_ORD_BIG_DT_AMT → 테이블)
Buffers 27,481 → 41,720 · table fetch continued row 14,239