거래 및 동시성 제어 - 데이터베이스 시스템 소개

거래의 I. 개요

1.1 정의

트랜잭션은 사용자 정의 데이터베이스 작업의 순서이며, 이러한 작업을 수행하거나 전체 또는 완전하지, 작업의 불가분 단위
트랜잭션 동시성 제어의 기본 단위는 데이터베이스의 복구 기본 단위입니다, 기본 논리 단위는 논리적 데이터베이스
데이터베이스 복구 메커니즘과 동시성 제어 메커니즘은 데이터베이스 관리 시스템의 중요한 부분입니다
관계형 데이터베이스, 트랜잭션은 SQL 문, SQL 문 또는 전체 프로그램의 집합 일 수있다

--显式定义事务
begin transaction 
SQL 语句1 
……  ……
commit / rollback

/*
commit
    事务正常结束
    提交事务的所有操作(读+更新)
    事务中所有对数据库的更新写回到磁盘上的物理数据库中

rollback
    事务异常终止
    事务运行的过程中发生了故障,不能继续执行
    系统将事务中对数据库的所有已完成的操作全部撤销
    事务滚回到开始时的状态
*/
--将数学课程号由2修改为22
/*
解析:
所涉及的关系:Course和SC,根据参照完整性约束,应将两表中的2都改为22。要将修改两个表的两个SQL语句定义成一个事务。因为DBMS对这两个语句要么都执行,要不都不执行
*/

begin transaction
    update Course set CNO='22' where CNO='2'
    update SC set CNO='2' where CNO='22'
commit

1.2 특징

원자 수가

  • 작업의 논리 단위는 트랜잭션 데이터베이스입니다
  • 트랜잭션의 모든 작업 중 하나를 모두 성공적으로 실행 여부를 실행
  • 트랜잭션이 오류로 인해 중단되면, 회사에 의해 생성 된 효과를 제거하려고 할 것이다, 데이터베이스는 트랜잭션 실행 이전 상태로 복원됩니다

일관성

  • 데이터베이스 트랜잭션의 구현의 결과는 다른 일관성있는 상태로 하나의 일관된 상태에서 전환한다

격리

  • 트랜잭션의 실행은 다른 트랜잭션에 간섭 할 수 없다. 이 성공적으로 제출 될 때까지 여러 트랜잭션의 동시 실행은, 그들은 다른 문제에 보이지 않는, 아무것도 업데이트

휘발성

  • 트랜잭션이 완료되면, 그것은 데이터베이스가 영구적으로 유효합니다 업데이트, 시스템이 실패하더라도, 영구적이어야 데이터베이스에 변경

둘째, 동시성 제어 개요

거래의 동시 실행은 데이터베이스 시스템의 시스템 효율을 향상시킬 수있는 효과적인 방법이지만, 데이터 불일치의 결과로, 트랜잭션 ACID 특성을 손상 될 수 있습니다

2.1 트랜잭션의 동시 실행

(1) 동시 실행 이유

  • 증가 처리량과 자원 활용
  • 대기 시간 단축

2 동시 구현

  • 크로스 동시 모드
  1. 독립형 시스템, 병렬 작업을 차례 크로스 실행 트랜잭션에
  2. 장점 : 프로세서 유휴 시간은 시스템의 효율성을 향상시키기 위해 줄일 수있다
  3. 단점 : 아닌 동시 병행 동작은, 데이터 불일치가 발생할 수있다
  • 동시 모드
  1. 멀티 프로세서 시스템은, 트랜잭션을 실행할 수있는 각각의 프로세서는, 복수의 프로세서와 복수의 트랜잭션 처리가 동시에 병렬 운전 진정한 복수 얻을 수있다
  2. 장점 : 동시성에 가장 좋은 방법
  3. 단점 : 하드웨어 환경에 따라, 또한 데이터 불일치를 생성 할 수 있습니다

2.2 동시 실행 문제 야기

