DESCENDING 인덱스
·
Oracle/Administration
DESCENDING 인덱스는 일부 인덱스 칼럼이 내림차순으로 정렬된 인덱스로 오름차순과 내림차순이 혼재된 정렬을 처리하기 위한 용도로 사용됩니다. 테스트를 위해 아래와 같이 테이블과 인덱스를 생성하겠습니다. t1_x1 인덱스는 c2 칼럼이 내림차순으로 정렬된 DESCENDING 인덱스입니다. -- 1 DROP TABLE t1 PURGE; CREATE TABLE t1 AS SELECT CEIL (ROWNUM / 2) AS c1, ROWNUM AS c2 FROM XMLTABLE ('1 to 10'); CREATE INDEX t1_x1 ON t1 (c1, c2 DESC); DESCENDING 인덱스는 FBI로 생성됩니다. SYS_NC00003$ 칼럼은 t1 테이블에 암시적으로 생성된 Virtual 칼럼입니다...
Right Growing Index 경합 해소
·
Oracle/Performance
Right Growing Index(이후 RGI)는 enq: TX - index contention 대기가 발생할 수 있으며, RAC인 경우 gc buffer busy 대기가 함께 발생할 수 있습니다. 아래 t1_x1 인덱스는 인덱스 키 칼럼이 TIMESTAMP 값으로 전형적인 RGI입니다. -- 1 DROP TABLE t1 PURGE; CREATE TABLE t1 ( ts TIMESTAMP , val VARCHAR2(4000) ) PARTITION BY RANGE (ts) ( PARTITION p205001 VALUES LESS THAN (TIMESTAMP '2050-02-01 00:00:00') , PARTITION p205002 VALUES LESS THAN (TIMESTAMP '2050-03-01..
칼럼 조회에 따른 MERGE 문의 성능 차이
·
Oracle/Performance
예전에 조건 기술에 따른 MERGE 문의 성능 차이라는 글을 썼습니다. MERGE 문은 조회한 칼럼에 따라서도 성능의 차이가 발생할 수 있습니다. 구체적으로는 MERGE 문이 해시 조인되는 경우 INTO 절과 USING 절에 필요한 칼럼만 조회함으로써 성능을 개선할 수 있습니다. 테스트를 위해 아래와 같이 테이블을 생성하겠습니다.-- 1DROP TABLE t1 PURGE;DROP TABLE t2 PURGE;CREATE TABLE t1 AS SELECT ROWNUM AS c1, 1 AS c2, LPAD ('X', 4000, 'X') AS c3 FROM XMLTABLE ('1 to 10000');CREATE TABLE t2 AS SELECT ROWNUM AS c1, 1 AS c2, LPAD ('X', 400..
rowsource 통계 수집 부하
·
Oracle/Performance
rowsource 통계를 수집하면 추가적인 부하가 발생할 수 있습니다. 테스트를 위해 아래와 같이 테이블을 생성하겠습니다. -- 1 DROP TABLE t1 PURGE; CREATE TABLE t1 AS SELECT ROWNUM AS c1, 1 AS c2 FROM XMLTABLE ('1 to 10000000'); CREATE INDEX t1_x1 ON t1 (c1); 아래와 같이 쿼리를 수행하겠습니다. rowsource 통계를 수집하지 않은 2-1번 쿼리는 6.15초, GATHER_PLAN_STATISTICS 힌트로 rowsource 통계를 수집한 2-2번 쿼리는 6.69초, STATISTICS_LEVEL 파라미터로 rowsource 통계를 수집한 2-3번 쿼리는 8.49초가 소요됩니다. -- 2-1 S..
Oracle Exadata Data Sheet
·
Resources
Oracle Exadata X10M Oracle Exadata Database Machine X10M Data Sheet Oracle Exadata Storage Expansion X10M Data Sheet Oracle Exadata X9M Oracle Exadata Database Machine X9M-2 Data Sheet Oracle Exadata Database Machine X9M-8 Data Sheet Oracle Exadata Storage Expansion X9M-2 Data Sheet Oracle Exadata X8M Oracle Exadata Database Machine X8M-2 Data Sheet Oracle Exadata Database Machine X8M-8 Data She..
Oracle White Paper
·
Resources
[2024-03] Exadata Performance and AWR (public)[2023-01] Oracle SecureFiles (public)[2022-04] Oracle Hybrid Columnar Compression (public)[2021-05] Oracle Database 19c Oracle Autonomous Health Framework[2021-03] Oracle Real Application Clusters (RAC) Cache Fusion Performance Optimizations on Exadata (public)[2021-01] Oracle Advanced Compression (public)[2020-08] Continuous Availability - Applicati..
무한소수의 집계 순서에 따른 결과 값
·
Oracle/SQL
무한소수는 집계 순서에 따라 결과 값이 달라질 수 있습니다. 이로 인해 데이터 마이그레이션 이후 데이터 조회 순서가 달라져 쿼리의 결과 값이 달라질 수 있습니다. 테스트를 위해 아래의 테이블을 생성하겠습니다.-- 1DROP TABLE t1 PURGE;CREATE TABLE t1 AS SELECT ROWNUM * 100 AS c1 FROM XMLTABLE ('1 to 12'); 아래 쿼리의 c2 열은 c1 칼럼을 12로 나눠 일부 값이 무한소수로 반환됩니다.-- 2SELECT c1, c1 / 12 AS c2 FROM t1; C1 C2---- ---------- 100 8.33333333 -- ! 200 16.6666667 -- ! 300 25 400 33.3333333 -- ..
ORA-14196 에러
·
Oracle/Administration
UNIQUE 인덱스의 일부 선두 칼럼으로 PK 제약 조건을 생성하면 ORA-14196 에러가 발생합니다. 테스트를 위해 아래와 같이 테이블을 생성하겠습니다. c1 칼럼을 NOT NULL로 정의했습니다.-- 1DROP TABLE t1 PURGE;CREATE TABLE t1 (c1 NOT NULL, c2, c3) AS SELECT ROWNUM, ROWNUM, LPAD ('X', 100, 'X') FROM XMLTABLE ('1 to 10000000'); 아래와 같이 NOT NULL로 정의된 UNIQUE 인덱스의 칼럼으로 PK 제약 조건을 생성하면 PK 제약 조건 생성에 0.01초가 소요됩니다.-- 2CREATE UNIQUE INDEX t1_pk ON t1 (c1);ALTER TABLE t1 ADD CONST..
FOR UPDATE SKIP LOCKED 절 사용 방법
·
Oracle/SQL
FOR UPDATE SKIP LOCKED 절은 주로 다중 소비자 큐(multi-consumer queue)을 구현하기 위해 사용됩니다. 테스트를 위해 아래와 같이 테이블을 생성하겠습니다. 선착순으로 쿠폰을 발생하는 업무를 가정하여 c1 칼럼은 쿠폰번호, c2 칼럼은 발생여부 값을 저장합니다. -- 1 DROP TABLE t1 PURGE; CREATE TABLE t1 AS SELECT ROWNUM AS c1, 'N' AS c2 FROM XMLTABLE ('1 to 10'); CREATE INDEX t1_x1 ON t1 (c2, c1); 1번 세션에서 아래 쿼리를 실행하면 c1이 1인 행에 락이 설정됩니다. -- 2: S1 SELECT * FROM t1 WHERE c1 >= 1 AND c2 = 'N' AND..
가상 칼럼을 사용한 리스트 파티션
·
Oracle/Administration
MOD 함수나 ORA_HASH 함수를 사용한 가상 칼럼을 파티션 키로 사용하면 해시 파티션과 유사한 리스트 파티션을 생성할 수 있습니다. 테스트를 위해 아래와 같이 테이블을 생성하겠습니다. ORA_HASH (c1, 3) 표현식으로 c2 가상 칼럼을 생성하고, c2 칼럼을 파티션 키로 가진 4개의 리스트 파티션을 생성합니다. 데이터 타입이 문자 타입이라면 MOD 함수 대신 ORA_HASH 함수를 사용할 수 있습니다. -- 1 DROP TABLE t1 PURGE; CREATE TABLE t1 ( c1 NUMBER , c2 NUMBER AS (MOD (c1, 4)) --, c2 NUMBER AS (ORA_HASH (c1, 3)) ) PARTITION BY LIST (c2) ( PARTITION p0 VALUE..
파티션 테이블 TRUNCATE 성능 개선
·
Oracle/Performance
다수의 파티션으로 구성된 테이블을 TRUNCATE하면 시간이 오래 걸릴 수 있습니다. 참고로 TRUNCATE 문은 아래의 세 가지 방식으로 수행할 수 있습니다. 기본값은 DROP STORAGE입니다. 기본값 대신 DROP ALL STORAGE 방식을 사용하면 TRUNCATE 문의 수행 시간을 단축시킬 수 있습니다. DROP STORAGE: MINEXTENTS 파라미터에 의해 할당된 익스텐트를 제외한 모든 익스텐트를 해제 DROP ALL STORAGE: 모든 익스텐트를 해제 REUSE STORAGE: 익스텐트를 해제하지 않음 TRUNCATE TABLE [schema.]table [{ DROP [ALL] | REUSE } STORAGE] [CASCADE]; 테스트를 위해 _partition_large_ext..