11장 동시성 제어

11장 동시성 제어 | 데이터베이스 지식 포인트의 조합

11장 동시성 제어

배우다

  • 데이터베이스 동시성 제어 기술의 필요성
  • 라이브락과 데드락의 개념

주인

  • 동시 작업은 수정 손실, 반복 불가능한 읽기 및 "더티" 데이터 읽기 등을 포함하여 데이터 불일치를 유발할 수 있습니다.
  • 차단 유형 및 다양한 블록 유형(X 잠금, S 잠금)의 특성 및 정의, 관련 호환성 제어 매트릭스
  • 블록 계약의 개념
  • 차단 입도의 개념, 다중 입도 차단 방법, 다중 입도 차단 프로토콜의 호환 제어 매트릭스
  • 차단 프로토콜과 데이터 일관성의 관계, 동시 스케줄링의 직렬화 가능성 개념
  • 2단계 잠금 프로토콜과 직렬 가능성의 관계, 2단계 잠금 프로토콜과 교착 상태의 관계

지식 포인트

  • 데이터베이스에서 동시성 제어가 필요한 이유는 무엇입니까? 동시성 제어 기술로 트랜잭션의 어떤 특성을 보장할 수 있습니까?

    • 데이터베이스는 공유 리소스이며 일반적으로 동시에 실행되는 많은 트랜잭션이 있습니다. 여러 트랜잭션이 데이터베이스에 동시에 액세스할 때 동일한 데이터의 동시 읽기 및/또는 수정이 발생합니다. 동시 작업을 제어하지 않으면 잘못된 데이터에 액세스하고 저장하여 데이터베이스의 일관성을 파괴할 수 있습니다. 따라서 데이터베이스 관리 시스템은 동시성 제어 메커니즘을 제공해야 합니다.
    • 동시 제어는 트랜잭션의 [일관성] 및 [격리]를 보장할 수 있습니다.

    동시 작업으로 인해 어떤 유형의 데이터 불일치가 발생할 수 있습니까? 다양한 불일치를 방지할 수 있는 방법은 무엇입니까?

    • 동시 작업으로 인한 데이터 불일치에는 세 가지 유형이 있습니다.
      • 수정 유실(LostUpdate)
        두 트랜잭션 T1과 T2가 동일한 데이터를 읽고 수정 T2가 제출한 결과는 T1이 제출한 결과를 파기(덮어쓰기)하여 T1의 수정이 손실됨.
      • 비반복 읽기(Non-RepeatableRead)
        비반복 읽기는 트랜잭션 T1이 데이터를 읽은 후 트랜잭션 T2가 업데이트 작업을 수행하여 T1이 이전 읽기 결과를 재현할 수 없도록 하는 것을 의미합니다. 반복불가 읽기는 3가지 경우가 있다 1. 트랜잭션 T1이 어떤 데이터를 읽은 후 트랜잭션 T2가 이를 수정한다 트랜잭션 T1이 데이터를 다시 읽고 수정하면 이전과 다른 값을 얻는다 2. 트랜잭션 T1이 읽은 후에서 변경된다 트랜잭션 T2는 데이터베이스의 일부 데이터 레코드 중 일부를 삭제하고 T1이 동일한 조건에 따라 데이터를 다시 읽으면 일부 레코드가 사라진 것을 발견합니다 3. 트랜잭션 T1은 하나의 조건에 따라 데이터베이스에서 일부 레코드를 읽습니다. 데이터가 기록되고 트랜잭션 T2는 일부 레코드를 삽입합니다.T1이 동일한 조건에 따라 데이터를 다시 읽을 때 더 많은 레코드 후에 두 종류의 반복 불가능한 읽기를 때때로 팬텀 행이라고 합니다.
      • "dirty" 데이터 읽기(DirtyRead)
        "dirty" 데이터 읽기는 트랜잭션 T1이 특정 데이터를 수정하여 디스크에 다시 쓰는 것을 의미합니다. 트랜잭션 T2가 동일한 데이터를 읽은 후 어떤 이유로 T1이 취소되고 T1은 이때 오래된 데이터가 원래 값으로 복원되면 T2가 읽은 데이터는 데이터베이스의 데이터와 일치하지 않으며 T2가 읽은 데이터는 "더티" 데이터, 즉 잘못된 데이터입니다.
    • 불일치를 피하는 방법과 기술은 동시성 제어입니다. 일반적으로 사용되는 동시성 제어 기술로는 차단 기술, 타임스탬프 방식, 낙관적 제어 방식, 다중 버전 동시성 제어 방식 등이 있습니다.

    봉쇄 란 무엇입니까? 기본 블록 유형은 무엇입니까? 그 의미에 대해 토론하십시오.

    • 차단이란 트랜잭션 T가 먼저 테이블이나 레코드와 같은 데이터 개체에 대해 작업하기 전에 잠금 요청을 시스템에 보내는 것을 의미합니다. 잠금 후 트랜잭션 T는 데이터 개체에 대한 특정 제어 권한을 가지며 트랜잭션 T가 잠금을 해제하기 전에는 다른 트랜잭션이 이 데이터 개체를 업데이트할 수 없습니다.
    • 차단에는 배타적 잠금(X 잠금이라고 함)과 공유 잠금(S 잠금이라고 함)의 두 가지 기본 유형이 있습니다.
    • 독점 잠금은 쓰기 잠금이라고도 합니다. 트랜잭션 T가 데이터 객체 A에 X 잠금을 추가하면 T만이 A를 읽고 수정할 수 있으며 T가 A에 대한 잠금을 해제할 때까지 다른 트랜잭션은 A에 어떤 유형의 잠금도 추가할 수 없습니다. 이렇게 하면 T가 A에 대한 잠금을 해제할 때까지 다른 트랜잭션이 더 이상 A를 읽고 수정할 수 없습니다.
    • 공유 잠금은 읽기 잠금이라고도 합니다. 트랜잭션 T가 데이터 개체 A에 S 잠금을 추가하면 트랜잭션 T는 A를 읽을 수 있지만 A를 수정할 수는 없습니다. 다른 트랜잭션은 A에 S 잠금만 추가할 수 있지만 T가 A에 대한 S 잠금을 해제할 때까지 X 잠금을 추가할 수 없습니다. 이렇게 하면 다른 트랜잭션이 A를 읽을 수 있지만 T가 A에 대한 S 잠금을 해제할 때까지 A를 변경할 수 없습니다.

    데이터 일관성을 보장하기 위해 차단 메커니즘을 사용하는 방법

    • DBMS는 데이터를 읽고 쓰기 전에 먼저 데이터에 대한 차단 작업을 수행합니다.

      이미지

    라이브락이란? 라이브락의 원인과 해결책

    • 이미지
    • livelock의 원인: 일련의 봉쇄가 순서대로 실행되지 않으면 일부 트랜잭션이 봉쇄를 무한정 대기하여 livelock이 발생할 수 있습니다.
    • 라이브락을 피하는 쉬운 방법은 선착순 정책을 사용하는 것입니다. 여러 트랜잭션이 동일한 데이터 개체에 대한 차단을 요청하면 차단 하위 시스템은 차단 요청된 순서대로 트랜잭션을 대기열에 넣습니다. 데이터 개체에 대한 잠금이 해제되면 응용 프로그램 대기열의 첫 번째 트랜잭션이 승인됩니다. 자물쇠를 얻습니다.

    교착 상태는 무엇입니까? 교착 상태를 방지하는 몇 가지 방법을 알려주십시오.

    이미지

    • 데이터베이스에서 교착 상태의 원인은 둘 이상의 트랜잭션이 일부 데이터 개체를 차단한 다음 둘 다 다른 트랜잭션에 의해 차단된 데이터를 잠그도록 요청하여 데드 대기 상태가 되기 때문입니다. 교착 상태의 발생을 방지하는 것은 실제로 교착 상태의 조건을 파괴하는 것입니다. 일반적으로 교착 상태를 방지하는 두 가지 방법이 있습니다.
      • 일회성 차단 방법은
        각 트랜잭션이 한 번에 사용할 모든 데이터를 잠그지 않으면 계속 실행할 수 없습니다.
      • 순차 차단 방법
        데이터 개체에 대한 차단 순서를 미리 정의하고 모든 트랜잭션이 이 순서로 차단됩니다.

    교착 상태를 감지하는 방법과 교착 상태가 발생했을 때 교착 상태를 제거하는 방법을 알려주십시오.

    • 데이터베이스 시스템은 일반적으로 교착 상태가 발생하도록 허용하는 방법을 채택하고 있으며 DBMS는 교착 상태를 감지하고 해제합니다.
    • DBMS에서 교착 상태를 진단하는 방법은 운영체제와 유사하며 일반적으로 타임아웃 방법이나 트랜잭션 대기 다이어그램 방법을 사용한다.
    • 타임아웃 방식: 트랜잭션의 대기 시간이 지정된 시간 제한을 초과하면 교착 상태가 발생한 것으로 간주합니다.
    • DBMS 동시성 제어 하위 시스템이 교착 상태를 감지한 후 제거를 시도해야 합니다. 일반적인 방법은 교착 상태 비용이 가장 적은 트랜잭션을 선택하고 실행 취소한 다음 이 트랜잭션이 보유한 모든 잠금을 해제하여 다른 트랜잭션이 계속 실행될 수 있도록 하는 것입니다.

    어떤 종류의 동시 스케줄링이 올바른 스케줄링입니까?

    • 직렬화 가능 일정이 올바른 일정입니다.
    • 직렬화 가능 스케줄링의 정의: 여러 트랜잭션의 동시 실행은 특정 순서로 직렬로 실행될 때와 결과가 동일한 경우에만 정확하며, 이 스케줄링 전략을 직렬화 맞춤형 스케줄링이라고 합니다.
  • 포괄적인 질문

    이미지

    이미지

    이미지

    이미지

  • 이미지

  • 증거

    이미지

    이미지

  • 이미지

  • 이미지

  • 이미지

    의도 잠금을 도입하는 이유는 무엇입니까? 의도 잠금의 의미는 무엇입니까?

    • 차단 하위 시스템의 효율성을 개선하기 위해 의도 잠금이 도입되었습니다.
    • 그 이유는 다음과 같습니다. 다중 단위 잠금 방법에서 데이터 개체는 명시적 및 암시적 두 가지 방법으로 잠글 수 있습니다. 따라서 시스템이 데이터 개체를 잠글 때 데이터 개체에 충돌하는 (명시적 및 암시적) 잠금이 있는지 확인해야 할 뿐만 아니라 모든 상위 수준 노드와 모든 하위 수준 노드를 확인해야 합니다. . 이러한 노드에 대한 봉쇄(명시적 및 암시적)와 충돌합니다. 분명히 이러한 검사는 비효율적입니다. 이를 위해 의도 잠금이 도입되었습니다.
    • 인텐션 락의 의미는 어떤 노드를 잠글 때 먼저 상위 노드에 인텐션 락을 추가해야 한다는 것입니다. Intent Lock 도입 후 시스템은 특정 데이터 객체를 잠글 때 다음 수준 노드를 하나씩 차단하여 충돌을 확인할 필요가 없습니다.
  • 일반적으로 사용되는 의도 잠금: IS 잠금, IX 잠금, SIX 잠금을 설명하고 이러한 잠금의 호환성 매트릭스를 제공합니다.

    • IS 잠금: 데이터 개체에 IS 잠금이 추가되면 해당 하위 노드가 S 잠금을 추가하려는 의도(의도)를 의미합니다. 예를 들어 튜플에 S 잠금을 추가하려면 먼저 관계 및 데이터베이스에 IS 잠금을 추가해야 합니다.

    • IX 잠금: 데이터 개체에 IX 잠금이 추가되면 해당 하위 노드가 X 잠금을 추가하려는 의도(의도)를 의미합니다. 예를 들어 튜플에 X 잠금을 추가하려면 먼저 관계와 데이터베이스에 IX 잠금을 추가해야 합니다.

    • SIX 잠금: 데이터 개체에 SIX 잠금이 추가되면 SIX 잠금이 추가되고 IX 잠금이 추가됨을 의미합니다. 즉, SIX = S + IX입니다.

    • 호환성 매트릭스

      이미지

