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..
최대 칼럼 수 증가
·
Oracle/Administration
Oracle 23c부터 테이블과 뷰의 최대 칼럼 수가 1000개에서 4096개로 늘어났습니다.The maximum number of columns allowed in a database table or view has been increased to 4096. This feature allows you to build applications that can store attributes in a single table with more than the previous 1000-column limit. Some applications, such as Machine Learning and streaming IoT application workloads, may require the use of de-norm..
SQL Analysis Report
·
Oracle/Performance
Oracle 사의 Product Manager인 Nigel Bayliss가 포스팅한 New SQL Analysis Report in Oracle Database 23c Free! 글에서 Oracle 23c에 SQL Analysis Report 기능이 추가된 것을 알 수 있습니다. 테스트를 위해 아래와 같이 테이블을 생성하겠습니다.-- 1DROP TABLE t1 PURGE;CREATE TABLE t1 (c1, c2) AS SELECT ROWNUM, LPAD ('X', 100, 'X') FROM XMLTABLE ('1 to 10000');CREATE INDEX t1_x1 ON t1 (c1); 아래 쿼리는 조인 조건이 없어 cartesian product이 발생합니다. 실행 계획 하단에 조인 조건을 추가하나 ..