INSERT ALL 문에 대한 변경 정보
·
Oracle/Performance
INSERT ALL 문은 대상 테이블에 삽입한 전체 로우 수가 *_TAB_MODIFICATIONS 뷰의 변경 정보로 저장됩니다. 테스트를 위해 아래와 같이 테이블을 생성하겠습니다. -- 1 DROP TABLE t1 PURGE; DROP TABLE t2 PURGE; CREATE TABLE t1 (c1 NUMBER); CREATE TABLE t2 (c1 NUMBER); 아래 INSERT ALL 문은 t1, t2 테이블에 각각 100 로우를 삽입합니다. 이어서 ROLLBACK 문을 수행하겠습니다. -- 2 INSERT ALL INTO t1 INTO t2 SELECT ROWNUM AS c1 FROM XMLTABLE ('1 to 100'); 200 행이 생성되었습니다. ROLLBACK; *_TAB_MODIFICA..
MERGE 문의 개별 Insert, Update, Delete 로우 수
·
Oracle/SQL
*_TAB_MODIFICATIONS 뷰의 변경 정보로 MERGE 문의 개별 Insert, Update, Delete 로우 수를 계산할 수 있습니다. 다만 지난 글의 세션 통계와 달리 변경 정보는 시스템 수준에서 저장되므로 이 방법은 ETL처럼 단독으로 수행되는 MERGE 문에만 사용할 수 있습니다. 테스트를 위해 아래와 같이 테이블을 생성하겠습니다. -- 1 DROP TABLE t1 PURGE; DROP TABLE t2 PURGE; CREATE TABLE t1 (c1, c2) AS SELECT ROWNUM, 1 FROM XMLTABLE ('1 to 200'); CREATE TABLE t2 (c1, c2) AS SELECT ROWNUM, CEIL (ROWNUM / 100) FROM XMLTABLE ('1 ..
ORA_HASH 함수
·
Oracle/SQL
19c까지 ORA_HASH 함수는 CLOB 값에 대해 무작위 해시 값을 반환합니다. 아래는 SQL Language Reference의 ORA_HASH 함수에 대한 내용입니다. 원칙적으로 ORA_HASH 함수는 LOB 타입을 사용할 수 없습니다. The expr argument determines the data for which you want Oracle Database to compute a hash value. There are no restrictions on the length of data represented by expr, which commonly resolves to a column name. The expr cannot be a LONG or LOB type. It cannot be ..
CLOB 값을 바이트 단위로 자르기
·
Oracle/SQL
Oracle Database는 CLOB 값을 바이트 단위로 자르는 기능을 제공하지 않습니다. CLOB 값을 바이트 단위로 자르려면 조금 복잡한 표현식을 사용해야 합니다. 테스트를 위해 아래와 같이 테이블을 생성하겠습니다.-- 1DROP TABLE t1 PURGE;CREATE TABLE T1 (c1 CLOB);INSERT INTO t1 VALUES ('가나다라마바사아자차카타파하');COMMIT; SUBSTRB 함수는 CLOB 타입을 지원하지 않습니다. SUBSTR 함수와 DBMS_LOB.SUBSTR 함수는 글자 단위로 CLOB 값을 자르며, SUBSTR 함수는 CLOB 타입, DBMS_LOB.SUBSTR 함수는 VARCHAR2 타입을 반환합니다.-- 2-1SELECT SUBSTRB (c1, 1, 10) A..
MERGE 문의 개별 Insert, Update 로우 수
·
Oracle/SQL
Oracle Database는 MERGE 문의 개별 Insert, Update 로우 수를 제공하지 않습니다. 패키지 변수로 MERGE 문의 개별 Insert, Update 로우 수를 계산할 수 있지만 성능 저하가 발생할 수 있습니다. 아래 세션 통계를 사용하면 성능 저하없이 MERGE 문의 개별 Insert, Update 로우 수를 계산할 수 있습니다. 참고로 MERGE 문의 Update과 Delete는 Row 단위, Insert는 Array 단위로 처리됩니다. 통계 내용 HSC Heap Segment Block Changes 힙 세그먼트의 블록을 변경하기 위해 액세스한 로우 수 (Array 처리는 1 증가) Heap Segment Array Inserts 힙 세그먼트에 대한 Array Insert 횟수..
Precheckable Constraints using JSON SCHEMA
·
Oracle/Administration
Oracle 23c에 Precheckable Constraints using JSON SCHEMA 기능(이후 Precheck 제약 조건)이 추가되었습니다. Precheck 제약 조건의 JSON 값을 사용하면 애플리케이션에서 값을 사전 검증할 수 있습니다.Supported check constraints can be checked outside the database. For this, you mark the check constraint as PRECHECK. For example, you can create a JSON Schema document from a table or column with precheckable check constraint. This means that data could b..
INSERT 문의 수행 방식에 따른 Redo와 Undo의 생성량
·
Oracle/Performance
INSERT 문은 수행 방식에 따라 Redo와 Undo의 생성량이 달라질 수 있습니다. 테스트를 위해 아래와 같이 테이블을 생성하겠습니다.-- 1DROP TABLE t1 PURGE;DROP TABLE t2 PURGE;DROP TABLE t3 PURGE;CREATE TABLE t1 (c1 NUMBER, c2 VARCHAR2(100));CREATE TABLE t2 (c1 NUMBER, c2 VARCHAR2(100));CREATE TABLE t3 (c1 NUMBER, c2 VARCHAR2(100)); 아래와 같이 세 가지 방식으로 INSERT 문을 수행하겠습니다. 2-1번을 Single-row Insert, 2-2번을 Multi-row Insert, 3-3번을 Bulk Insert 방식이라고 부르겠습니다.--..
executeBatch 메소드로 수행한 DML 문의 수행 횟수
·
Oracle/Performance
FORALL 문으로 수행한 DML 문의 수행 횟수처럼 executeBatch 메소드로 수행한 DML 문의 수행 횟수도 executeBatch 메소드의 수행 횟수로 기록됩니다. 테스트를 위해 아래와 같이 테이블을 생성하겠습니다. -- 1 DROP TABLE t1 PURGE; CREATE TABLE t1 (c1 NUMBER); 아래 내용으로 BatchInsertTest.java 파일을 생성하겠습니다. import java.sql.*; public class BatchInsertTest { public static void main(String[] args) { String url = "jdbc:oracle:thin:@//192.168.0.10:1519/ORA19C"; String user = "tuna"; ..
Hash-based Distinct Aggregation
·
Oracle/Performance
Oracle 21c에 Hash-based Distinct Aggregation 기능이 추가되었습니다. 이 기능은 COUNT (DISTINCT) 표현식을 2번 이상 사용한 쿼리에 대해 해시 방식의 집계를 사용으로써 성능을 개선합니다. 테스트를 위해 아래와 같이 테이블을 생성하겠습니다. -- 1 DROP TABLE t1 PURGE; CREATE TABLE t1 (c1, c2) AS SELECT CEIL (ROWNUM / 1000), CEIL (ROWNUM / 1000) FROM XMLTABLE ('1 to 10000000'); 아래는 19.3 버전에서 COUNT (DISTINCT) 표현식을 2번 사용한 쿼리의 실행 계획입니다. 수행에 4.85초가 소요되고, 실행 계획 2번에 SORT GROUP BY 오퍼레이..
DDL auto commit 비활성화
·
Oracle/Administration
Oracle 23c에 DDL 문이 수행하는 auto commit을 비활성화하는 기능이 추가되었습니다. 이 기능은 _kql_disable_auto_commit 파라미터와 관련이 있습니다. 이 파라미터를 TRUE로 설정하면 DDL 문 수행 전후에 자동으로 수행되는 커밋이 비활성화됩니다.-- 1NAME VALUE DEFAULT_VALUE DESCRIPTION------------------------ ----- ------------- --------------------------------------_kql_disable_auto_commit FALSE FALSE Disable DDL auto commit in the session 테스트를 위해 아래와 같..
Hash-based Set Operation
·
Oracle/Performance
개요Oracle 21c에 Hash-based Set Operation 기능이 추가되었습니다. 이 기능은 UNION, INTERSECT, MINUS 연산을 해시 방식으로 수행함으로써 성능을 개선합니다. 테스트를 위해 아래와 같이 테이블을 생성하겠습니다.-- 1DROP TABLE t1 PURGE;DROP TABLE t2 PURGE;CREATE TABLE t1 (c1, c2) AS SELECT ROWNUM, LPAD ('X', 100, 'X') FROM XMLTABLE ('1 to 10000');CREATE TABLE t2 (c1, c2) AS SELECT ROWNUM + 5000, LPAD ('X', 100, 'X') FROM XMLTABLE ('1 to 10000'); UNION 연산자아래는 19.3 버전..
Hash Rollup
·
Oracle/Performance
Oracle 21c에 Hash Rollup 기능이 추가되었습니다. 이 기능은 ROLLUP에 대해 해시 방식의 집계를 사용으로써 성능을 개선합니다. 테스트를 위해 아래와 같이 테이블을 생성하겠습니다.-- 1DROP TABLE t1 PURGE;CREATE TABLE t1 (c1, c2) AS SELECT CEIL (ROWNUM / 10000), LPAD ('X', 100, 'X') FROM XMLTABLE ('1 to 10000000'); 아래는 19.3 버전에서 ROLLUP을 사용한 쿼리의 실행 계획입니다. 수행에 2.51초가 소요되고, 실행 계획 2번에 SORT GROUP BY ROLLUP 오퍼레이션이 표시됩니다.-- 2: 19.3SELECT c1, COUNT (*) FROM t1 GROUP BY ROL..