1 변형 손실
2 읽기 "더러운"데이터
3, 비 반복 판독
원인

  • 데이터 판독 트랜잭션 T1 후에 T2는 그 이전과 다른 발견 트랜잭션 T1이 다시 데이터를 판독하여, 트랜잭션을 수정하고있다
  • 트랜잭션 T1이 특정 조건에서 기록 된 특정 데이터를 읽어 후 트랜잭션 T2가이 기록의 일부를 제거, T1이 다시 같은 조건에서 기록 읽기되고 트랜잭션이 어떤 기록이 어떤 것을 발견있다
  • 트랜잭션 T1이 특정 조건에서 기록 된 특정 데이터를 읽어 후 일부 레코드를 T1 트랜잭션 레코드가 동일한 조건에서 다시 읽기, 트랜잭션 T2를 삽입, 그것은 몇 가지 더 기록을 발견했다

miD6sI.png

예 : 항공 예약 시스템 활동 순서
① 티켓 (트랜잭션 T1)는 항공권 A의 밸런스를 독출 16 = A를 제공;
② 티켓 아세테이트 (트랜잭션 T2)를 동일한 항공권 A의 밸런스를 판독 또한 16;
③ 티켓을 판매하는 티켓은, 균형 A를 ← A-1, 그래서 15, 데이터베이스에 기록은 A 조정,
④ 티켓도 티켓을 판매 균형 A를 수정 b를 ← A-를 (1), 15가, 다시 데이터베이스에 쓰기
분명히 두 티켓을 판매 결과, 티켓 데이터베이스는 하나의 균형 절감
이 조건이 데이터베이스의 불일치를 호출을 동시 작업으로 인해
동시 작업의 경우에서, 스케줄링 동작은 두개의 트랜잭션 T2가 랜덤이고, T1을 서열. 예약은 위의 순서대로 수행 한 경우, 트랜잭션 T1의 변경은 손실됩니다. 이유 : 단계 4. 변성 처리 후 처리 T1 T2를 위로 덮고 기록 수정

세 불일치를 생성하면 트랜잭션의 절연을 파괴 전술 동시 작업에 대한 주요 이유입니다. 동시성 제어 동시 작업의 스케줄링을 사용하는 올바른 방법이며, 트랜잭션의 실행 다른 트랜잭션의 간섭없이
봉쇄, 타임 스탬프, 낙관적 관리법, 다중 버전 동시성 제어 : 동시성 주요 기술의 제어

셋째, 봉쇄

차단 데이터 객체 조작하기 전에 그 트랜잭션을 Xianxiang 잠금 시스템은 트랜잭션 데이터 객체에 대한 요청이 트랜잭션이 잠금을 해제하기 전에, 다른 트랜잭션이 데이터 개체를 업데이트 할 수 없습니다, 잠금 일부 제어를 전송

잠금 3.1 기본형

독점 잠금 도 쓰기 잠금 또는 X 잠금으로 알려진, 더하기 X 잠금을 트랜잭션 데이터 오브젝트 (T)가 만 T가 읽고 수정할 수 있습니다 경우, 다른 트랜잭션은 더 이상 읽을 수 있으며, T의 출시 때까지는 A를 수정 에 잠금
공유 잠금 도 S 잠금으로 알려진, 또는 트랜잭션 데이터가 플러스 T의 S 잠금을 반대하는 경우, 다음 T 읽을 수 있지만 A A를 수정할 수 없습니다 트랜잭션이, 다른 한쪽은 거래를 읽은 잠금을 읽고 수정할 수 없습니다, T A는 잠금 프로토콜 2.2의 잠금을 해제 할 때까지

3.2 잠금 프로토콜

잠금 프로토콜 3.2.1

