Undo와 Redo Undo란 DML 트랜잭션을 취소하여 데이터베이스를 트랜잭션 이전의 상태로 되돌리는 것으로 작업 롤백과, 읽기 일관성, 복구를 합니다. DML 트랜잭션(update, insert, delete)이 발생하게 되면, 변경 이전의 데이터(원본 데이터)인 Undo Data는 전부 Undo Segment에 저장됩니다. 이때 Undo Segment를 저장하고 있는 Tablespace가 바로 Undo Tablespace입니다. Redo란 단어 그대로 "다시 하다"라는 뜻을 가지고 있습니다. 즉, DML 트랜잭션을 다시 수행한다는 의미겟죠?Redo는 기본적으로 복구의 역할을 합니다. DML 트랜잭션을 수행하던 도중 서버에 장애가 발생하여 데이터베이스가 shutdown 되었을 때 데이터베이스를 재기..
병렬 처리(Parallel Processing)오라클에서 병렬 처리(Parallel Processing)란 하나의 SQL를 처리하기 위해 여러 개의 프로세스를 띄워 작업 속도를 보다 빠르게 하는 것을 목표로 하는 기능입니다. 기본적으로 사용자 세션(User Session)이 붙게 되면(=SQL Plus 혹은 DBeaver, Toad 등과 같은 툴로 접근하는 경우) 서버 메모리에 Dedicate Server를 띄우게 됩니다. 그리고 하나의 Dedicate Server가 한 세션에 대한 SQL를 처리하게 됩니다. 하지만, 병렬 처리(Parallel Processing)는 여러 개의 Dedicate Server를 통해 SQL를 분할하여 처리합니다. 병렬 처리(Parallel Processing)는 성능 향상에..
파싱(Parsing) SQL은 SGA(System Global Area) 내부 Shared Pool의 라이브러리 캐시(Library Cache)에는 SQL 실행 정보(실행 계획 등...)가 들어있는데, 이러한 실행 정보를 만드는 과정을 파싱(Parsing)이라고 합니다. 파싱(Parsing)은 SQL이 들어오면 이를 분석하여 어떻게 실행할지 계획을 세우고 실행하여 결과를 만들어 냅니다. 이러한 파싱은 소프트 파싱(Soft Parsing)과 하드 파싱(Hard Parsing)으로 나뉘어집니다. 소프트 파싱(Soft Parsing)파싱(Parsing)을 할 때 SQL 자체가 잘못된 SQL. 즉, 문법이 맞지 않거나, 존재하지 않는 테이블에 CRUD 작업을 하는 SQL이 들어올 수 있는데, 이 때 잘못된 SQ..
Oracle DB의 메모리 구조SGA 메모리어떠한 서버의 Memory(=RAM)가 있다고 하면, DB를 설치할 때 메모리에서 "내가 얼마만큼의 공간을 사용하겠다"라고 지정한 공간이 SGA(System Global Area)입니다. 따라서, 이 SGA는 오라클이 사용하는 영역이 됩니다. 그리고 SGA의 내부에는 Buffer Cache, Shared Pool, Large Pool 등의 여러 공간이 존재합니다. 그럼 이 공간들에 대해 하나씩 설명해 보겠습니다.Buffer Cache필요한 데이터를 가져올 때 매번 Disk를 통해 가져오는 것은 속도적인 측면에서 느리기 때문에, 서버 기동 시 필요한 데이터나 자주 사용하는 데이터들을 DB로부터 가져와, 임시적으로 Buffer Cache에 올려 사용합니다. 이후, ..
옵티마이저(Optimizer)란?옵티마이저는 가장 효율적인 방법으로 SQL을 수행할 최적의 처리 경로를 생성해주는 DBMS의 핵심입니다.컴퓨터 두뇌가 CPU라면, DBMS의 두뇌는 Optimizer입니다. 개발자가 SQL을 작성하고 실행하면 소프트웨어 실행 파일처럼 즉시 실행되는 것이 아니라 옵티마이저(Optimizer)에서 "이 쿼리문을 어떻게 실행 시키겠다" 라는 여러가지 실행 계획을 세우게 됩니다. 이렇게 실행 계획을 세운 뒤 시스템 통계정보를 활용하여 각 실행 계획의 예상 비용을 산정한 후 각 실행 계획을 비교하여 최고의 효율을 가지고 있는 실행 계획을 판별한 후 그 실행 계획에 따라 수행하게 됩니다. 옵티마이저의 종류옵티마이저는 규칙 기반 옵티마이저와 비용 기반 옵티마이저로 나뉩니다. 규칙 기..
WITHIN GROUPWITHIN GROUP은 ORACLE에서 주로 사용되는 구문으로, LISTAGG 함수를 사용할 때 함께 사용하는 것을 많이 볼 수 있습니다. WITHIN GROUP 절은 평소에 많이 사용하지 않기 때문에 조금 생소하게 느껴질 수 있습니다. WITHIN GROUP 절은 LISTAGG, RANK, DENSE_RANK 함수 등과 함께 사용할 수 있습니다.WITHIN GROUP 절과 같이 사용할 수 있는 함수LISTAGG: 그룹 내의 여러 행을 하나의 문자열로 연결합니다.RANK: 그룹 내에서 순위를 매깁니다.DENSE_RANK: RANK와 유사하지만 동일한 값에 대해 동일한 순위를 부여합니다.PERCENTILE_CONT: 연속 분포 모델을 가정하고 백분위수 값을 계산합니다.PERCENTI..
REDO와 UNDO에 대해 설명하기 전에 우리는 Transaction에 대해 알아야 합니다.Transaction의 ACID(원자성, 일관성, 독립성, 지속성)특성이 REDO, UNDO와 긴밀한 연관이 되어 있기 때문입니다.트랜잭션(Transaction)트랜잭션이란, 데이터베이스 관리 시스템(=DBMS)에서 상호작용하는 단위를 의미합니다.DBMS는 트랜잭션에 대해 원자성(Atomicity), 일관성(Consistency), 독립성(Isolation), 지속성(Durability)를 보장합니다.트랜잭션의 모든 연산은 반드시 한꺼번에 완료되거나 한꺼번에 취소되어야 하는 원자성(Atomicity)을 가지고 있습니다. 한꺼번에 완료가 된 경우, Commit을 통해 작업 결과를 데이터베이스에 반영합니다. 반면, 트..
- Total
- Today
- Yesterday