SCN_ASCENDING 힌트와 Direct Path Read
·
Oracle/Performance
SCN_ASCENDING 힌트는 문서화되지 않은 힌트로 Bug 6688108 - Enhancement: Allow ORA-1555 to be ignored during table scan (Doc ID 6688108.8) 문서에 아래의 설명이 짧게 포함되어 있습니다. 설명에 따르면 이 힌트를 기술한 쿼리는 Undo 재사용으로 인해 Consistent Read가 불가능한 경우 ORA-1555 에러를 발생시키지 않고 새로운 쿼리(snapshot) SCN으로 블록을 액세스하며, 이로 인해 읽기 일관성을 보장하지 않습니다. ORA-1555 can occur during long running queries involving a ROWID Range or full table scan if the undo has ..
UNUSABLE 인덱스 파티션에 의한 Join Factorization 쿼리 변환
·
Oracle/Performance
UNUSABLE 인덱스 파티션에 의한 Join Factorization 쿼리 변환으로 인해 쿼리의 성능이 저하된 사례를 살펴보겠습니다. 참고로 이 글은 PPWJ 성능 저하 사례와 관련이 있습니다. 테스트를 위해 아래와 같이 테이블을 생성하겠습니다. t1은 비파티션 테이블, t2는 파티션 테이블입니다. t1 테이블에는 t2 테이블의 p1, p2 파티션에 해당하는 데이터가 저장되어 있습니다. -- 1 DROP TABLE t1 PURGE; DROP TABLE t2 PURGE; CREATE TABLE t1 (c1, c2) AS SELECT CEIL ((ROWNUM + 600000) / 100000), ROWNUM + 600000 FROM XMLTABLE ('1 to 200000'); CREATE TABLE t2..
ASM Partner Disk 조회
·
Exadata
Exadata에서 1개의 ASM Disk는 8개의 ASM Partner Disk를 가집니다. ASM 인스턴스에서 아래 쿼리를 수행하면 ASM Partner Disk를 조회할 수 있습니다. 1번 셀의 0번 디스크는 2번 셀의 0, 2, 5, 6번 디스크, 3번 셀의 0, 6, 7, 10번 디스크와 파트너링되어 있습니다.-- 1SELECT disk , LISTAGG (partner_disk, ',') WITHIN GROUP (ORDER BY partner_disk) AS partner_disk FROM (SELECT cell || '[' || disk || ']' AS disk , partner_cell || '[' || LISTAGG (partner_di..
Alert 로그 AWK 스크립트
·
Linux
Alert 로그 내용을 Timestamp|Sequence|Message 형태로 변환하는 AWK 스크립트를 작성했습니다. 아래와 같이 log.awk 파일을 생성하겠습니다. #!/usr/bin/awk { if (/^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{6}\+[0-9]{2}:[0-9]{2}$/) { ts = $0; seq = 1; } else if ($0 != "") { printf "%s|%03d|%s\n", ts, seq, $0 seq++; } } 테스트를 위해 아래와 같이 test.log 파일을 생성하겠습니다. 2050-01-01T00:00:01.000000+09:00 A 2050-01-01T00:00:02.000000+09:00 B..
PPWJ(Partial-Partition Wise Join) 성능 저하 개선
·
Oracle/Performance
기준 데이터를 저장한 비파티션 임시 테이블과 실제 데이터를 저장한 파티션 테이블을 병렬 조인하는 경우 임시 테이블의 기준 데이터에 따라 PPWJ(Partial-Partition Wise Join)의 성능이 저하될 수 있습니다. 이 글에서 분배 방식을 변경하여 PPWJ 성능 저하를 개선한 사례를 살펴보겠습니다. 테스트를 위해 아래와 같이 테이블을 생성하겠습니다. t1 테이블은 기준 데이터를 저장하는 비파티션 임시 테이블, t2 테이블은 실제 데이터를 저장하는 파티션 테이블입니다.-- 1DROP TABLE t1 PURGE;DROP TABLE t2 PURGE;CREATE GLOBAL TEMPORARY TABLE t1 (c1 NUMBER);CREATE TABLE t2 (c1)PARTITION BY RANGE (..
cell single block physical read 대기 이벤트 세분화
·
Exadata
19.15.0.0.220419, 21.6.0.0.220419 버전부터 cell single block physical read 대기 이벤트가 아래와 같이 세분화되었습니다. 이전 버전의 cell single block physical read 대기 이벤트는 RDMA, xrmem cache, flash cache, hard disk 값을 포함하고 있습니다. 해당 버전부터 HC 스토리지의 경우 cell single block physical read 대기 이벤트는 hard disk에 대한 값만 표시합니다. latency는 RDMA, xrmem cache, flash cache, hard disk 순으로 높습니다. 참고로 Exadata System Software 23.1.0 버전을 지원하는 오라클 데이터베이스..
ALTER TABLE MOVE 개선
·
Oracle/Administration
Oracle 21c의 VLDB and Partitioning Guide에 아래의 설명이 추가되었습니다.As of Oracle Database 21c, you can move partitioned and subpartitioned tables with a single DDL command. 테스트를 위해 아래와 같이 테이블을 생성하겠습니다.-- 1DROP TABLE t1 PURGE;CREATE TABLE t1 (c1 NUMBER, c2 NUMBER)PARTITION BY RANGE (c1)SUBPARTITION BY HASH (c2)SUBPARTITION TEMPLATE ( SUBPARTITION sp1 , SUBPARTITION sp2) ( PARTITION p1 VALUES LESS THA..
Block Range Granules
·
Oracle/Performance
블록 그래뉼(Block Range Granules)의 개수와 크기는 동적으로 결정되지만 아래 파라미터로 그래뉼의 생성 방식을 조정할 수 있습니다. 파라미터에 따르면 블록 그래뉼의 기본 크기는 1GB이며, PX 서버 별로 최소 13개, 최대 100개의 그래뉼이 생성될 수 있습니다. NAME DISPLAY_VALUE DEFAULT_VALUE DESCRIPTION --------------------------- ------------- ------------- ------------------------------------------------------------ _px_granule_size 1000000 1000000 default size of a rowid range granule (in KB) ..
AWK 날짜 값과 숫자 값 포맷팅
·
Linux
AWK 스크립트 작성 시 아래와 같이 날짜 값과 숫자 값을 포맷팅할 수 있습니다. 아래 예제는 systime 함수의 결과를 strftime 함수로 포맷팅합니다. $ echo | awk '{print strftime("%Y-%m-%d %H:%M:%S", systime())}' 2023-01-01 00:00:00 아래 예제는 숫자 값을 포맷팅합니다. \47은 작은따옴표(')를 나타냅니다. $ echo | awk '{printf ("%\47 10.1f\n", "1234567.89")}' 1,234,567.9
해시 파티션과 ORA_HASH 함수
·
Oracle/Administration
해시 파티션은 ORA_HASH 함수와 동일한 해시 알고리즘을 사용합니다. ORA_HASH 함수로 해시 파티션에 대한 skewness를 시뮬레이션할 수 있습니다. 테스트를 위해 아래와 같이 테이블을 생성하겠습니다. t1, t2 테이블은 64개의 해시 파티션으로 구성되어 있으며, t1 테이블은 1개, t2 테이블은 2개의 파티션 키로 해시 파티션을 생성합니다. -- 1 DROP TABLE t1 PURGE; DROP TABLE t2 PURGE; CREATE TABLE t1 (c1) PARTITION BY HASH (c1) PARTITIONS 64 AS SELECT ROWNUM FROM XMLTABLE ('1 to 64'); CREATE TABLE t2 (c1, c2) PARTITION BY HASH (c1, ..
TBL$OR$IDX$PART$NUM 함수
·
Oracle/Performance
TBL$OR$IDX$PART$NUM 함수는 파티션과 관련된 문서화되지 않은 함수로 파티션과 서브파티션의 포지션 또는 오브젝트 ID를 반환하며, 내부적으로 파티션 Pruning을 위해 사용됩니다. TBL$OR$IDX$PART$NUM 함수의 구문은 아래와 같습니다. 첫 번째 파라미터는 파티션 테이블을 입력합니다. 두 번째 파라미터는 기본적으로 0을 입력하며, 글로벌 파티션 인덱스의 오브젝트 ID를 입력하면 인덱스에 대한 파티션 정보가 반환됩니다. 세 번째 파라미터는 반환 값을 결정합니다. 1은 파티션의 포지션, 0은 서브파티션의 포지션, 4는 파티션의 오브젝트 ID, 3은 서브파티션의 오브젝트 ID를 반환하며, 8을 Deffered Global 인덱스에 대한 파티션 Pruning에 사용하는 것으로 보입니다...
rlwrap
·
Linux
rlwrap은 'readline wrapper'로 GNU Readline 라이브러리를 사용하여 모든 명령에 대한 키보드 입력을 편집할 수 있도록 하는 유틸리티입니다. rlwrap를 사용하면 sqlplus에서 방향 키를 사용할 수 있습니다. Oracle Linux 7 (x86_64) EPEL에서 아래의 RPM 파일을 다운로드할 수 있습니다. rlwrap-0.42-1.el7.x86_64.rpm rlwrap-0.43-1.el7.x86_64.rpm rlwrap-0.43-2.0.1.el7.x86_64.rpm rlwrap-0.43-2.el7.x86_64.rpm rlwrap-0.45.2-1.el7.x86_64.rpm rlwrap-0.45.2-2.el7.x86_64.rpm 종속성 에러 없이 설치 가능한 최종 버전은 0..