worldint
mathengi
worldint
전체 방문자
오늘
어제
  • 분류 전체보기 (152)
    • infra, cloud (4)
      • aws (4)
    • TIL,WIL(일간,주간 회고) (57)
    • 컴퓨터 공학 (5)
      • 정보통신 (3)
      • 컴퓨터 구조 (2)
    • Math (1)
      • linear algebra (0)
      • 명제와 집합 (1)
    • Operating System (8)
      • Linux Ubuntu (1)
    • programming (66)
      • c , c++ (9)
      • c# (0)
      • java (2)
      • javascript (14)
      • Python (4)
      • github (1)
      • programing terms (12)
      • html, css (2)
      • docker (3)
      • algorithm_datastructure (5)
      • database (11)
      • flutter(dart) (2)
    • 항해99 부트캠프 (7)
      • 사전교육 (7)
    • 보안관련 (1)

블로그 메뉴

    공지사항

    인기 글

    태그

    • CloudFront
    • ci/cd
    • nodejs
    • Javascript
    • db데드락
    • Blue/Green
    • EC2
    • docker
    • ec2 #코드디플로이 #리눅스
    • 디비데드락
    • AWS
    • MONGOOSE
    • NVM
    • MongoDB
    • NoSQL
    • flutter #provider #error
    • node

    최근 댓글

    최근 글

    티스토리

    hELLO · Designed By 정상우.
    worldint

    mathengi

    programming/database

    데이터베이스 Lock의 종류

    2024. 10. 26. 15:58

     

    Lock 이란

    여러 커넥션에서 동시에 동일한 자원을 요청할 경우

    순서대로 하나의 커넥션만 변경할 수 있게 해주는 기능

    동시성을 제어하기 위한 기능

     

     

    Lock의 종류

    1. Shared Lock (공유 락)

    • 특징: 여러 트랜잭션이 동시에 특정 데이터(주로 읽기 작업)를 공유할 수 있도록 허용하는 Lock입니다.
    • 용도: 데이터를 읽기 위해 사용되며, 다른 트랜잭션이 해당 데이터에 대해 쓰기 잠금을 걸 수 없도록 합니다.
    • 장점: 여러 트랜잭션이 동시에 데이터를 읽을 수 있기 때문에 읽기 작업의 효율성을 높일 수 있습니다.
    • 단점: 쓰기 작업이 지연될 수 있습니다.

    2. Exclusive Lock (배타 락)

    • 특징: 한 트랜잭션만 특정 데이터에 접근할 수 있도록 허용하는 Lock입니다. 주로 쓰기 작업을 위해 사용됩니다.
    • 용도: 데이터를 수정하거나 삽입할 때 사용되며, 다른 트랜잭션은 해당 데이터에 대해 접근할 수 없습니다.
    • 장점: 데이터 수정 중에 일관성을 유지할 수 있습니다.
    • 단점: 다른 트랜잭션이 해당 데이터에 접근할 수 없어 대기 시간이 증가할 수 있습니다.

    3. Intent Lock (의도 락)

    • 특징: 테이블이나 페이지 수준에서 락이 필요하다는 것을 나타내기 위해 사용하는 Lock입니다.
      공유 락 또는 배타 락을 걸기 전에, 데이터베이스 엔진은 Intent Lock을 먼저 사용하여 의도를 표시합니다.
    • 용도: 계층적인 락 관리를 위해 사용되며, 상위 객체에 락을 걸기 전에 하위 객체의 락 설정을 표시하기 위해 사용됩니다.
    • 장점: 데이터베이스 엔진의 락 관리를 간소화하고 Deadlock을 방지하는 데 도움을 줍니다.
    • 단점: 추가적인 락을 관리해야 하므로 약간의 오버헤드가 있을 수 있습니다.
    • 추가 설명: A,B 사용자가 있음,
      A가 특정 row를 변경하고 있을때,
      B가 그 테이블의 스키마를 변경하려고 할 때 B가 모든 로우에 락이 걸려있나를 확인 하면 비효율적이니
      데이터베이스가 그 row의 상위 객체(페이지,테이블 등) 들에 대해서 Lock을 거는것이 intent lock이다

    4. Update Lock

    • 특징: 공유 락과 배타 락의 중간 성격을 갖는 락입니다. 처음에는 데이터를 읽기 위해 공유 락처럼 작동하지만, 실제로 데이터를 수정하기 전에 배타 락으로 전환됩니다.
    • 용도: 교착 상태(Deadlock)를 방지하기 위해 사용됩니다. 일반적으로 데이터의 수정이 필요할 때 데이터 읽기와 동시에 수정 작업이 예정되어 있을 경우 사용됩니다.
    • 장점: Deadlock 발생 가능성을 줄일 수 있습니다.
    • 단점: 배타 락과 공유 락의 단점을 동시에 가질 수 있습니다.

    5. Row-Level Lock (행 단위 락)

    • 특징: 테이블의 개별 행에 대해 Lock을 거는 방식입니다.
    • 용도: 특정한 행만 수정하거나 읽을 필요가 있을 때 사용합니다.
    • 장점: 병행성을 높일 수 있어 여러 트랜잭션이 동시에 서로 다른 행을 처리할 수 있습니다.
    • 단점: 락의 수가 많아질 경우 락 관리 오버헤드가 커질 수 있습니다.

    6. Table-Level Lock (테이블 단위 락)

    • 특징: 테이블 전체에 대해 Lock을 거는 방식입니다.
    • 용도: 대규모의 변경 작업을 수행할 때 사용되며, 트랜잭션 충돌을 방지하기 위해 사용합니다.
    • 장점: 락 관리가 간단하며, 전체 테이블에 대한 일관성을 보장할 수 있습니다.
    • 단점: 여러 트랜잭션이 동시에 작업할 수 없으므로 병행성이 낮아집니다.

    7. Page-Level Lock (페이지 단위 락)

    • 특징: 데이터를 페이지 단위로 묶어서 락을 거는 방식입니다. 페이지는 보통 여러 개의 행으로 구성됩니다.
    • 용도: 테이블의 특정 부분만 락을 걸고자 할 때 사용됩니다.
    • 장점: 행 단위 락보다는 오버헤드가 낮고, 테이블 단위 락보다는 병행성을 높일 수 있습니다.
    • 단점: 병행성과 락 오버헤드 사이의 균형을 맞추기 어렵습니다.

    8. Deadlock과 Lock Escalation

    • Deadlock: 두 개 이상의 트랜잭션이 서로의 락이 풀리기를 기다리면서 무한 대기 상태에 빠지는 것을 의미합니다. 이를 방지하기 위해 여러 가지 전략이 사용되며, 데이터베이스 엔진이 자동으로 교착 상태를 감지하고 트랜잭션을 중단시킬 수 있습니다.
    • Lock Escalation: 데이터베이스 시스템에서 너무 많은 작은 단위의 락이 걸리면 락 관리를 단순화하기 위해 더 큰 단위의 락으로 승격시키는 것을 의미합니다. 예를 들어, 여러 개의 Row-Level Lock을 하나의 Table-Level Lock으로 승격시킬 수 있습니다.

    'programming > database' 카테고리의 다른 글

    데이터베이스 파티셔닝  (1) 2024.11.07
    데이터베이스 인덱스  (0) 2024.10.26
    데이터베이스 정규화  (0) 2024.10.26
    디비 데드락  (0) 2024.10.19
    [mongodb] mongoose Index 관련  (0) 2024.01.24
      'programming/database' 카테고리의 다른 글
      • 데이터베이스 파티셔닝
      • 데이터베이스 인덱스
      • 데이터베이스 정규화
      • 디비 데드락
      worldint
      worldint
      공부한 내용들, 트러블 슈팅, 아티클 번역 등등 올리는 블로그입니다

      티스토리툴바