데이터 이행시 MBRC 최적화로 이행 성능을 개선할 수 있다. MBRC에 따른 physical read total IO requests 성능 통계와 수행 시간을 측정해보자.
테스트를 위해 아래와 같이 테이블을 생성하자.
-- 1 DROP TABLE t1 PURGE; CREATE TABLE t1 AS SELECT LPAD ('X', 4000, 'X') AS c1 FROM XMLTABLE ('1 to 20000'); DROP TABLE t_mbrc PURGE; CREATE TABLE t_mbrc (mbrc NUMBER, requests NUMBER, elapsed NUMBER);
아래와 같은 방식으로 테스트를 수행했다. 테스트 환경은 18.3 버전, Windows, File System(SSD)이다.
-- 2 DECLARE l_statistic# NUMBER; l_dummy NUMBER; l_value NUMBER; l_time PLS_INTEGER; BEGIN EXECUTE IMMEDIATE 'TRUNCATE TABLE t_mbrc'; SELECT statistic# INTO l_statistic# FROM v$statname WHERE name = 'physical read total IO requests'; SELECT COUNT (*) INTO l_dummy FROM t1; FOR c1 IN (SELECT POWER (2, ROWNUM) AS mbrc FROM DUAL CONNECT BY LEVEL <= 12) LOOP EXECUTE IMMEDIATE 'ALTER SESSION SET "db_file_multiblock_read_count" = ' || c1.mbrc; SELECT value INTO l_value FROM v$mystat WHERE statistic# = l_statistic#; l_time := DBMS_UTILITY.GET_TIME(); SELECT COUNT (*) INTO l_dummy FROM t1; INSERT INTO t_mbrc SELECT c1.mbrc, value - l_value, DBMS_UTILITY.GET_TIME() - l_time FROM v$mystat WHERE statistic# = l_statistic#; END LOOP; COMMIT; END; /
결과는 아래와 같다. ASM이 아닌지라 기본값인 128이 최적값이다.
-- 3 SELECT * FROM t_mbrc ORDER BY 1; MBRC REQUESTS ELAPSED ---- -------- ------- 2 10006 76 4 5034 39 8 2523 37 16 1265 39 32 638 33 64 325 31 128 168 30 -- ! 256 133 30 512 110 31 1024 86 31 2048 86 30 4096 86 30 12 행이 선택되었습니다.
'Oracle > Tuning' 카테고리의 다른 글
Partition-Wise 조인 (0) | 2018.10.14 |
---|---|
IOT Secondary 인덱스 (0) | 2018.10.08 |
Partition-Wise 오퍼레이션 (0) | 2018.08.27 |
일별 배치 튜닝 사례 (0) | 2018.06.21 |
TABLE ACCESS BY INDEX ROWID BATCHED 오퍼레이션 #2 (0) | 2018.06.21 |