Oracle/Tuning2018. 9. 29. 10:32

데이터 이행시 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
Posted by 정희락_