database

카테고리 없음

비관성 동시성 제어 vs 낙관성 동시성 제어

비관성 동시성 제어 vs 낙관성 동시성 제어 동시성 제어 DBMS가 다수의 사용자를 가정하여, 동시에 다중 트랜잭션의 상호 간섭 작용에서 DB를 보호하는 것을 이야기한다. 동시성 제어를 위해 모든 DBMS가 공통적으로 Lock 기능을 제공한다. 비관적 동시성 제어 사용자들이 같은 데이터를 동시에 수정할 것이라 가정하고 데이터를 읽는 시점에 Lock을 걸고 트랜잭션이 완료될 때까지 유지하는 것. select 시점에 Lock을 거므로 자칫 시스템 동시성을 심각학[ 떨어뜨릴 우려가 있음. wait, 또는 nowait 옵션을 함께 사용하는 것이 바람직 낙관적 동시성 제어 사용자들이 같은 데이터를 동시에 수정하지 않을 것이라 가정하고 데이터를 읽는 때는 Lock을 설정하지 않음. 대신 수정 시점에 다른 사용자에 ..

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)