테마
본사 레거시 유통은 지난달 10:30에 CF11에 인덱스를 만들다가 47초 동안 매장 POS의 판매 저장을 세웠다. 포스트모템의 재발방지 1번은 "영업시간의 인덱스 생성에는 ONLINE을 붙인다"였다.
이번 달에는 MD팀의 상품별 판매 조회용 인덱스를 같은 시간대에 ONLINE으로 만들었다. 매장 POS는 아무 문제가 없다. 그런데 리허설(같은 크기의 사본)에서 52초 걸린 생성이 11:08인 지금 38분째 끝나지 않는다. MD팀은 12:00 보고 전에 조회가 빨라지기를 기다리고 있다.
CF11 판매상품: 1,096,708행 · 8,204블록 · CF11_PK (SLE_NO, ITM_NO)(ITM_NO만으로 찾으면 선두 컬럼이 아니다) · 영업 중에는 POS가 판매를 INSERT하고 반품과 수량 정정을 UPDATE한다CF11_X01 (ITM_NO, SLE_NO) · 운영 DB는 EE다enq: TM - contention으로 기다렸다(그때의 V$LOCK에서 DDL은 CF11에 TM 4)-- 10:30 · 재발방지 1번대로
CREATE INDEX CF11_X01 ON CF11 (ITM_NO, SLE_NO) ONLINE;
[V$SESSION — 11:08:20]
SID SERIAL# PROGRAM STATUS EVENT SECS BLOCKING_SESSION 하고 있는 문장 / 마지막 문장
152 8811 sqlplus (DBA) ACTIVE enq: TX - row lock contention 2,292 88 CREATE INDEX CF11_X01 ON CF11 (ITM_NO, SLE_NO) ONLINE
88 4127 SQL Developer INACTIVE SQL*Net message from client 2,381 (마지막) UPDATE CF11 SET SLE_QTY = 3 WHERE SLE_NO = '20231208-0217' AND ITM_NO = '1000044'
(POS 세션 41개 · 기다리는 세션 없음 · 판매 저장 평균 0.02초)
[V$LOCK — 같은 시각]
SID TYPE 대상 / 이름표 LMODE REQUEST BLOCK
152 TM CF11 2 0 0
152 TX 88 의 트랜잭션 0 4 0
88 TM CF11 3 0 0
88 TX 88 의 트랜잭션 6 0 1
(POS 세션들: TM CF11 3 · 각자의 TX 6 — 누구도 152 에게 막히지 않는다)
[V$TRANSACTION — SID 88]
START_TIME USED_UBLK USED_UREC
12/08/23 10:28:39 1 1 ← 10:28 에 한 행을 고치고 COMMIT 하지 않았다
[지난달 · ONLINE 없이 같은 크기의 인덱스]
10:30:02 ~ 10:30:49 DDL 이 CF11 에 TM 4 · POS 판매 저장 enq: TM - contention (최대 46초)
V$SESSION과 V$LOCK을 근거로 인덱스 생성이 무엇을 기다리는지, 그런데도 POS가 멀쩡한 이유를 설명하시오. 지난달의 ONLINE 없는 생성과 락이 어떻게 다른지도 쓰시오.