공부 이야기/ORACLE
-
[Oracle] 예약 풀과 대형 풀의 기능공부 이야기/ORACLE 2024. 5. 25. 14:27
1. SGA 영역에서 Redo Buffer, Data Buffer Cache나 Shared Pool 라이브러리 캐시, 데이터 딕셔너리, 세션 캐시를 위주로 확인하다보니 저 두 영역이 무엇을 하는지가 궁금해졌다. 분명히 SGA 영역 안에 있는데 말이지 2. 먼저 SQL문이 수행될 때 라이브러리 캐시에 있는지 확인하는 소프트 파싱 작업을 수행할 때를 고려해보자- 실제 운영환경에서는 여러 개의 세션에서 여러 개의 SQL문을 동시다발적으로 수행된다.- 제한적인 메모리 자원을 여기저기서 사용할 것인데 만약 큰 용량의 SQL문이 수행된다면?- 그만큼 메모리 할당량도 커질 것이다. 다른 세션에 영향을 줄 수 있다는 뜻이다.- 이를 방지하기 위해 예약 풀과 대형 풀에서 해당 작업을 대신 수행하는 것이다.- 라이브러리 ..
-
[Oracle] BUFFER_POOL 기능에 대해서공부 이야기/ORACLE 2024. 5. 24. 20:40
1. SGA 영역에 테이블 혹은 세그먼트 등을 명시적으로 상주시킴으로써 데이터 엑세스 기능을 최적화할 수 있다.ALTER TABLE table_name STORAGE (BUFFER_POOL KEEP);ALTER INDEX index_name STORAGE (BUFFER_POOL RECYCLE); 2. KEEP, RECYCLE, DEFAULT 세 가지 옵션으로 나뉜다.DEFAULT Pool:데이터베이스에서 일반적으로 사용되는 데이터 블록이 저장모든 세그먼트에 대해 기본적으로 할당KEEP Pool:자주 참조되는 데이터 블록을 캐시에 오래 유지하기 위해 사용중요하거나 자주 액세스되는 데이터 세그먼트를 KEEP 풀에 할당하여, 해당 블록이 캐시에서 제거되지 않도록 함예시: 자주 조회되는 테이블이나 인덱스RECY..
-
[Oracle] FLASH_CACHE 기능에 대해서공부 이야기/ORACLE 2024. 5. 24. 20:36
1. SSD 영역에 직접 접근해서 그나마 빠르게 Disk I/O를 이용하고 싶을 때, 테이블/인덱스/세그먼트를 플래쉬 메모리 영역(SSD)에 배치시킬 수 있다.ALTER TABLE table_name STORAGE (FLASH_CACHE KEEP);ALTER INDEX index_name STORAGE (FLASH_CACHE NONE);ALTER INDEX index_name STORAGE (FLASH_CACHE DEFAULT); 2. 옵션은 KEEP, NONE, DEFAULT로 나뉜다.DEFAULT:기본 캐시 모드로, 데이터베이스의 기본 설정에 따라 플래시 캐시를 사용KEEP:중요하거나 자주 액세스되는 데이터를 플래시 캐시에 오래 유지KEEP 모드는 데이터 블록이 캐시에서 제거되지 않도록 하여, 중요한..
-
[Oracle] Oracle Streams 개념 이해 (기본)공부 이야기/ORACLE 2024. 5. 24. 12:34
1. Capture- 소스 데이터베이스에서 DML, DDL이 발생하면 변경 사항을 Redo Log에 남긴다.- Redo Log에 기록된 내용을 가져오는 것을 Process Capture 라고 한다.- Redo Log가 아닌 트리거를 활용해서 가져오는 방식도 있다. 이를 Synchronized Capture 라고 한다. 1-1. Process Capture- 프로세스 캡쳐는 테이블, 스키마 또는 전체 데이터베이스에 대한 DML 변경 사항과 DDL 변경 사항을 캡처할 수 있음- Redo Log에서 변경 사항을 캡처하고 캡처된 각 변경 사항을 LCR(Logical Changed Record)이라는 메시지로 포맷팅한다.- 이 때, 포맷팅된 메시지는 Captured LCR로 분류되는데 Oracle Streams ..
-
[Oracle] Isolation level과 Snapshot too old공부 이야기/ORACLE 2024. 5. 19. 21:35
결론부터 말하면 둘은 관계가 없다.Isolation level 3단계 Repeatable Read에서 처음 트랜잭션을 보장하는데 왜 Snapshot too old가 발생할 수 있을지 생각해봤다.Repeatable Read는 트랜잭션을 보장하는 것이지 Undo 세그먼트를 보장하는 것이 아니기 때문이다.Undo 세그먼트는 하나 이상의 트랜잭션에 씌워질 것이므로 Repeatable Read, Serializable에 의해 트랜잭션을 보장한다고 해도 다른 트랜잭션에서 메모리를 할당해버리면 도무지 피할 수 있는 방법이 없기 때문이다.심지어 commit이 완료된 데이터일지라도 Undo 세그먼트에서 Retention보다 길어지면 덮어씌워진다.물론 이 경우는 commit된 데이터를 flashback해서 굳이 사용하지 ..
-
[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의 맨 마지막 블록에 세션..