트랜잭션 T는, 트랜잭션이 끝날 때까지 해제되지 않습니다 데이터 객체 R을 수정하기 전에 X 잠금을 늘려야합니다
조치 : 손실을 방지하기 위해 수정 된 잠금 프로토콜 및 트랜잭션이 복구 T에 있는지 확인하기 위해
설명 : 계약의 봉쇄에 경우 그것이 보장 및 비 반복 읽기가 "더러운"데이터를 읽을 수 없도록 데이터가 수정되지 읽기, 잠금이 필요하지 않습니다

3.2.2 두 개의 잠금 프로토콜

거래 T에 잠금 프로토콜에 기초하여 데이터 객체 R 읽기 전에 S 잠금을 추가해야합니다, S 잠금 해제 할 수 있지만 읽은 후
독서의 손실이 잠금 프로토콜의 수정 및 방지 "더러운"조치를 데이터
설명 : 두 개의 잠금 프로토콜에서 S 잠금 장치가 데이터를 읽는 이후에 출시 할 수 있기 때문에, 그것은 반복 읽기를 보장하지 않습니다

3.2.3 세 가지 잠금 프로토콜

거래 T에 잠금 프로토콜에 기초하여 데이터 R 읽기, 트랜잭션이 끝날 때까지 해제되지 않습니다 전에 S 잠금을 추가해야합니다
기능 : 세 잠금 프로토콜의 손실을 방지 더러운 데이터 및 비 반복 읽기 읽기 수정
세 계약의 주요 차이점

  • 어떤 행동을 할 때 잠금을 해제하는 차단 신청해야하고 (잠금 시간 즉, 소유자)
  • 일관성의 정도가 높을 잠금 프로토콜 수준이 높을수록

miDvYF.png

교착 3.3을 라이브 락

3.3.1 라이브 락

또한 기아라고도 트랜잭션 로크를 기다리는되어 무한정 대기 상태 인
제 순서 이러한 문제에 대한 요청 큐 차단, 데이터에 따라, 더 많은 요구가 동일한 데이터 객체를 차단할 때 먼저 제공 올을 라이브 록을 회피 해제되면 잠금을 획득하기 위해 큐에서 객체의 첫 번째 거래의 승인을위한 첫 번째 애플리케이션을 잠글

3.3.2 교착 상태

두 개 이상의 트랜잭션 사이의주기 또는 현상을 기다리는
교착 상태 예방
(1), 한 번 프랑스 봉쇄
한 번 모두가 실제 작업의 실제 구현에 사용되는 모든 데이터 객체를 잠 가야 각 거래 후, 그렇지 않으면 트랜잭션은 아니다 도 모든 데이터 차단하는 실제 행동이었다
문제

  • 잠금 시간 데이터 증가, 시스템의 동시성을 감소
  • 데이터 객체는 트랜잭션을 차단하기 어려운 미리 결정

2, 봉쇄 법의 순서
미리 정의 된 데이터는 주문 봉쇄에 봉쇄하기 위해, 모든 트랜잭션 객체
문제

  • 높은 유지 보수 비용이 매우 많이 데이터베이스 시스템은 데이터 객체를 차단, 데이터 삽입, 삭제 및 기타 작업과 함께 지속적으로 이러한 자원을 유지하기 위해, 변화는 봉쇄하기 위해 매우 어렵다

두 가지 방법이 교착 상태 예방에 효과적이지만 몇 가지 문제가 있지만, 그래서 정말 구현하기가 쉽지 않다. 따라서 교착 상태를 방지하기위한 전략은 데이터베이스의 특성에 매우 적합하지 않습니다, DBMS는 일반적으로 교착 상태를 진단하는 방법을 사용 해제

3.3.3 교착 상태 감지 및 발표

1, 교착 상태 감지
데이터베이스 시스템은 일반적으로 타임 아웃을 사용 또는 대기 거래 방법은 교착 상태도 발견
2, 점유 해제
, 교착에 선택 하나 이상의 트랜잭션을 취소하고 트랜잭션이 보유하는 모든 잠금을 해제 따라서 교착 상태를 해제하는 조건 대기의 순환을 깨는, 그래서 다른 트랜잭션은 계속 실행할 수

