문서유형ㅣ기술정보
분야ㅣ튜닝
적용제품버전ㅣ7FS04PS
문서번호ㅣTTUTI026
개요
Table Fullscan을 하는 경우 데이터 양에 상관없이 HWM(High Water Mark) 지점까지 모든 블럭을 Fullscan 을 합니다. 이런 작동방식으로 인해 Delete가 많은 테이블 경우, 빈 블럭이 많음에도 불구하고 Fullscan을 할때 모든 블록을 scan해야 하는 비효율이 발생합니다.
따라서, Delete 작업이 많이 발생하는 테이블일 경우 주기적으로 ReOrg를 하여 Fullscan을 통한 비효율을 방지해야합니다.
방법
시나리오
Case 1. 데이터 삭제로 인해 HWM이 높은 경우
데이터 입력
[tibero@kimmi ~]$ tbsql sys/tibero tbSQL 7 TmaxTibero Corporation Copyright (c) 2020-. All rights reserved. Connected to Tibero. SQL> DROP TABLE FULL_SCAN_TEST; TBR-7071: Schema object 'SYS.FULL_SCAN_TEST' was not found or is invalid. SQL> CREATE TABLE FULL_SCAN_TEST(A NUMBER, B VARCHAR(15), C DATE); Table 'FULL_SCAN_TEST' created. SQL> INSERT INTO FULL_SCAN_TEST SELECT LEVEL, 'DELETE DATA', SYSDATE FROM DUAL CONNECT BY LEVEL <= 1000000; -- 삭제할 대량의 데이터 적재 1000000 rows inserted. SQL> INSERT INTO FULL_SCAN_TEST SELECT LEVEL, 'HWM DATA', SYSDATE FROM DUAL CONNECT BY LEVEL <= 100; -- 삭제후 block 수를 확인하기 위한 데이터 100 rows inserted. COMMIT; Commit completed.
데이터 조회
SQL> SET ROWS OFF SQL> SET AUTOT ON EXP PLANS STAT SQL> SELECT /*+ FULL(A) */ * FROM FULL_SCAN_TEST A; 1000100 rows selected. SQL ID: 9qf0vdc0u1zzy Child number: 2430 Plan hash value: 3263165585 Execution Plan -------------------------------------------------------------------------------------------------------------------------------------------------------------- 1 TABLE ACCESS (FULL): FULL_SCAN_TEST (Cost:1930, %%CPU:0, Rows:783672) Execution Stat -------------------------------------------------------------------------------------------------------------------------------------------------------------- 1 TABLE ACCESS (FULL): FULL_SCAN_TEST (Time:0. ms, Rows:0, Starts:0) NAME VALUE ------------------------------ ---------- db block gets 189 consistent gets 4345 physical reads 0 redo size 0 sorts (disk) 0 sorts (memory) 0 rows processed 1000100
참고
consistent gets : 1000100의 건수에 대해 4345개의 consistene block을 읽습니다.
데이터 삭제
SQL> DELETE FROM FULL_SCAN_TEST WHERE B='DELETE DATA'; 1000000 rows deleted. SQL> commit; Commit completed.
데이터 조회
SQL> SELECT /*+ FULL(A) */ * FROM FULL_SCAN_TEST A; 100 rows selected. SQL ID: 9qf0vdc0u1zzy Child number: 2430 Plan hash value: 3263165585 Execution Plan -------------------------------------------------------------------------------------------------------------------------------------------------------------- 1 TABLE ACCESS (FULL): FULL_SCAN_TEST (Cost:1930, %%CPU:0, Rows:783672) Execution Stat -------------------------------------------------------------------------------------------------------------------------------------------------------------- 1 TABLE ACCESS (FULL): FULL_SCAN_TEST (Time:0. ms, Rows:0, Starts:0) NAME VALUE ------------------------------ ---------- db block gets 46 consistent gets 4344 physical reads 0 redo size 0 sorts (disk) 0 sorts (memory) 0 rows processed 100
참고
consistent gets : 100의 건수에 대해 기존과 동일하게 4344개의 consistene block을 읽습니다.
Case 2. 처음 생성된 테이블이라 HWM이 낮은 경우
데이터 입력
[tibero@kimmi ~]$ tbsql sys/tibero tbSQL 7 TmaxTibero Corporation Copyright (c) 2020-. All rights reserved. Connected to Tibero. SQL> DROP TABLE FULL_SCAN_TEST2; TBR-7071: Schema object 'SYS.FULL_SCAN_TEST2' was not found or is invalid. SQL> CREATE TABLE FULL_SCAN_TEST2(A NUMBER, B VARCHAR(15), C DATE); Table 'FULL_SCAN_TEST2' created. SQL> INSERT INTO FULL_SCAN_TEST2 SELECT LEVEL, 'HWM DATA', SYSDATE FROM DUAL CONNECT BY LEVEL <= 100; -- 1번시나리오의 100건 데이터와 비교하기위해 동일 데이터 입력 100 rows inserted. SQL> COMMIT; Commit completed.
데이터 조회
SQL> SET ROWS OFF SQL> SET AUTOT ON EXP PLANS STAT SQL> SELECT /*+ FULL(A) */ * FROM FULL_SCAN_TEST2 A; 100 rows selected. SQL ID: 4ag60gv78a125 Child number: 2445 Plan hash value: 3262512719 Execution Plan -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 1 TABLE ACCESS (FULL): FULL_SCAN_TEST2 (Cost:12, %%CPU:0, Rows:2759) Execution Stat -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 1 TABLE ACCESS (FULL): FULL_SCAN_TEST2 (Time:0. ms, Rows:0, Starts:0) NAME VALUE ------------------------------ ---------- db block gets 6 consistent gets 15 physical reads 0 redo size 76 sorts (disk) 0 sorts (memory) 0 rows processed 100
참고
consistent gets : HWM가 낮기 때문에 100의 건수에 대해 15 consistent block을 읽습니다.