본문 바로가기

분류 전체보기

[Oracle] NL Join 대신에 Hash Join을 사용하는 이유 NL Join은 driving, driven 테이블을 루프를 돌며 반복하는 방식이다.선행 테이블에서 나온 결과값에 대해 후행 테이블에서 동치 혹은 범위 조회 연산을 한다.후행 테이블에서 N번의 탐색 연산을 수행하기 때문에 선행 테이블의 볼륨이 너무 많거나선행 테이블에 인덱스가 존재하지 않아 조회 속도가 느린 경우 Hash Join을 사용하는 방식이 효과적일 수 있다. 인덱스가 없는 대신 선행 테이블에 대해 해시 테이블을 만든 후, 후행 테이블에 대해 동치 연산을 진행하는데N번의 연산 대신 해시 함수를 이용한 O(1) 연산을 수행하면 조회 속도를 개선할 수 있기 때문이다. 해시 테이블은 만들어지는데도 시간이 걸릴 수 있으므로 두 개의 테이블 중 크기가 작은 테이블을 생성하도록 조인 순서를 정하는 것이 효과.. 더보기
[Oracle] HWM(High Water Mark), PCT, freelist 데이터베이스는 테이블 스페이스, 세그먼트, 익스턴트, 블록 순으로 각각 1대N의 관계로 세분화된다. 단편화를 줄이기 위한 방식으로 사료된다.세그먼트는 테이블 스페이스 내에 여기저기 산재될 수 있는 반면 익스턴트는 연속된 블록으로 이뤄져 있다.관련성 있는 데이터끼리 군집화시켜놓는 것이 조회 효율성을 높여주기 때문이다. 이 중 가장 작은 단위는 '데이터 블록'으로 실제 I/O가 발생할 때 읽고 쓰는 단위이다.단 1Byte 데이터를 읽으려고 해도 데이터 블록인 2KB를 읽는다.데이터 블록을 제외한 나머지는 유동적인 크기를 가진다. 세그먼트는 공간을 확장할 때 익스턴트 단위로 하나씩 늘린다. 이 때 사용되는 개념이 High Water Mark이다.오라클은 일종의 선을 먼저 지정한 후, 공간을 늘리는 방식을 사용.. 더보기
[Oracle] 서브 쿼리에 대해서 보통 자주 사용하는 조인 방식과 다르게 서브 쿼리를 통해 얻는 이점이 있다.메인 쿼리에서 반환되는 데이터의 양이 적은 경우, 후행 쿼리(=서브쿼리)의 조회 연산이 줄어들 수 있고만약 서브 쿼리의 input 값이 어느정도 일정한 경우, caching이 되기 때문이다. (Filter Operation) 펀드 상품 기준가 쿼리 작성시에 성능 이점을 볼 수 있었다.특정 기간에 가입한 상품을 찾고 당시의 상품 기준가와 가입 금액을 반환하는 쿼리였다.1-계좌 테이블, 2-상품 테이블, 3-기준가 테이블이 서로 조인되어 있었다.Nested Loop Join의 경우 같은 값을 가지는 칼럼에 대해 반복 조회를 수행하기 때문에 N x N x N번 수행하는 것으로 보였다. 하지만 펀드 상품의 경우, 같은 날에는 상품별로 하.. 더보기
Oracle 서버 시작하기, 종료하기 sqlplus에 접속한 후, 다음 명령어를 차례대로 수행한다.  각 단계는 다음과 같다.- nomount : spfile을 읽어서 SGA, PGA, Disk 등 데이터베이스 고유 메모리 영역을 할당한다.- mount : control file을 읽어서 세부적인 메모리 영역 혹은 데이터베이스에 필요한 환경설정을 세팅한다.- open : 최종 사용 가능한 상태로 user 접속이 이뤄진다. 그냥 startup 명령어를 수행하면 한 번에 바로 시작할 수 있다.반대로 데이터베이스를 종료하는 shutdown 명령어도 다양하다.shutdown -transactional : 현재 트랜잭션 수행 중인 세션이 완료되면 종료한다.shutdown -immediate : 현재 트랜잭션이 rollback 되며 연결된 세션을 해제.. 더보기
Oracle 23c 설치하기 1. 이왕 설치하는거 최신 버전을 설치해보자* window에 docker, bash가 다운로드 상태이어야 함2. docker로 이미지 가져오기docker pull container-registry.oracle.com/database/free:latest3. docker 이미지를 실행하기docker run -d --name ora23 container-registry.oracle.com/database/free* ora_container 대신 다른 이름 써도 됨4. 부팅 로그 확인하기docker logs --follow ora23Starting Oracle Net Listener. Oracle Net Listener started. Starting Oracle Database instance FREE. O.. 더보기
Oracle Update 처리 과정 및 성능 튜닝 1. 데이터가 변경되는 경우 undo log, redo log에 변경 사항을 각각 기록한다.2. 대용량 데이터를 변경하는 경우, undo space, tablespace, archive file이 full 차는 경우, data type이 맞지 않는 등의 이유로 장애가 발생할 수 있다.3. 수행 시간만큼 롤백에 소요되는 시간이 오래 걸릴 수 있고 데이터 정합성이 맞지 않는 심각한 오류가 발생할 수 있다.4. Update 처리 성능을 높이기 위해서 다음과 같은 방법이 있다.(1) 힌트 : /*+ enable_parallel_dml parallel(6) */  : 병렬 처리를 유도- 예시UPDATE /*+ enable_parallel_dml parallel(6) */ SALESSET SALARY * 1.1WH.. 더보기
Active Data Guard, Change Data Capture, Extract Transform Load 세 개 전부 데이터 복제 및 이관을 위한 메커니즘Golden Gate : 서로 다른 종류의 데이터베이스 사이에서 데이터를 주고 받을 때Active Data Guard : 같은 종류 데이터베이스에서 데이터를 주고 받을 때- Disaster Recovery에서 사용 스토리지 복제 방식과는 다르게 변경 데이터가 기록되어 있는 Redo 파일에서 데이터를 읽어와서 복제ADG는 redo log file을 잠금하지 않고 read-only로 open해서 관리하기 때문에 효율적이다. Golden Gate는 Redo log file에서 데이터를 extract 해서 별도의 trail file을 만들어서 Target System에 전송Redo log file을 통채로 전송하는 ADG 방식과는 다르게 별도의 파일을 만들기 때문.. 더보기
Oracle이 SQL을 처리하는 과정 시작은 서버 프로그램부터.1. Oracle 서버 메모리에 실행중인 Listener 프로세스가 connection을 accept 한다.2. MTS(connection pool 기반) 혹은 Dedicated Server에서 프로세스를 할당하고 SQL 구문을 처리3. 쿼리가 캐싱되어 있지 않은 경우 -> 4~6 실행4. SQL Parser가 Syntax를 해석5. Optimizer가 최적의 경로를 선택6. Executer가 선택한 경로에 의해 실행7. 데이터가 캐싱되어 있지 않은 경우, 디스크에서 데이터를 가져옴 * SQL Select 조회 순서 더보기