Block Range Granules

2023. 8. 31.·Oracle/Performance

블록 그래뉼(Block Range Granules)의 개수와 크기는 동적으로 결정되지만 아래 파라미터로 그래뉼의 생성 방식을 조정할 수 있습니다. 파라미터에 따르면 블록 그래뉼의 기본 크기는 1GB이며, PX 서버 별로 최소 13개, 최대 100개의 그래뉼이 생성될 수 있습니다.

NAME                        DISPLAY_VALUE DEFAULT_VALUE DESCRIPTION
--------------------------- ------------- ------------- ------------------------------------------------------------
_px_granule_size            1000000       1000000       default size of a rowid range granule (in KB)
_px_min_granules_per_slave  13            13            minimum number of rowid range granules to generate per slave
_px_max_granules_per_slave  100           100           maximum number of rowid range granules to generate per slave

 

테스트를 위해 아래와 같이 테이블을 생성하겠습니다.

-- 1
DROP TABLE t1 PURGE;
CREATE TABLE t1 (c1, c2) AS SELECT ROWNUM, LPAD ('X', 100, 'X') FROM XMLTABLE ('1 to 10000000');

 

아래 쿼리는 2 DOP로 t1 테이블을 조회합니다. PX 서버별로 13개의 그래뉼이 생성되어 실행 계획 6번의 Execs 값이 27(=(13*2)+1)로 표시됩니다. 

-- 2
SELECT /*+ PARALLEL(2) */ COUNT (*) FROM t1;

===================================================================================================
| Id |        Operation         |   Name   |   Time    | Start  | Execs |   Rows   | Read | Read  |
|    |                          |          | Active(s) | Active |       | (Actual) | Reqs | Bytes |
===================================================================================================
|  0 | SELECT STATEMENT         |          |         1 |     +2 |     1 |        1 |      |       |
|  1 |   SORT AGGREGATE         |          |         1 |     +2 |     1 |        1 |      |       |
|  2 |    PX COORDINATOR        |          |         1 |     +2 |     3 |        2 |      |       |
|  3 |     PX SEND QC (RANDOM)  | :TQ10000 |         1 |     +2 |     2 |        2 |      |       |
|  4 |      SORT AGGREGATE      |          |         1 |     +2 |     2 |        2 |      |       |
|  5 |       PX BLOCK ITERATOR  |          |         1 |     +2 |     2 |      10M |      |       |
|  6 |        TABLE ACCESS FULL | T1       |         2 |     +1 |    27 |      10M | 1259 |   1GB |
===================================================================================================

 

_px_min_granules_per_slave 파라미터를 1로 설정하고 쿼리를 수행하면 실행 계획 6번의 Execs 값이 3(=(1*2)+1)으로 표시됩니다. 그래뉼 개수가 줄어들면 Read Reqs도 함께 줄어드는 것을 확인할 수 있습니다.

-- 3
ALTER SESSION SET "_px_min_granules_per_slave" = 1;

SELECT /*+ PARALLEL(2) */ COUNT (*) FROM t1;

===================================================================================================
| Id |        Operation         |   Name   |   Time    | Start  | Execs |   Rows   | Read | Read  |
|    |                          |          | Active(s) | Active |       | (Actual) | Reqs | Bytes |
===================================================================================================
|  0 | SELECT STATEMENT         |          |         1 |     +2 |     1 |        1 |      |       |
|  1 |   SORT AGGREGATE         |          |         1 |     +2 |     1 |        1 |      |       |
|  2 |    PX COORDINATOR        |          |         1 |     +2 |     3 |        2 |      |       |
|  3 |     PX SEND QC (RANDOM)  | :TQ10000 |         1 |     +2 |     2 |        2 |      |       |
|  4 |      SORT AGGREGATE      |          |         1 |     +2 |     2 |        2 |      |       |
|  5 |       PX BLOCK ITERATOR  |          |         1 |     +2 |     2 |      10M |      |       |
|  6 |        TABLE ACCESS FULL | T1       |         2 |     +1 |     3 |      10M | 1235 |   1GB |
===================================================================================================

 

_px_min_granules_per_slave 파라미터를 200으로 설정하고 쿼리를 수행하면 실행 계획 6번의 Execs 값이 407(=(200*2)+7)으로 표시됩니다. 생성되는 그래뉼의 개수에 따라 추가로 생성되는 그래뉼의 개수가 늘어나는 것으로 보입니다. 그래뉼 개수가 늘어나면 Read Reqs도 함께 늘어나므로 세그먼트 크기에 비해 그래뉼이 과도하게 생성되면 읽기 요청도 함께 늘어나 I/O 성능이 저하될 수 있습니다.

-- 4
ALTER SESSION SET "_px_min_granules_per_slave" = 200;

SELECT /*+ PARALLEL(2) */ COUNT (*) FROM t1;

