Partition Pruning? SQL을 실행하는 시점에 파티션 세그먼트를 액세스 대상에서 제외시키는 기능 기본 파티션 Pruning 정적 파티션 프루닝 파티션 키 컬럼을 상수 조건(ex. where 등록일자 = to_date(’20230824’, ‘YYYYMMDD’))으로 조회할 때 작동. 실행계획의 Pstart와 Pstop 칼럼에 액세스할 파티션 번호가 출력된다. 정적 파티션 Pruning 예시 SQL> Select count(*) from t Where no between 30 and 50; -------------------------------------------------------------------------------------------------- | Id | Operation ..
공유 커서 SQL을 하드파싱한 결과를 저장하고 있는 오라클 객체이며 SGA에 저장된다. 공유 커서는 여러 세션 간에 공유될 수 있으며 단지 데이터를 저장하고 있을 뿐이다. 실제 SQL 실행을 위해선 PGA에 적재해야한다. 만약 라이브러리 캐시에 쿼리에 대한 공유 커서 존재 시 하드 파싱이 생략된다. 세션 커서 세션에서 쿼리를 실행하기 위해 공유 커서로부터 값을 읽어들인 값과 그 밖에 세션에 필요한 각종 상태 값을 저장하고 있는 오라클 객체이다. PGA에 존재하므로 다른 세션과 공유할 수 없으며 하나의 공유 커서에 여러 개의 세션 커서가 연결될 수 있고 서버나 세션 파라미터 설정 시 세션 커서를 사용하고 난 뒤에도 메모리에 캐싱해둘 수 있다. 만약 세션 커서가 캐싱되어 있다면 라이브러리 캐시에서 공유 커서..
- 설립연도 10년 이내 - 매출액 100억 이하 - 직원 수 30명 이하 위 조건을 만족하는 기업의 company_classification을 "STARTUP"으로 수정하는 스크립트를 작성하고 있었습니다. ``` update company set company_classification = "STARTUP" where company_number in (((select company_number from company where LENGTH(established_at) = 4 and established_at >= date_format(curdate(), '%Y') - 10) union all (select company_number from company where LENGTH(established_a..
조인 Factorization 옵티마이저가 SQL을 재작성하는 것을 이야기한다. 불필요하게 2번 테이블을 스캔하는 쿼리문을 1번만 스캔하도록 재작성하는 것 등이 포함된다. 조건절 Pullup 쿼리 블록 안으로 밀어 넣어있는 조건들을 밖으로 빼내어 내오는 것을 이야기하며, 이를 다시 다른 쿼리 블록에 Pushdown할 때 사용한다. 조건절 Move Around 쿼리 블록 안, 또는 밖에 있는 조건들을 다른 쿼리문으로 이동시킬 때 발생한다. 조건절 Transitive 조건절 이행이란, A = B 이고, B = C이면 A = C이다. 라는 추론을 통해 새로운 조건절을 내부적으로 생성해주는 쿼리 변환이다. 예를 들어 부서 d, 사원 e 테이블이 있을 때 where d.부서id = :deptid and e.부서i..
Enqueue Lock Enqueue는 공유 리소스에 대한 액세스를 관리하는 Lock 메커니즘이다. Enqueue에 의해 보호되는 공유 리소스로는 테이블, 트랜잭션, 테이블스페이스, 시퀀스, Temp 세그먼트 등이 있다. Enqueue Lock은 래치와 달리 순서가 보장되는 Queue를 사용한다. Enqueue 리소스는 소유자, 대기자, 목록을 관리할 수 있는 구조체를 말한다. 소유가자 Exclusive 모드일 때는 한 순간에 하나의 세션만 Lock을 획득할 수 있지만, Shared 모드일 때는 여러 세션이 동시에 Lock을 획득할 수 있다. TX Lock(트랜잭션 Lock) 트랜잭션이 시작하면 Undo 세그먼트 헤더에 위치한 트랜잭션 테이블로부터 슬롯을 하나 할당받는다. 다른 트랜잭션이 Consiste..
Lock Escalation 로우 레벨 Lock이 페이지, 익스텐트, 테이블 레벨 Lock으로 확장되는 것을 말한다. Lock 매니저로 Lock을 관리하는 DBMS에서 메모리 자원의 한계를 극복하기 위해 구현된 기능인데, 낮은 레벨의 Lock을 사용할수록 동시성이 좋지만, 관리해야 할 Lock의 개수가 증가하여 관리해야할 메모리가 늘어나게 되기 때문에 Lock 레벨을 확장하는 것이다. 하지만, 수많은 레코드를 한꺼번에 잠그기 때문에 동시성이 나빠진다. 오라클의 경우, Lock을 로우 속성으로 관리하기에 이러한 현상이 발생하지 않는다.