병행제어란, 다중 프로그램의 이점을 활용하여 동시에 여러 개의 트랜잭션을 병행제어할 때, 동시에 실행되는 트랜잭션들이 데이터베이스의 일관성을 파괴하지 않도록 트랜잭션 간의 상호 작용을 제어하는 것
- 데이터베이스의 일관성 유지
- 데이터베이스 공유 최대화
- 시스템 활용도 최대화
- 사용자 응답 시간 최소화
- 단위 시간 당 트랜잭션 처리 건수 최대화
- 같은 데이터에 대해 둘 이상의 트랜잭션이 동시에 갱신할 때, 갱신 결과의 일부가 없어지는 현상
- 하나의 트랜잭션이 여러 데이터 갱신 연산을 수행할 때, 일관성 없는 상태의 데이터베이스에서 데이터를 가져옴으로써 데이터의 불일치가 발생하는 것.
- 동일 트랜잭션에서 동일한 대상을 여러 번 읽을 때.
- 일관성 없는 상태의 데이터베이스란, 읽는 도중에 수정 또는 삭제가 반영되어 값이 변경되는 상황을 말한다.
- 병행 수행되던 둘 이상의 트랜잭션 중 어느 한 트랜잭션에 오류가 발생하여 ROLLBACK 하는 경우 다른 트랜잭션들도 함께 ROLLBACK 되는 현상
- 하나의 트랜잭션 수행이 실패한 후 회복하기 전에 다른 트랜잭션이 실패한 갱신 결과를 참조하는 현상.
- 아직 COMMIT 되지 않은 트랜잭션의 내용을 읽으려고 할 때
- 주요 데이터의 액세스를 상호 배타적으로 하는 것
- 로킹이 되어 있는 데이터에는 다른 트랜잭션이 접근할 수 없음.
- 트랜잭션들이 어떤 로킹 단위를 액세스하기 전에 Lock을 요청해서 Lock이 허락되어야만 그 로킹 단위를 액세스할 수 있도록 하는 기법
- 로킹 단위 : 한 번에 로킹할 수 있는 데이터 크기. 필드, 레코드, 테이블, 파일, 데이터베이스 모두 로킹 단위가 될 수 있다.
- 로킹 단위가 클수록 병행 제어가 단순해지고 관리하기 편하지만 병행성 수준이 낮아진다.
- 로킹 단위가 작을수록 병행 제어가 복잡해지고 오버헤드가 증가하지만, 병행성 수준이 높아지고 데이터베이스 공유도가 높아진다.
- 직렬성 순서를 결정하기 위해 트랜잭션 간의 처리 순서를 미리 선택하는 기법들 중에서 가장 보편적인 방법
- 트랜잭션과 트랜잭션이 읽거나 갱신한 데이터에 대해 트랜잭션이 실행을 시작하기 전에 Time Stamp를 부여하여 부여된 시간에 따라 트랜잭션 작업을 수행하는 기법
- 교착상태가 발생하지 않는다.
- lock을 사용하지 않고 시간을 나눠 사용한다.
- Rollback 발생률이 높고 연쇄 복귀를 초래할 수 있다.
- 병행 수행하고자 하는 대부분의 트랜잭션이 판독 전용(Read Only) 트랜잭션일 경우, 트랜잭션 간의 충돌률이 매우 낮아서 병행제어 기법을 사용하지 않고 실행되어도 이 중의 많은 트랜잭션은 시스템의 상태를 일관성 있게 유지한다는 점을 이용한 기법
- 트랜잭션 수행 동안은 어떠한 검사를 하지 않고, 트랜잭션이 종료된 이후에 일괄적으로 검사하는 방식
- 타임 스탬프의 개념을 이용하는 기법 -> 다중 버전 타임 스탬프 기법
- 갱신될 때마다의 버전을 부여하여 관리
- 충돌이 발생할 경우 연쇄 복귀가 발생할 수 있다.
참고 자료 : 정보처리기사 필기 자료, https://rebro.kr/163, https://itwiki.kr/w/데이터베이스_병행제어