다시 채우다

    • 2단계 잠금 프로토콜의 개념을 설명하려고 합니다.

      • 2단계 잠금 프로토콜은 모든 트랜잭션이 2단계로 데이터 항목을 잠그고 잠금 해제해야 함을 의미합니다.
        • 데이터를 읽고 쓰기 전에 먼저 데이터 차단을 신청하고 획득해야 합니다.
        • 잠금을 해제한 후에는 트랜잭션이 다른 잠금을 적용하거나 획득하지 않습니다.
      • "두 단계"는 트랜잭션이 두 단계로 나뉜다는 것을 의미합니다.
        • 첫 번째 단계는 확장 단계라고도 하는 게인 블록입니다. 이 단계에서 트랜잭션은 모든 데이터 항목에 대해 모든 유형의 잠금을 적용할 수 있지만 잠금을 해제할 수는 없습니다.
        • 두 번째 단계는 수축 단계라고도 하는 봉쇄 해제입니다. 이 단계에서 트랜잭션은 획득한 잠금을 해제하지만 더 이상 잠금을 적용할 수 없습니다.
    • 서로 다른 잠금 프로토콜과 시스템의 일관성 수준 사이의 관계는 무엇입니까?

      • 서로 다른 차단 프로토콜은 서로 다른 일관성 수준에 해당합니다.
      • 첫 번째 수준의 잠금 프로토콜은 수정 사항 손실을 방지하고 트랜잭션 T가 복구 가능함을 보장합니다. 첫 번째 수준 차단 프로토콜에서는 읽기 데이터에 S 잠금이 추가되지 않으므로 반복 읽기를 보장할 수 없으며 "더티" 데이터는 읽지 않습니다.
      • 수정 손실 방지 외에도 두 번째 수준 잠금 프로토콜은 "더티" 데이터 읽기를 추가로 방지할 수 있습니다. 2단계 잠금 프로토콜에서는 데이터를 읽은 직후 S 잠금이 해제되기 때문에 반복 읽기를 보장할 수 없습니다.
      • 3단계 차단 프로토콜에서는 데이터를 읽든 쓰든 잠금이 길어집니다. 즉, 트랜잭션이 끝날 때까지 잠금이 해제되지 않습니다. 따라서 "더티" 데이터의 수정 및 비읽기 손실을 방지하는 것 외에도 3단계 차단 프로토콜은 반복 불가능한 읽기를 추가로 방지합니다.
    • 차단 프로토콜이란 무엇입니까? 다양한 수준의 차단 프로토콜 간의 주요 차이점은 무엇입니까?

      • 잠금 기술을 사용하여 데이터를 잠그는 경우 일부 규칙에 동의해야 합니다. 예를 들어 X 잠금과 S 잠금을 사용하여 데이터 개체를 잠그는 경우 X 잠금 또는 S 잠금을 적용할 시기와 잠금을 해제할 시기 등을 합의해야 합니다. 이러한 계약 또는 규칙을 잠금 프로토콜이라고 합니다. 차단 방법에 대해 서로 다른 규칙이 합의되고 다양한 차단 합의가 형성됩니다. "소개"에서 소개된 3단계 차단 프로토콜과 같은 다양한 수준의 차단 프로토콜은 3단계 프로토콜의 주요 차이점은 차단을 적용해야 하는 작업, 차단을 적용할 시기 및 잠금 해제 시기입니다. (즉, 잠금을 유지하는 시간).
      • 1단계 차단 프로토콜: 트랜잭션 T가 데이터 R을 수정하기 전에 먼저 X 잠금을 추가해야 하며 트랜잭션이 끝날 때까지 해제되지 않습니다.
      • 2단계 차단 프로토콜: 1단계 차단 프로토콜과 트랜잭션 T는 데이터 R을 읽기 전에 데이터에 S 잠금을 추가하고 읽은 후 S 잠금을 해제해야 합니다.
      • 3단계 차단 프로토콜: 1단계 차단 프로토콜과 트랜잭션 T는 데이터 R을 읽기 전에 데이터에 S 잠금을 추가해야 하며 트랜잭션이 끝날 때까지 해제되지 않습니다.
    • 의도 잠금에 SIX 잠금이 있지만 XIS 잠금이 없는 이유

      이미지

    • 무결성 제약 조건이 여러 트랜잭션을 처리할 때 데이터베이스가 일관된 상태에 있도록 보장할 수 있는지 여부

      이미지

    • 포괄적인 질문

      이미지

      이미지

    • 한 사용자의 작업이 다른 사용자에게 부당한 영향을 미치지 않도록 [동시 제어]

    • [차단] 기술은 일반적으로 동시 작업으로 인한 데이터 불일치 문제를 해결하는 데 사용됩니다.

    • 동시 작업으로 인해 발생하지 않는 다음 문제는 [교착 상태]입니다.

    • DBMS는 일반적으로 스케줄링의 정확성을 보장하기 위해 [차단] 방법을 채택합니다.

    • 트랜잭션 T가 데이터 R을 수정하기 전에 먼저 X 잠금을 추가해야 하며 트랜잭션이 끝날 때까지 해제되지 않습니다. 이것이 [레벨 1 차단 프로토콜]입니다.

    • 트랜잭션 T가 데이터 항목 Q에 대한 배타적 잠금을 획득하면 T는 Q를 읽고 쓸 수 있습니다[읽기 및 쓰기 모두 가능].

    • 트랜잭션 T1과 T2가 데이터베이스의 데이터 A에서 작동한다고 가정하면 다음과 같은 상황이 있을 수 있으며 충돌 작업이 발생하지 않습니다[T1이 A를 읽고 T2도 A를 읽음]

    • 데이터베이스의 동일한 데이터에 대해 동시에 작동하는 두 개의 트랜잭션이 있는 경우 충돌을 일으키지 않는 작업은 [both are SELECT]입니다.

    • 데이터베이스 시스템에서 교착 상태는 [트랜잭션 실패]입니다.

Supongo que te gusta

Origin blog.csdn.net/m0_53870075/article/details/124426782
Recomendado
Clasificación