공부 이야기
-
[Oracle] DML 트랜잭션이 발생했을 때의 과정공부 이야기/ORACLE 2024. 5. 19. 15:26
1. Undo 세그먼트에 공간을 확보하기 위해 LOCK이 발생한다.2. LOCK 획득 및 공간 할당이 되면 TXID가 생성된다.3. Undo 세그먼트에 변경 전의 데이터를 기록한다. 서버프로세서4. Redo buffer에 변경 후의 데이터를 기록한다.5. commit이 발생하면 Redo buffer에 있는 데이터가 디스크의 Redo 영역에 기록된다. LGWR6. commit이 발생하면 CKPT가 체크포인트를 발생하며 변경된 모든 데이터와 Undo 데이터가 디스크에 기록
-
[Oracle] 오라클은 SQL 실행 이력을 어떻게 관리할까?공부 이야기/ORACLE 2024. 5. 17. 00:18
1. 오라클 운영시 SQL 실행 이력을 확인하고 검수하는 일은 매우 중요하다.2. 오라클은 어떻게 실행 이력을 관리를 하고 관리자는 무엇을 확인하면 되는 것일까?3. 우선 ASH(Active Session History) 를 알아야 한다.4. 오라클은 1초에 한 번씩 샘플링을 해서 Shared Pool 메모리 영역에 세션 및 SQL 실행 정보를 저장한다.5. CPU당 2MB를 할당해서 저장한다.6. 1시간 혹은 할당 메모리의 2/3이 찼을 경우 디스크에 기록을 한다. AWR 로그는 디스크에 기록된 내용을 수집하는 것이다.7. v$active_session_history 에서 자세한 내용을 확인할 수 있다. select /* 1. 샘플링이 일어난 시간과 샘플 ID */ sample_id, sample_..
-
[Oracle] 시퀀스 이모저모공부 이야기/ORACLE 2024. 5. 16. 23:09
1. 자동으로 하나씩 증가하는 고유 값을 만들고 싶을 때 사용한다. 보통 채번이라고 한다.2. 별도의 채번 테이블을 만들거나 재조회를 통한 +1 방식으로 구현할 수 있지만 경합 문제가 발생할 수 있다.3. 동시에 여러 세션에서 접근하는 경우 발생한다.4. 오라클에서는 이를 최적화하기 위해 시퀀스 오브젝트를 사용한다.5. 별도의 테이블스페이스를 가지거나 조회 메커니즘 대신 내장 함수처럼 작동하는 것이다.6. 생성 함수 및 옵션은 다음과 같다. 7. 추가로 SCALE, EXTEND, KEEP, GLOBAL, SESSION 이 있는데 다음과 같다.8. SCALE을 설명하기에 앞서 왜 등장했는지 배경부터 설명하면 다음과 같다.9. 다음 번호(+1)를 채번하는 시퀀스 특성상, B Tree의 맨 마지막 블록에 세션..
-
[oracle] parallel 옵션에 대한 고찰공부 이야기/ORACLE 2024. 5. 14. 15:19
1. hint를 주면 parallel로 동작할 수 있다.2. Plan을 보면 PX Coordinator, PX Send QC, PX Block Iterator 을 확인할 수 있다. 병렬 처리를 위한 분할 정복 방식이다. 블록 단위로 나눈 후, 다시 합치는 방식으로 병렬 처리가 수행된다.각각의 기능은 다음과 같다.PX Coordinator 병렬 실행을 관리하고 제어하는 역할을 담당하는 프로세스. 단일의 프로세스병렬 실행을 시작하고 각각의 작업이 제대로 실행되도록 보장한다.PX Send QCPX Send QC는 "Parallel Execution Send Query Coordinator"의 약자로, 병렬 처리된 데이터를 쿼리 코디네이터(Query Coordinator)에게 전달하는 역할을 한다.병렬 실행 ..
-
[Oracle] MView란?공부 이야기/ORACLE 2024. 5. 8. 09:04
* With절 plan에 사용되는 것과 일반적인 View와 다름1. 쿼리 결과를 디스크의 별도 테이블 스페이스에서 데이터 파일 형태로 저장하는데 사용자는 MView 데이터를 직접 수정할 수 없고, 원본 테이블의 변경 사항에 따라 자동으로 갱신한다. 2. 데이터베이스 객체로 관리되기 때문에 데이터 딕셔너리에서 MView를 확인할 수 있다. 또는 SELECT * FROM USER_SEGMENTS 쿼리로 확인이 가능하다. 일반 VIEW는 조회되지 않는 반면 MVIEW는 조회가 가능하다.SQL이 다시 실행되어야 하는 일반 VIEW와는 달리 데이터가 미리 저장되기 때문에 더 빠른 조회가 가능하다.3. 쿼리가 재실행되는 경우 사용자에게 미리 저장된 결과를 전달함으로써 쿼리를 여러 차례 재실행하는 데 따르는 성능적인..
-
[Oracle] RAC Failover 처리 과정공부 이야기/ORACLE 2024. 5. 3. 18:54
1. RAC 노드들은 public IP, private IP (Real IP, Virtual IP)를 가짐2. Virtual IP를 가지는 이유는 Failover에 빠르게 대응하기 위함3. Real IP를 이용하면 TCP Timeout 시간 동안 Failover를 진행할 수 없음(참고자료 확인)- 이는 TCP/IP 설계와도 관련이 있고 네트워크의 ARP 프로토콜에서 기존에 처리하는 방식이기 때문임- VIP는 네트워크 카드, OS에서 관리하는 것이 아닌 Grid Infrastructure > Oracle Notification Service에서 관리한다. 4. Virtual IP를 이용해서 즉시 Failover를 진행함5. 네트워크가 단절된 node의 Virtual IP를 살아있는 node의 Virtual..
-
[Oracle] NL Join 대신에 Hash Join을 사용하는 이유공부 이야기/ORACLE 2024. 5. 3. 15:29
NL Join은 driving, driven 테이블을 루프를 돌며 반복하는 방식이다.선행 테이블에서 나온 결과값에 대해 후행 테이블에서 동치 혹은 범위 조회 연산을 한다.후행 테이블에서 N번의 탐색 연산을 수행하기 때문에 선행 테이블의 볼륨이 너무 많거나선행 테이블에 인덱스가 존재하지 않아 조회 속도가 느린 경우 Hash Join을 사용하는 방식이 효과적일 수 있다. 인덱스가 없는 대신 선행 테이블에 대해 해시 테이블을 만든 후, 후행 테이블에 대해 동치 연산을 진행하는데N번의 연산 대신 해시 함수를 이용한 O(1) 연산을 수행하면 조회 속도를 개선할 수 있기 때문이다. 해시 테이블은 만들어지는데도 시간이 걸릴 수 있으므로 두 개의 테이블 중 크기가 작은 테이블을 생성하도록 조인 순서를 정하는 것이 효과..