데이터베이스 : 디스크에 저장된 데이터집합(Datafile, Redo Log File, Control File 등)인스턴스 : SGA 공유 메모리 영역과 이를 액세스하는 프로세스 집합기본적으로 하나의 인스턴스가 하나의 데이터베이스만 액세스한다.RAC(Real Appli
: 시스템 공유 메모리에서 SQL과 실행계획이 캐싱되는 영역1) 파싱 트리 생성 : SQL문을 이루는 개별 구성 요소를 분석해서 파싱 트리 생성2) Syntax 체크 : 문법적 오류가 없는지 확인. 예를 들어, 사용할 수 없는 키워드를 사용했거나 순서가 바르지 않거나
Oracle을 포함한 모든 DBMS에서 I/O는 블록 단위로 이루어진다.디스크 I/O : 디스크의 액세스 암이 움직이면서 헤드를 통해 데이터를 읽고 쓴다. 메모리 I/O : 전기적 신호메모리는 물리적으로 한정된 자원이므로, 결국 디스크 I/O를 최소화하고 버퍼 캐시 효
Parse Call : SQL 파싱을 요청하는 CallExecute Call: SQL 실행을 요청하는 CallFetch Call: SELECT문의 결과 데이터 전송을 요청하는 CallUser Call: DBMS 외부로부터 요청되는 Call. DBMS 성능과 확장성을 높
같은 자원을 액세스하려는 다중 트랜잭션 환경에서 데이터베이스의 일관성과 무결성을 유지하기 위해 필요한 직렬화 장치공유 Lock: 데이터를 읽고자 할 때 사용한다.공유 Lock과는 호환되지만 배타적 Lock과는 호환되지 않는다.(공유 Lock이 설정된 리소스에 다른 트랜
트랜잭션(Transaction) : 업무 처리를 위한 논리적인 작업 단위원자성 (Atomicity) : 트랜잭션은 더이상 분해가 불가능한 업무의 최소단위이므로, 전부 처리되거나 아예 하나도 처리되지 않아야 한다.일관성 (Consistency) : 하나의 트랜잭션을 성공
동시성 제어(Concurrency Control)란 동시에 작동하는 다중 트랜잭션의 상호 간섭 작용에서 데이터베이스를 보호할 수 있어야 함을 의미한다. 동시성을 높이려고 Lock의 사용을 최소화하면 일관성을 유지하기 어렵고, 일관성을 높이려고 Lock을 적극적으로 사용
옵티마이저(Optimizer) : SQL을 가장 빠르고 효율적으로 수행할 최적(최저비용)의 처리경로를 생성해주는 DBMS 내부의 핵심 엔진실행계획 : 옵티마이저가 생성한 SQL 처리경로옵티마이저의 SQL 최적화 과정1\. 사용자가 던진 쿼리수행을 위해, 후보군이 될만한
쿼리 변환(Query Transformation)은 옵티마이저가 SQL을 분석해 의미적으로 동일하면서도 더 나은 성능이 기대되는 형태로 재작성하는 것을 말한다. 이는 Query Transformer가 담당한다.휴리스틱 쿼리 변환 : 결과만 보장된다면 무조건 쿼리 변환을
가장 일반적으로 B\*Tree 인덱스 구조를 사용한다.인덱스 깊이 : 루프에서 리프 블록까지의 거리. 반복적으로 탐색 시 성능에 영향을 미친다.루트, 브랜치 블록 : 각 하위 노드들의 데이터 값 범위를 나타내는 키값과 그 키값에 해당하는 블록을 찾는데 필요한 주소 정보
인덱스 선두 컬럼을 조건절에서 가공하면 (FBI 인덱스를 정의하지 않는 한) 정상적으로 인덱스를 사용할 수 없다.부정형 비교(<>)를 사용해도 인덱스를 사용할 수 없다.is not null 조건도 부정형 비교에 해당하므로 정상적인 인덱스 사용은 어렵다.위 세 경우
조인의 기본은 NL 조인이다. NL 조인은 인덱스를 이용한 조인으로 이를 정확하게 이해하고 나면 다른 조인 방식도 쉽게 이해할 수 있다.예를 하나 들어보자.이 쿼리 수행 과정을 생각했을 때 가장 쉽게 생각할 수 있는 방식은 사원 테입르에서 1996년 1월 1일 이후에
데이터베이스 Call을 반복적으로 일으키는 프로그램을 One-SQL로 통합했을 때 얻는 성능개선 효과는 매우 극적이다. 하나의 업무에 대해서이렇게 쿼리를 작성하면 같은 테이블을 여러 번 접근해야 한다는 점에서 효율적이지 못하다.이렇게 CASE문을 활용한다면 복잡한 처리
SQL 수행 도중 Sort 오퍼레이션이 필요할 때마다 DBMS는 정해진 메모리 공간에 Sort Area를 할당하고 정렬을 수행한다. Oracle은 소트 영역을 PGA 영역에 할당한다.Sort 오퍼레이션도 메모리 공간이 부족할 때는 디스크 공간을 사용한다. Oracle에
테이블 데이터를 변경하면 관련된 인덱스에도 변경이 발생한다. 변경할 인덱스 레코드를 찾아가는 비용에 Redo, Undo를 생성하는 비용까지 더해지므로 인덱스 개수가 많을수록 DML 성능이 나빠진다. Update 수행 시 테이블 레코드는 직접 변경하지만 인덱스 레코드는
파티셔닝(Partitioning)은 테이블 또는 인덱스 데이터를 파티션(Partition) 단위로 나누어 저장하는 것을 말한다. 테이블을 파티셔닝하면 파티션 키에 따라 물리적으로는 별도의 세그먼트에 데이터를 저장하며, 인덱스도 마찬가지다. 관리적 측면 : 파티션 단위
배치 프로그램 튜닝 개요 배치(Batch) 프로그램 배치 프로그램이란, 일련의 작업들을 하나의 작업 단위로 묶어 연속적으로 일괄 처리하는 것을 말한다. 온라인 프로그램에서도 여러 작업을 묶어 처리하는 경우가 있으므로 이와 구분하려면 한 가지 특징을 더 추가해야 하는데,
TM Lock은 DML 테이블 Lock으로 테이블을 보호하는 Lock이다.이제부터 이 트랜잭션을 트랜잭션A라고 부를 것이다.그러면 이렇게 정상적으로 업데이트 된다. 아직 commit은 하지 않은 상태다.이때, 다른 곳(새 cmd창)에서 empno가 1인 emp의 sal
TM Lock은 DML 테이블 Lock으로 테이블을 보호하는 Lock이다.이제부터 이 트랜잭션을 트랜잭션A라고 부를 것이다.그러면 이렇게 정상적으로 업데이트 된다. 아직 commit은 하지 않은 상태다.이때, 다른 곳(새 cmd창)에서 empno가 1인 emp의 sal
조건에 해당하는 ROW의 컬럼을 비교하여 체크한다.서브 쿼리의 결괏값을 메인 쿼리에 대입하여 조건 비교 후 결과를 출력한다.조건에 해당하는 ROW의 존재 유무 체크 후 더이상 수행하지 않으며 SELECT절을 평가하지 않으므로 일반적으로 IN에 비해 성능이 좋다.메인 쿼
SCN 확인 과정을 거치며 쿼리가 시작된 시점을 기준으로 일관성 있는 상태로 블록을 액세스하는 것SQL 트레이스 Call 통계의 query 항목, AutoTrace에서의 consistent getsSQL문이 시작된 시점이 아니라 데이터를 찾아간 바로 그 시점의 최종 값