테마
버거원 본사는 따로 돌던 콜센터(전화 주문) 시스템을 POS 쪽으로 합친다. 콜센터의 지난 1년 주문은 이미 ORD에 옮겼고, 이번에는 그 주문상품 102,416행을 ORD_ITEM에 옮긴다. 리허설에서 이 단계가 11.8초 걸렸다. 반영은 다음 주 화요일 14:00이고, 그 시간에도 매장 POS가 ORD_ITEM에 계속 넣는다.
ORD_ITEM의 ORD_DT와 ORD_HMS는 ORD에서 복사해 둔 칸(반정규화)이다. POS 앱은 이 두 칸을 보내지 않으므로, 2015년부터 행 트리거가 ORD를 찾아 채운다.
ORD_ITEM 주문상품: 2,472,717행 · 55,265블록 · ORD_ITEM_PK (ORD_NO, ITEM_ID) · ORD_ITEM_X01 (ORD_DT, ORD_HMS) · 행 트리거 TRG_ORD_ITEM_BIORD 주문: 이 문제에서는 콜센터 주문 41,060건이 더 들어가 1,041,060행 · 23,340블록이다. ORD_PK (ORD_NO)STG_CALL_ITEM 콜센터 주문상품: 102,416행 · 512블록 · ORD_NO · ITEM_ID · QTY. 모든 ORD_NO가 ORD에 있다.ORD_ITEM에 넣는다. FK는 없다.-- 2015년부터 있는 트리거
CREATE OR REPLACE TRIGGER TRG_ORD_ITEM_BI
BEFORE INSERT ON ORD_ITEM
FOR EACH ROW
BEGIN
SELECT ORD_DT, ORD_HMS
INTO :NEW.ORD_DT, :NEW.ORD_HMS
FROM ORD
WHERE ORD_NO = :NEW.ORD_NO;
END;
-- 콜센터 주문상품 이관 (리허설)
INSERT INTO ORD_ITEM (ORD_NO, ITEM_ID, ORD_ITEM_QTY)
SELECT ORD_NO, ITEM_ID, QTY
FROM STG_CALL_ITEM;
COMMIT;
--------------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers |
--------------------------------------------------------------------------------------------------
| 0 | INSERT STATEMENT | | 1 | | 0 |00:00:11.78 | 1046K |
| 1 | LOAD TABLE CONVENTIONAL | ORD_ITEM | 1 | | 0 |00:00:11.78 | 1046K |
| 2 | TABLE ACCESS FULL | STG_CALL_ITEM | 1 | 102K| 102K|00:00:00.02 | 512 |
--------------------------------------------------------------------------------------------------
[세션 통계 — 리허설 한 번]
경과 시간 11.78 초
CPU used by this session 9.62 초
recursive calls 103,264
session logical reads 1,046,310
redo size 96.4 MB
[TKPROF — 트리거 안의 문장]
SELECT ORD_DT, ORD_HMS FROM ORD WHERE ORD_NO = :B1
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Execute 102416 1.92 2.10 0 0 0 0
Fetch 102416 1.41 1.55 0 307248 0 102416