넷째, 일정 직렬화 동시

동시 스케줄링 4.1 직렬 일정

4.1.1 시리얼 일정

직렬 일정 트랜잭션 세트 이러한 트랜잭션이 트랜잭션의 각 트랜잭션 (있는 경우) 오직 완전한 종료 후에 시작되는 하나씩 실행을 의미
트랜잭션 세트를 직렬 스케줄은 항상 정확
N 대 거래는, n은있다! 다른 일련 일정이 다른 결과로 이어질 수

4.1.2 동시 예약

사물의 동시 예약 세트는 이러한 거래는 두 개 이상의 트랜잭션이 자신의 실행을 시작했습니다 있고, 이상하지 않은 것을 의미
동시 스케줄링 규칙의 정확성 : 사물의 동시 예약 세트, 올 경우에만 예약 된 실행하는 경우 이때 동일한 일련 스케줄의 하나의 결과는 결과 동시 스케줄링 직렬화 인

4.2 충돌 직렬화

작업을 충돌하는 것은 : 읽기 다른 거래를 참조하고, 동일한 데이터에 대한 작업을 쓰기 작업 및 쓰기

Ri(x)与Wj(x)         /*事务Ti读x,Tj写x,其中i≠j*/
Wi(x)与Wj(x)         /*事务Ti写x,Tj写x,其中i≠j*/

교환 할 수없는 작업 포함 개의 동일한 트랜잭션의 동작다른 트랜잭션 충돌 조작
하면, 'Sc의 수득 다른 작업 스케줄과 충돌하지 않는 두 개의 트랜잭션의 순서를 전환하여 동일한 동작을 보장하는 Sc의 순서 충돌 스케줄을 사우스 캐롤라이나는 '사우스 캐롤라이나 충돌 직렬화 일정을 예약라고, 시리얼입니다. 스케줄링 충돌 직렬화 경우, 직렬화 예약해야합니다
, 충돌 직렬화 일정 충분 조건 직렬화 일정입니다 요구 사항은 아닙니다

다섯, 2 단계 잠금

"2 단계는"두 단계 트랜잭션의 의미를 잠글
첫 번째 단계는 봉쇄, 또한 확장 단계로 알려져를 얻는 것입니다

  • 거래는 데이터 항목에 잠금 장치의 모든 유형에 적용 할 수 있지만, 어떤 잠금을 해제 할 수

두 번째 단계는 수축 단계라고도 봉쇄 해제한다

  • 거래의 모든 유형은 모든 항목에 대한 잠금을 해제 할 수 있지만 모든 잠금을 적용 할 수 없습니다

두 단계 잠금의 정확성

  • 모든 거래는 두 개의 잠금 프로토콜을 준수하는 경우,이 문제에 어떤 동시 스케줄링 정책은 직렬화있다
  • 동시성 제어 프로토콜 잠금 2 단계 충분한 정확성에 대한 조건이 아니라 필요 조건이다. 즉 반드시 모든 거래는 2 단계 잠금을 순종하는 모든 거래는 2 단계 잠금을 순종하면, 이러한 거래의 동시 예약은 동시 일정, 직렬화, 역 직렬화하고,이다

2 단계 잠금과 교착 방법을 방지하는 봉쇄

  • 봉쇄 법, 그렇지 않으면 계속할 수 없습니다, 각 트랜잭션이 한 번에 모든 데이터가있는 잠금을 모두 사용할해야하므로 2 단계 잠금 프로토콜 봉쇄 법 준수를 요구한다
  • 그러나 트랜잭션을 필요로하지 않는 2 단계 잠금 한 번 당신이 원하는 모든 데이터는 모두 잠겨 사용하기 때문에 발생할 수있는 두 개의 잠금 프로토콜 트랜잭션 교착을 준수해야합니다

여섯 멀티 블록 크기

