테마
본사 「판매 전표 조회」 화면(Java)은 기간을 고르면 프로시저 P_SLE_LIST를 부르고, 받은 전표를 최근 것부터 한 페이지에 50건씩 보여 준다. 화면 로그를 보면 조회의 95%가 첫 페이지만 보고 닫힌다.
프로시저는 기간의 전표를 컬렉션에 담아 OUT 인자로 돌려준다. 한 달을 고르면 1초, 1년을 고르면 첫 페이지가 뜨기까지 8초 가까이 걸린다.
CF10 판매: 500,000행 · 4,583블록(블록당 약 109행) · SLE_DT VARCHAR2(8) · 날짜순으로 쌓였다 · 2023년 249,971건IX_CF10_DT_NO (SLE_DT, SLE_NO): 이 문제에서는 있다 · 리프 2,380블록 · 통계 최신T_SLE_OBJ (SLE_NO, SLE_DT, SLE_HMS, SHP_NO)와 T_SLE_TAB(TABLE OF T_SLE_OBJ)PROCEDURE P_SLE_LIST(p_fr IN VARCHAR2, p_to IN VARCHAR2, o_list OUT T_SLE_TAB) IS
BEGIN
SELECT T_SLE_OBJ(SLE_NO, SLE_DT, SLE_HMS, SHP_NO)
BULK COLLECT INTO o_list
FROM CF10
WHERE SLE_DT BETWEEN p_fr AND p_to
ORDER BY SLE_DT DESC, SLE_NO DESC;
END;
[프로시저 안 SQL: DISPLAY_CURSOR (ALLSTATS LAST) · 2023년]
---------------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers | Used-Mem |
---------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | 249K|00:00:01.38 | 4583 | |
| 1 | SORT ORDER BY | | 1 | 250K| 249K|00:00:01.38 | 4583 | 17M (0)|
|* 2 | TABLE ACCESS FULL| CF10 | 1 | 250K| 249K|00:00:00.09 | 4583 | |
---------------------------------------------------------------------------------------------------
2 - filter(("SLE_DT">=:B2 AND "SLE_DT"<=:B1))
[화면 한 번 · 2023년]
프로시저 실행 1.9 초 (SQL 1.38 초 + 컬렉션 채우기)
OUT 컬렉션 전송과 Java 변환 5.9 초 · bytes sent via SQL*Net to client 21.4 MB
session pga memory max 96 MB
화면에 보인 행 50