===================================================================================================
| Id |        Operation         |   Name   |   Time    | Start  | Execs |   Rows   | Read | Read  |
|    |                          |          | Active(s) | Active |       | (Actual) | Reqs | Bytes |
===================================================================================================
|  0 | SELECT STATEMENT         |          |         1 |     +3 |     1 |        1 |      |       |
|  1 |   SORT AGGREGATE         |          |         1 |     +3 |     1 |        1 |      |       |
|  2 |    PX COORDINATOR        |          |         1 |     +3 |     3 |        2 |      |       |
|  3 |     PX SEND QC (RANDOM)  | :TQ10000 |         1 |     +3 |     2 |        2 |      |       |
|  4 |      SORT AGGREGATE      |          |         2 |     +2 |     2 |        2 |      |       |
|  5 |       PX BLOCK ITERATOR  |          |         2 |     +2 |     2 |      10M |      |       |
|  6 |        TABLE ACCESS FULL | T1       |         3 |     +1 |   407 |      10M | 1635 |   1GB |
===================================================================================================

 

_px_min_granules_per_slave 파라미터를 기본값인 13으로 설정하고, _px_granule_size 파라미터를 10000(10MB)로 설정하면 136개의 그래뉼이 생성됩니다.

-- 5
ALTER SESSION SET "_px_min_granules_per_slave" = 13;
ALTER SESSION SET "_px_granule_size" = 10000;

SELECT /*+ PARALLEL(2) */ COUNT (*) FROM t1;

===================================================================================================
| Id |        Operation         |   Name   |   Time    | Start  | Execs |   Rows   | Read | Read  |
|    |                          |          | Active(s) | Active |       | (Actual) | Reqs | Bytes |
===================================================================================================
|  0 | SELECT STATEMENT         |          |         1 |     +2 |     1 |        1 |      |       |
|  1 |   SORT AGGREGATE         |          |         1 |     +2 |     1 |        1 |      |       |
|  2 |    PX COORDINATOR        |          |         1 |     +2 |     3 |        2 |      |       |
|  3 |     PX SEND QC (RANDOM)  | :TQ10000 |         1 |     +2 |     2 |        2 |      |       |
|  4 |      SORT AGGREGATE      |          |         1 |     +2 |     2 |        2 |      |       |
|  5 |       PX BLOCK ITERATOR  |          |         1 |     +2 |     2 |      10M |      |       |
|  6 |        TABLE ACCESS FULL | T1       |         2 |     +1 |   136 |      10M | 1367 |   1GB |
===================================================================================================

 

_px_max_granules_per_slave 파라미터를 20으로 설정하면 41개(=(20*2)+1)의 그래뉼이 생성됩니다.

-- 6
ALTER SESSION SET "_px_max_granules_per_slave" = 20;

SELECT /*+ PARALLEL(2) */ COUNT (*) FROM t1;

===================================================================================================
| Id |        Operation         |   Name   |   Time    | Start  | Execs |   Rows   | Read | Read  |
|    |                          |          | Active(s) | Active |       | (Actual) | Reqs | Bytes |
===================================================================================================
|  0 | SELECT STATEMENT         |          |         1 |     +2 |     1 |        1 |      |       |
|  1 |   SORT AGGREGATE         |          |         1 |     +2 |     1 |        1 |      |       |
|  2 |    PX COORDINATOR        |          |         1 |     +2 |     3 |        2 |      |       |
|  3 |     PX SEND QC (RANDOM)  | :TQ10000 |         1 |     +2 |     2 |        2 |      |       |
|  4 |      SORT AGGREGATE      |          |         1 |     +2 |     2 |        2 |      |       |
|  5 |       PX BLOCK ITERATOR  |          |         1 |     +2 |     2 |      10M |      |       |
|  6 |        TABLE ACCESS FULL | T1       |         2 |     +1 |    41 |      10M | 1273 |   1GB |
===================================================================================================
저작자표시 비영리 변경금지 (새창열림)
'Oracle/Performance' 카테고리의 다른 글
  • UNUSABLE 인덱스 파티션에 의한 Join Factorization 쿼리 변환
  • PPWJ(Partial-Partition Wise Join) 성능 저하 개선
  • TBL$OR$IDX$PART$NUM 함수
  • 에러 메시지 생성 부하
정희락
정희락
2007년부터 Oracle Database 성능 최적화에 주력해 왔으며, 현재 한국오라클 Engineered Systems Solution Engineering 팀에서 Solution Engineer로 근무하고 있습니다. 이 블로그는 개인적인 연구 목적으로 운영되며, Oracle 사의 공식 입장을 대변하지 않습니다.
  • 정희락
    TunA
    정희락
  • 전체
    오늘
    어제
    • 분류 전체보기 (199)
      • Oracle (171)
        • SQL (33)
        • PLSQL (10)
        • Performance (74)
        • Administration (37)
        • Installation (3)
        • Utilities (1)
        • JSON (8)
        • Vector (5)
      • Exadata (15)
      • SQL*Plus (2)
      • Linux (5)
      • Resources (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 도서

    • 불친절한 SQL 프로그래밍
    • 불친절한 PL/SQL 프로그래밍
  • 링크

    • Connor McDonald
    • Frits Hoogland
    • Jonathan Lewis
    • Julian Dontcheff
    • Julian Dyke
    • Kun Sun
    • Maria Colgan
    • Martin Bach
    • Mike Dietrich
    • Tanel Poder
  • 공지사항

  • 인기 글

  • 태그

    12c
    19c
    21c
    23ai
    case study
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
정희락
Block Range Granules
상단으로

티스토리툴바