database

Database

Partition Pruning

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 ..

Database

DB-1093-error

- 설립연도 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..

Database

조인 쿼리 변환

조인 Factorization 옵티마이저가 SQL을 재작성하는 것을 이야기한다. 불필요하게 2번 테이블을 스캔하는 쿼리문을 1번만 스캔하도록 재작성하는 것 등이 포함된다. 조건절 Pullup 쿼리 블록 안으로 밀어 넣어있는 조건들을 밖으로 빼내어 내오는 것을 이야기하며, 이를 다시 다른 쿼리 블록에 Pushdown할 때 사용한다. 조건절 Move Around 쿼리 블록 안, 또는 밖에 있는 조건들을 다른 쿼리문으로 이동시킬 때 발생한다. 조건절 Transitive 조건절 이행이란, A = B 이고, B = C이면 A = C이다. 라는 추론을 통해 새로운 조건절을 내부적으로 생성해주는 쿼리 변환이다. 예를 들어 부서 d, 사원 e 테이블이 있을 때 where d.부서id = :deptid and e.부서i..

Database

데이터베이스 Lock

Enqueue Lock Enqueue는 공유 리소스에 대한 액세스를 관리하는 Lock 메커니즘이다. Enqueue에 의해 보호되는 공유 리소스로는 테이블, 트랜잭션, 테이블스페이스, 시퀀스, Temp 세그먼트 등이 있다. Enqueue Lock은 래치와 달리 순서가 보장되는 Queue를 사용한다. Enqueue 리소스는 소유자, 대기자, 목록을 관리할 수 있는 구조체를 말한다. 소유가자 Exclusive 모드일 때는 한 순간에 하나의 세션만 Lock을 획득할 수 있지만, Shared 모드일 때는 여러 세션이 동시에 Lock을 획득할 수 있다. TX Lock(트랜잭션 Lock) 트랜잭션이 시작하면 Undo 세그먼트 헤더에 위치한 트랜잭션 테이블로부터 슬롯을 하나 할당받는다. 다른 트랜잭션이 Consiste..

Database

Lock Escalation

Lock Escalation 로우 레벨 Lock이 페이지, 익스텐트, 테이블 레벨 Lock으로 확장되는 것을 말한다. Lock 매니저로 Lock을 관리하는 DBMS에서 메모리 자원의 한계를 극복하기 위해 구현된 기능인데, 낮은 레벨의 Lock을 사용할수록 동시성이 좋지만, 관리해야 할 Lock의 개수가 증가하여 관리해야할 메모리가 늘어나게 되기 때문에 Lock 레벨을 확장하는 것이다. 하지만, 수많은 레코드를 한꺼번에 잠그기 때문에 동시성이 나빠진다. 오라클의 경우, Lock을 로우 속성으로 관리하기에 이러한 현상이 발생하지 않는다.

Database

오라클 MVCC 패턴

MVCC란? 데이터를 변경할 때마다 그 변경사항을 undo 영역에 저장하며, 이후 데이터를 읽다가 쿼리 시작 시점 이후에 변경된 값 발견 시 undo 영역에 저장하였던 정보를 이용하여 쿼리 시작 시점의 일관성 있는 버전(CR Copy)를 생성하고 읽는다. MVCC는 문장수준과 트랜잭션 수준의 읽기 일관성이 존재한다. 문장수준 읽기 일관성 문장수준 읽기 일관성은, 다른 트랜잭션에 의해 데이터의 추가, 변경, 삭제가 발생하더라도 단일 SQL문 내에서 일관성 있게 값을 읽는 것을 이야기함. 일관성의 기준은 쿼리를 시작하였을 때 값을 이야기함. 트랜잭션 수준 읽기 일관성 트랜잭션 수준 읽기 일관성은, 다른 트랜잭션에 의해 데이터의 추가, 변경, 삭제가 발생하더라도 트랜잭션 내에서 일관성 있게 값을 읽는 것이다...

xlwdn98767
'database' 태그의 글 목록