LIST 글로벌 파티션 인덱스
·
Oracle/Administration
Oracle Database는 LIST 글로벌 파티션 인덱스를 지원하지 않습니다. 테스트를 위해 아래와 같이 테이블을 생성하겠습니다. -- 1 DROP TABLE t1 PURGE; CREATE TABLE t1 (c1 NUMBER, c2 NUMBER, c3 NUMBER); 아래와 같이 RANGE, HASH 글로벌 파티션 인덱스는 생성되지만, LIST 글로벌 파티션 인덱스가 생성되지 않는 것을 확인할 수 있습니다. -- 2-1 CREATE INDEX t1_x1 ON t1 (c1) GLOBAL PARTITION BY RANGE (c1) ( PARTITION p1 VALUES LESS THAN (1) , PARTITION p2 VALUES LESS THAN (MAXVALUE) ); 인덱스가 생성되었습니다. --..
Oracle Pages
·
Resources
Oracle Exadata Exadata Database Machine Documentation Oracle Exadata Database Machine Blog Oracle Exadata Database Machine Exadata - Database Platform Oracle x86 Servers Oracle Storage Drives Documentation Library Oracle Database Oracle Database Documentation Database Error Messages Oracle Database Discussions - Oracle Forums Ask TOM Ask TOM Office Hours Oracle Interactive Technical Architecture..
Oracle Articles
·
Resources
Oracle Blog [2021-09] How to split comma separated value strings into rows in Oracle Database [2021-02] JSON DataType Support in Oracle 21c [2020-12] Efficient Statistics Maintenance for Partitioned Tables Using Incremental Statistics – Part 1 [2020-05] Space Management and Direct Path Load [2020-01] Optimizer Transformations: Star Transformation [2017-03] Efficient Statistics Maintenance for Pa..
NL 조인과 INLIST ITERATOR 오퍼레이션
·
Oracle/Performance
NL 조인의 이너에 INLIST ITERATOR 오퍼레이션을 사용하면 과도한 블록 I/O가 발생할 수 있습니다. 테스트를 위해 아래와 같이 t1, t2 테이블과 t2_x1 인덱스를 생성하겠습니다. -- 1 DROP TABLE t1 PURGE; DROP TABLE t2 PURGE; CREATE TABLE t1(c1) AS SELECT ROWNUM FROM XMLTABLE ('1 to 100'); CREATE TABLE t2 (c1, c2, c3, c4) AS SELECT CEIL (ROWNUM / 100) , CEIL (NVL (NULLIF (MOD (ROWNUM, 100), 0), 100) / 10) , NVL (NULLIF (MOD (ROWNUM, 10), 0), 10) , LPAD ('X', 100,..
그룹핑에 대한 Column Projection
·
Oracle/Performance
병합되지 않은 인라인 뷰에서 수행한 그룹핑은 메인 쿼리의 칼럼에 의한 Column Projection이 동작하지 않습니다. 메인 쿼리에서 사용하지 않은 불필요한 표현식을 인라인 뷰에 사용하면 불필요한 Work Area 사용으로 인해 성능이 저하될 수 있습니다. 테스트를 위해 아래와 같이 테이블을 생성하겠습니다. -- 1 DROP TABLE t1 PURGE; DROP TABLE t2 PURGE; CREATE TABLE t1 AS SELECT ROWNUM AS c1, ROWNUM AS c2 FROM XMLTABLE ('1 to 10000'); CREATE TABLE t2 AS SELECT * FROM t1; 아래 쿼리는 병합되지 않은 인라인 뷰에서 그룹핑을 수행하고 메인 쿼리에서 c1 칼럼만 조회합니다. C..
그룹핑 알고리즘에 따른 Buffer Pinning 차이
·
Oracle/Performance
그룹핑 결과로 NL 조인을 수행하는 경우 그룹핑 알고리즘에 따라 Buffer Pinning에 차이가 발생할 수 있습니다. 참고로 그룹핑 알고리즘은 _gby_hash_aggregation_enabled 파라미터와 관련이 있습니다. NAME VALUE DEFAULT_VALUE DESCRIPTION ----------------------------- ----- ------------- ------------------------------------------------- _gby_hash_aggregation_enabled TRUE TRUE enable group-by and aggregation using hash scheme 테스트를 위해 아래와 같이 테이블과 인덱스를 생성하겠습니다. t2_x1 인덱스..
파티션 테이블에 대한 병렬 그룹핑의 동작 방식
·
Oracle/Performance
파티션 테이블에 대한 병렬 그룹핑은 세 가지 방식으로 동작할 수 있습니다. 테스트를 위해 아래와 같이 테이블을 생성하겠습니다. -- 1 DROP TABLE t1 PURGE; CREATE TABLE t1 (c1 NUMBER, c2 NUMBER) PARTITION BY RANGE (c1) ( PARTITION p1 VALUES LESS THAN (2) , PARTITION p2 VALUES LESS THAN (3) , PARTITION p3 VALUES LESS THAN (4) , PARTITION p4 VALUES LESS THAN (5) , PARTITION p5 VALUES LESS THAN (6) , PARTITION p6 VALUES LESS THAN (7) , PARTITION p7 VALUES ..
Attribute Clustering
·
Oracle/Administration
Oracle 12c에 Attribute Clustering 기능이 추가되었습니다. 이 기능을 사용하면 Direct Path Loads 또는 테이블 재구성 시 데이터를 정렬하여 CF를 높일 수 있습니다. CLUSTERING [clustering_join] BY [ LINEAR | INTERLEAVED ] ORDER clustering_columns [{ YES | NO } ON LOAD] [{ YES | NO } ON DATA MOVEMENT] [zonemap_clause] 테스트를 위해 아래와 같이 t1, t2, t3 테이블을 생성하겠습니다. t2 테이블은 기본 설정으로 Attribute Clustering를 생성하고, t3 테이블은 ON LOAD 속성을 NO로 설정합니니다. -- 1-1 DROP TAB..
중복 조인을 통한 해시 조인 성능 개선
·
Oracle/Performance
해시 조인의 Temp 사용으로 인해 성능이 저하되는 경우 해시 조인 결과가 매우 작다면 중복 조인을 통해 Work Area 사용량을 최소화하여 성능을 개선할 수 있습니다. 테스트를 위해 아래와 같이 테이블을 생성하겠습니다. -- 1 DROP TABLE t1 PURGE; DROP TABLE t2 PURGE; CREATE TABLE t1 AS SELECT ROWNUM AS c1, LPAD ('X', 1000, 'X') AS c2 FROM XMLTABLE ('1 to 100000'); CREATE TABLE t2 AS SELECT c1 + 99999 AS c1, c2 FROM t1; 아래 쿼리는 101 MB의 Temp를 사용하여 수행에 0.63초가 소요됩니다. -- 2 SELECT * FROM t1 a , t..
변수 사용
·
SQL*Plus
개요 SQL*Plus에서 쿼리에 치환 변수를 사용하면 다수의 커서가 생성될 수 있습니다. 테스트를 위해 아래와 같이 테이블을 생성하겠습니다. -- 1 DROP TABLE t1 PURGE; CREATE TABLE t1 (c1 NUMBER); 치환 변수 아래 내용으로 t1.sql 파일을 생성하겠습니다. 쿼리에 &1 치환 변수(substitution variable)를 사용합니다. &1 치환 변수는 SQL 파일에 사용한 첫 번째 매개변수로 치환됩니다. -- 2 SELECT /* TEST1 */ * FROM t1 WHERE c1 = &1; 아래와 같이 t1.sql 파일을 실행하겠습니다. -- 3 @t1 1 @t1 2 아래는 V$SQL 뷰를 조회한 결과입니다. 치환 변수가 매개변수로 치환되어 2개의 커서가 생성된..
MULTI-TABLE INSERT 문의 동작 방식
·
Oracle/Performance
MULTI-TABLE INSERT 문은 APPEND 힌트와 PARALLEL 힌트의 사용에 따라 동작 방식이 달라질 수 있습니다. 테스트를 위해 아래와 같이 테이블을 생성하고, ALTER SESSION 문으로 병렬 DML을 활성화하겠습니다. -- 1-1 DROP TABLE t1 PURGE; DROP TABLE t2 PURGE; DROP TABLE t3 PURGE; CREATE TABLE t1 AS SELECT ROWNUM AS c1 FROM XMLTABLE ('1 to 10000'); CREATE TABLE t2 (c1 NUMBER); CREATE TABLE t3 (c1 NUMBER); -- 1-2 ALTER SESSION ENABLE PARALLEL DML; 아래 INSERT 문은 t1 테이블을 읽어 t..
사용자 정의 함수에 대한 실행 계획
·
Oracle/Performance
사용자 정의 함수는 사용 위치에 따라 실행 계획에 Rowsource 실행 통계가 표시될 수도 있고 표시되지 않을 수도 있습니다. 테스트를 위해 아래와 같이 t1 테이블과 f1 함수를 생성하겠습니다. -- 1-1 DROP TABLE t1 PURGE; CREATE TABLE t1 (c1) AS SELECT ROWNUM FROM XMLTABLE ('1 to 10000'); -- 1-2 CREATE OR REPLACE FUNCTION f1 (i_v1 IN NUMBER) RETURN NUMBER IS v1 NUMBER; BEGIN SELECT COUNT (*) INTO v1 FROM t1; RETURN v1; END; / 아래 2-2번, 2-4번 쿼리는 실행 계획에 함수의 Rowsource 실행 통계가 표시되고,..