Hybrid Vector Index
·
Oracle/Vector
Oracle 23ai(23.6)에 하이브리드 벡터 인덱스 기능이 추가되었습니다. 하이브리드 벡터 인덱스를 사용하하면 전체 텍스트 검색(full-text search)과 벡터 유사도 검색(vector similarity search)을 조합하여 데이터를 조회할 수 있습니다. 테스트를 위해 예제 데이터를 다운로드하고 아래와 같이 압축을 해제하겠습니다.$ unzip /home/oracle/wiki/vector_database_wikipedia_articles_embedded.zipArchive: vector_database_wikipedia_articles_embedded.zip inflating: vector_database_wikipedia_articles_embedded.csv inflating: ..
TIME_BUCKET 함수
·
Oracle/SQL
Oracle 23ai(23.7)에 SQL Time Bucketing 기능이 추가되었습니다. 이 기능을 사용하면 시계열 데이터를 특정 간격(버킷)으로 집계 분석할 수 있습니다. TIME_BUCKET 함수는 입력 날짜 값를 특정 원점에 맞춰 지정된 간격으로 버킷화하여 버킷의 시작 부분을 반환합니다. 아래는 TIME_BUCKET 함수의 구문입니다. 첫 번째 인수는 입력 날짜 값, 두 번째 인수는 간격, 세 번째 인수는 원점, 네 번째 인수는 버킷의 시작 또는 끝을 반환할지 여부(기본값은 START), 다섯 번째 인수는 월말일에 대해 버킷을 결정하는 방식(기본값은 ON OVERFLOW ROUND)을 입력합니다.TIME_BUCKET (datetime, stride, origin, [ START | END ] [ ..
Materialized Expression Columns
·
Oracle/Administration
Oracle 23ai(23.7)에 Materialized Expression Columns 기능이 추가되었습니다. Materialized Expression Column은 물리적으로 값이 저장되는 Virtual Column입니다. 기능이 추가되면서 Virtual Column을 Expression Column으로 명칭을 변경하고 기존의 Virtual Column을 Virtual Expression Column, 추가된 기능을 Materialized Expression Column으로 명명한 것으로 보입니다. 아래는 virtual_column_definition 절의 구문입니다. 칼럼 표현식 뒤에 VIRTUAL 또는 MATERIALIZED 키워드를 사용할 수 있습니다.column [datatype] [ VI..
Relational Data Vectorization
·
Oracle/Vector
Oracle 23ai(23.6)에 Relational Data Vectorization 기능이 추가되었습니다. 이 기능을 사용하면 관계형 데이터로 벡터를 생성할 수 있습니다. 테스트를 위해 Bank Marketing 데이터를 다운로드하여 아래와 같이 압축을 해제하겠습니다. bank-additional-full.csv 파일의 로우 수는 41,189 건입니다.$ unzip bank+marketing.zip$ unzip bank-additional.zip$ cd bank-additional$ wc -l bank-additional-full.csv41189 bank-additional-full.csv 아래와 같이 External 테이블를 사용하여 bank-additional-full.csv 파일을 bank 테이..
Dynamic Statistics for PL/SQL Functions
·
Oracle/Performance
개요Oracle 23ai(23.8)에 Dynamic Statistics for PL/SQL Functions 기능이 추가되었습니다. 이 기능은 PL/SQL 함수에 대한 동적 통계를 수집합니다. 이 글에서는 스칼라 타입을 반환하는 PL/SQL 함수를 스칼라 함수, 컬렉션 타입을 반환하는 PL/SQL 함수를 테이블 함수로 지칭합니다. plsql_function_dynamic_stats 파라미터로 PL/SQL 함수에 대한 동적 통계 수집의 동작을 설정할 수 있습니다. 기본값은 PREFERENCE로 dynamic_stats 설정에 따라 동적 통계를 수집합니다.-- 1-1SELECT name, value, isses_modifiable, issys_modifiable FROM v$parameter WHERE n..
FLOAT32 Vector Generator
·
Oracle/Vector
Oracle AI Vector Search User's Guide는 SQL Quick Start Using a FLOAT32 Vector Generator 절에서 FLOAT32 벡터를 생성할 수 있는 패키지를 제공합니다. 이 패키지는 차원 값이 커질수록 CLOB 타입의 벡터에서 좌표 값을 가져오는 get_coordinate 함수에 의해 성능이 급격히 저하됩니다. 아래 예제는 500 차원의 벡터를 100 로우 생성한 결과를 보여줍니다.-- 1BEGIN vector_gen_pkg.generate_vectors ( num_vectors => 100 -- Number of vectors to generate. Must be 1 or above , dimensions =..
DBMS_SQLDIAG.REPORT_SQL 함수
·
Oracle/Performance
Oracle 23ai에 DBMS_SQLDIAG.REPORT_SQL 함수가 추가되었습니다. 이 함수는 SQL 문에 대한 정보를 포함한 리포트를 HTML 형식을 반환합니다. DBMS_SQLDIAG.REPORT_SQL 함수의 정의는 아래와 같습니다. directory에 값을 입력하면 디렉토리에 SQLR__.html 형식의 파일이 생성됩니다.DBMS_SQLDIAG.REPORT_SQL ( sql_id IN VARCHAR2 , directory IN VARCHAR2 DEFAULT NULL , level IN VARCHAR2 DEFAULT 'TYPICAL' -- BASIC, TYPICAL, ALL) RETURN CLOB; 테스트를 위해 아래와 같이 테이블과 인덱스를 생성하겠습니다.-- 1D..
ORA-01719 에러
·
Oracle/SQL
Oracle 23ai부터 IN 조인 조건에 대해 ORA-01719 에러가 발생하지 않습니다. 아래는 V$SYSTEM_FIX_CONTROL 뷰에서 ORA-01719 에러와 관련된 Fix Control을 조회한 결과입니다.SELECT bugno, value, sql_feature, description, optimizer_feature_enable FROM v$system_fix_control WHERE bugno IN (6610822, 32436948); BUGNO VALUE SQL_FEATURE DESCRIPTION OPTIMIZER_FEATURE_ENABLE-------- ----- -----------..
SQL*Loader 데이터 파일 확장자
·
Oracle/Utilities
SQL*Loader의 DATA 파라미터에 확장자 없는 파일명을 지정하면 dat 확장자가 자동으로 추가되고 이로 인해 에러가 발생할 수 있습니다.If you do not specify a file extension, then the default is .dat. 테스트를 위해 아래와 같이 테이블을 생성하겠습니다.DROP TABLE t1 PURGE;CREATE TABLE t1 (c1 NUMBER, c2 NUMBER); 아래 내용으로 t1.dat 파일과 t1 파일을 생성하겠습니다.1,2 아래와 같이 컨트롤 파일을 생성하겠습니다. LOAD DATATRUNCATE INTO TABLE t1FIELDS TERMINATED BY ","TRAILING NULLCOLS( c1 , c2) data 파라미터에 t1.d..
NL 조인의 비용 계산
·
Oracle/Performance
이번 글에서 NL 조인의 비용 계산에 대해 살펴본 후 optimizer_index_caching, optimizer_index_cost_adj 파라미터가 NL 조인 비용 계산에 미치는 영향에 대해 살펴보겠습니다. 준비테스트를 위해 아래와 같이 테이블과 인덱스를 생성하겠습니다.-- 1DROP TABLE t1 PURGE;DROP TABLE t2 PURGE;CREATE TABLE t1 (c1) AS SELECT ROWNUM FROM XMLTABLE ('1 to 10000');CREATE TABLE t2 (c1, c2, c3) ASSELECT ROWNUM, CEIL (ROWNUM / 100), NVL (NULLIF (MOD (ROWNUM, 100), 0), 100) FROM XMLTABLE ('1 to 1000..
MBRC 설정에 따른 multiblock read 동작
·
Oracle/Performance
개요 db_file_multiblock_read_count  파라미터는 multiblock read 수행 시 한 번의 I/O 작업에서 읽을 수 있는 최대 블록 수를 지정합니다. 기본값은 플랫폼이 효율적으로 수행할 수 있는 최대  I/O 크기(대부분의 플랫폼은 1MB)를 블록 크기(db_block_size = 8K)로 나눈 값인 128로 설정됩니다. 10.2 이전 버전은 multiblock read의 수행과 비용 계산에 모두 db_file_multiblock_read_count  파라미터를 사용했지만 10.2 버전부터 multiblock read의 수행은 _db_file_exec_read_count 파라미터, 시스템 통계(MBRC)가 수집되지 않은 경우 multiblock read의 비용 계산은 _db_..
SQL Macro - Table Expression
·
Oracle/SQL
지난 글에 이어 이번 글에서는 테이블 표현식을 사용하는 테이블 SQM에 대해 간단히 살펴보겠습니다. 참고로 테이블 SQM은 Oracle 19c에 추가된 PTF(Polymorphic Table Function)과 유사하게 동작하며, SQL Server의 TVF(Table-Valued Function)을 대체할 수 있는 기능으로 보입니다. 테스트 버전은 아래와 같습니다. 테이블 SQM은 19.7 버전으로 기능이 backport되었습니다.-- 1SELECT version_full FROM product_component_version;VERSION_FULL------------21.3.0.0.01 row selected. 테스트를 위해 아래와 같이 테이블을 생성하겠습니다.-- 2DROP TABLE t1 PUR..