Database

Database

오라클 MVCC 패턴

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

Database

select for update 문

Select for update 한 트랜잭션 내에서 나중에 변경할 목적으로 데이터를 읽을 때 사용한다. 기본적으로 실행하면 조회할 데이터의 Lock을 얻지 못할 경우 얻을 때까지 무작정 기다린다. 선택된 레코드들에 대해 베타적인 Lock을 커밋할 때까지 적용한다. 데이터의 일관성을 보장하기 위해 사용한다. 예시 declare l_sal number; begin select sal into l_sal from emp where empno = 7900 for update; ... update emp set sal = l_sal + 100 where empno = 7900; commit; end; nowait select for update 뒤에 nowait를 지정하면 select할 데이터의 Lock을 얻을 ..

Database

데이터베이스 교착상태

데이터베이스 교착상태(DeadLock) 교착상태 트랜잭션 1이 쿼리 1을 수행하여 d2을 작업한 후, 쿼리 2를 통해 d2 작업하려 할 때 트랜잭션 2의 쿼리 1이 d2를 작업하고 쿼리 2가 d1을 작업하려하면 서로 자원을 요청하였으나, 트랜잭션 1은 d2의 lock을 할당받지 못해 d1의 lock을 해제하지 않고, 트랜잭션2는 d1의 lock을 받지 못하여 d2의 lock을 해제할 수 없을 때 나타난다. 교착상태 해소 오라클의 경우, 교착상태 발생 시 dbms가 둘 중 한 세션에 에러를 발생시킴으로써 교착상태를 해소시킨다. 예방 방법 SQL 튜닝을 통해 I/O를 줄임으로써 수행 시간을 단축하면, Lock 점유 시간이 줄면서 Lock 경합과 교착상태 발생 가능성도 줄어든다.

Database

With 구문

With 구문 With란 미리 뷰를 선언해 둠으로써 추후에 계속 재사용할 수 있도록 하는 것. With절을 한 번만 참조 시 Inline으로 수행되지만 materialize 힌트를 사용해 Material 방식으로 사용할 수도 있다. with temp as ( select /*+ materialize */ ... ) Material 방식 내부적으로 임시 테이블을 생성함으로써 반복 재사용하는 것. Material 방식으로 선언된 임시 데이터는 영구적인 오브젝트가 아니며, With 절을 선언한 SQL문이 수행되는 동안 만 유지된다. 배치 프로그램에서 특정 데이터 집합을 반복적으로 사용하거나, 전체 처리 흐름을 단순화시킬 목적으로 임시 테이블을 활용하는 경우가 있는데, 이 방식을 사용하면 새로운 임시 테이블을 ..

Database

트랜잭션 고립화 레벨

낮은 단계의 트랜잭션 고립화 수준 사용 시 발생하는 현상 Dirty Read 트랜잭션이 rollback하였음에도 다른 트랜잭션이 rollback되기 이전의 데이터를 갖고 있는 경우 → 아직 커밋되지 않은 데이터를 다른 트랜잭션이 읽을 수 있도록 허용할 때 발생(오라클에선 해당 문제 발생 x) Non-Repeatable Read 트랜잭션이 수행되는 동안 다른 트랜잭션에 의해 값이 변경, 또는 삭제되어(update/delete) 데이터의 일관성이 보장되지 않는 현상 → 트랜잭션을 수행하는 동안 두 쿼리의 결과가 상이하게 나타나 비일관성이 발생하는 것. Phantom Read 트랜잭션 수행 중, 다른 트랜잭션에 의해 데이터가 추가되고 다시 읽었을 때 유령 레코드가 발생하는 현상 트랜잭션 수준 읽기 일관성 문장..

Database

데이터베이스 병렬처리

병렬처리 배치 프로그램 주로 대용량 데이터 처리 일련의 작업을 하나의 작업 단위로 묶어서 일괄 처리 정기적으로 반복 실행되거나 사전에 정의해 둔 조건을 충족할 때 자동 실행됨. OTLP, DW/OLAP 시스템 모두에서 활용한다. 스타일 절차형으로 작성된 프로그램 SQL 결과집합을 루프 내에서 한건씩 Fetch 하면서 또 다른 SQL을 반복해서 수행하는 형태를 이야기함. → 인덱스 구성 중요 One SQL 위주로 작성된 프로그램 튜닝 전체 처리속도 최적화를 목표로 튜닝하여야함. 튜닝 대상 선정 시 개별 서비스, 또는 프로그램 수행시간 단축보다 전체 프로세스 수행시간을 단축하는 데 더 큰 목표를 두어야함. 필요 이상의 병렬도 지정 x 배치 윈도우를 조절하여 프로그램 수행 시간대를 적절히 분산하면 개별 프로그..

xlwdn98767
'Database' 카테고리의 글 목록 (2 Page)