6.1 크기

객체의 블록 크기는 데이터베이스, 테이블, 레코드, 필드, 및 기타 일 수 있으며, 입자 크기라고
동시성 제어 오버 헤드 및 동시 봉쇄 입경 밀접 시스템에 관한 것이다. 차단 된 큰 입경 적은 데이터베이스는 데이터 블록 단위 동시성, 작은 오버 헤드 중 작은 정도가 될 수 있으며, 더 작은 입자 크기를 차단 시스템 동시성의 정도가 높을뿐만 큰 오버
여러 입도 록킹 동시에 다른 트랜잭션 사이즈 선택을 차단하는 복수의 로크 아웃 절차를 지원

  • 종속 데이터 구조 - 멀티 스케일 트리

    데이터 객체는 입도와 트리 구조의 최대 데이터 사이즈를 나타내고, 루트 노드의 관계가 데이터베이스로 구성되며, 데이터는 일반적으로 전체 데이터베이스의 최소 단위이고, 종단 노드

프로토콜 잠금 다중 단위는 다양한 크기의 트리의 각 노드에 대해 독립적 인 잠금을 허용하고, 각 노드에 잠겨 그 후손들이 유사하게 잠금 될 노드를 의미

  • 데이터 객체의 잠금 다중 단위에서 다음과 같은 두 가지 방법으로 차단 될 수있다 명시 적 및 암시 블록 블록
  1. 직접 명시 적으로 봉쇄 봉쇄라는 트랜잭션 데이터 객체에 의해 적용
  2. 상위 노드를 고정함으로써, 하위 오브젝트 인해 차단 내재 블록이라고
  3. 블록 명시 적 및 암시 봉쇄 효과는 동일합니다

또한 블록 명시 조사부 암시 블록 확인 시스템 충돌을 확인하기 위해
여러 방법을 세분화 잠금
확인 록킹 시스템 객체의 데이터

  • 물체의 유무를 명시 적으로 봉쇄와 충돌
  • 명시 대상 블록의 충돌 유무와의 상위 노드
  • 명시 대상 블록의 충돌 유무와의 하위 노드

충돌은 성공을 잠글 수없는 경우

6.2 의도 잠금

그는 고정 노드에 계셨을 때, 먼저 부모 노드 의도 잠금 추가해야
목적을 : 데이터 오브젝트 잠금의 검사 시스템의 효율성을 개선하기 위해
조치를 : 충돌 체크 봉쇄 잠금 장치의 작업 부하를 줄일 수 있습니다. 그냥 하위 노드를 다시 검토 할 필요가 없습니다 하위 노드 호환되지 않는 잠금 장치가 있는지 확인하기 위해이 노드가이 노드의 부모 노드가 호환되지 않는 잠금, 의도 잠금을 추가되었는지 확인
세 가지 의도를 자물쇠

  • 의도 공유 잠금 (로크 인)는 노드 (의도) 자손하려한다는 것을 지시하는 데이터 객체에 대한 IS 잠금 속도가 첨가 된 경우 S 잠금
  • 잠금 IX :이 노드의 후손에 있다는 것을 나타내는 데이터 객체에 추가 한 경우 IX 잠금 (의도) 플러스 X 잠금
  • SIX 자물쇠 경우 데이터 객체 SIX 잠금의 증가는 잠금 플러스 S 플러스 IX 잠금, 즉 도시의 SIX = S + IX

잠금 장치의 강도 : 그것은 다른 잠금 배제의 정도를 의미 대신 약하고 강력한 잠금의 봉쇄에 신청시 거래 안전, 그 반대 고정
봉쇄 및 출시 순서 의도 잠금을

  • 봉쇄를 적용 할 때 우리는 위에서 아래로 순서대로해야한다
  • 순서는 상향식 (bottom-up) 해제 봉쇄해야한다

추천

출처www.cnblogs.com/xxwang1018/p/11546738.html