ACID 및 데이터베이스 트랜잭션은 어떻게 작동합니까?


161

ACID와 데이터베이스 트랜잭션의 관계는 무엇입니까?

ACID는 데이터베이스 트랜잭션을 제공합니까, 아니면 같은 것입니까?

누군가이 주제를 밝힐 수 있을까요?

답변:


320

ACID 는 데이터베이스를 수정할 때 적용 할 속성 집합입니다.

  • 원 자성
  • 일관성
  • 격리
  • 내구성

트랜잭션은 일부 ACID 속성을 달성하는 데 사용되는 일련의 관련 변경 사항입니다. 트랜잭션은 ACID 속성을 달성하기위한 도구입니다.

원 자성이란 모든 트랜잭션이 발생하거나 전혀 수행되지 않음을 보증 할 수 있음을 의미합니다. 하나의 단일 장치로 또는 전체적으로 또는 복잡한 형태로 복잡한 작업을 수행 할 수 있으며 충돌, 정전, 오류 또는 기타 다른 작업을 수행하면 관련 변경 중 일부만 발생한 상태가 될 수 없습니다.

일관성은 데이터의 일관성을 보장한다는 것을 의미합니다. 관련 데이터에 대한 제약 조건 중 어느 것도 위반되지 않습니다.

격리는 한 트랜잭션이 아직 완료되지 않은 다른 트랜잭션에서 데이터를 읽을 수 없음을 의미합니다. 두 개의 트랜잭션이 동시에 실행되는 경우 각 트랜잭션은 순차적으로 실행중인 것처럼 세상을보고 다른 트랜잭션이 작성한 데이터를 읽어야하는 경우 다른 트랜잭션이 완료 될 때까지 기다려야합니다.

내구성은 트랜잭션이 완료되면 모든 변경 사항이 내구성있는 매체 (예 : 하드 디스크)에 기록되고 트랜잭션이 완료된 사실도 기록됨을 보장합니다.

따라서 트랜잭션은 이러한 속성을 보장하는 메커니즘입니다. 그것들은 전체적으로 하나의 작업 그룹이 원자적일 수 있고 일관된 결과를 생성하며 다른 작업과 분리되고 지속적으로 기록 될 수 있도록 관련 작업을 함께 그룹화하는 방법입니다.


6
"일관성이란 데이터의 일관성을 보장한다는 의미이며, 관련 데이터에 대한 제약 조건을 위반하지 않습니다."라고 말합니다. 제약 조건에 의해 데이터베이스에 정의 된 제약 조건 (예 : 점검 제약 조건)을 의미하는 경우 트랜잭션 관리는 이러한 제약 조건을 위반하지 않도록 어떻게해야합니까? 그들은 항상 강제하지 않습니까? ACID의 C는 다른 의미를 가져야합니다.
Marc Rochkind

20
@MarcRochkind 트랜잭션을 사용하면 트랜잭션 내의 개별 작업이 일관성 제약 조건을 위반하더라도 일관성 검사를 적용 할 수 있습니다. 예를 들어 이중 입력 부기 시스템을 업데이트하는 경우 여러 계정에서 차변을 인출하고 동시에 여러 계정으로 입금해야 할 수도 있습니다. 트랜잭션이 없으면 모든 명령문 이후에 제한 조건을 점검하고 개별 명령문이 일관성을 유지하지 않기 때문에 실패합니다. 트랜잭션을 사용하면 개별 명령문이 일관성을 유지하지 않지만 트랜잭션 전체가 수행됩니다.
Brian Campbell

1
" 다른 사람이 쓴 데이터를 읽어야하는 경우, 다른 사람이 끝날 때까지 기다려야 합니다."-전적으로 사실이 아닙니다. 첫 번째 트랜잭션은 해당 데이터를 읽을 수 있으며 두 번째 트랜잭션이 시작되기 전의 상태를 볼 수 있습니다.
a_horse_with_no_name

1
@BrianCampbell 1) 일관성은 트랜잭션이 끝날 때 UNIQUE, FOREIGN KEY와 같은 "확인 제약 조건"뿐만 아니라 유효한 상태 (응용 프로그램의 비즈니스 논리 / 요구 사항에 따라)입니까? 2) 원 자성 및 / 또는 격리만으로는 일관성을 보장하지 않습니까? 일관성을 필수 속성으로 명시 적으로 언급해야합니까?
user104309

1
@a_horse_with_no_name 당신은 OCC (Optimistic Concurrency Control) v / s PCC (Pessimistic)에 대해 이야기하고 있습니다. 두 가지 모두 ACID 호환 데이터베이스 시스템에서 구현할 수 있으며 일관성 또는 고 가용성을 원하는지 여부에 따라 다릅니다.
Siddhartha

37

ACID는 모든 트랜잭션 처리 엔진의 바람직한 속성입니다.

DBMS는 (아주 좋은 경우) 일반적으로 이러한 속성을 노출 시키지는 않지만 일반적으로 매우 광범위하게 노출되는 특정 종류의 트랜잭션 처리 엔진입니다.

그러나 이러한 속성을 노출 할 수있는 다른 엔진이 있습니다. 예전에는 "TP 모니터"라고 불렸던 일종의 소프트웨어 (현재는 웹 서버와 동등한 기능)입니다.

이러한 TP 모니터는 DBMS 이외의 리소스 (예 : 프린터)에 액세스 할 수 있으며 사용자에 대한 ACID를 계속 보장합니다. 프린터가 트랜잭션에 관여 할 때 ACID가 무엇을 의미하는지에 대한 예는 다음과 같습니다.

  • 원 자성 : 전체 문서가 인쇄되거나 전혀 인쇄되지 않음
  • 일관성 : 트랜잭션 끝에서 용지 공급이 페이지 상단에 위치합니다.
  • 격리 : 인쇄하는 동안 두 문서가 섞이지 않습니다
  • 내구성 : 프린터는 빈 카트리지로 "인쇄"되지 않았 음을 보증 할 수 있습니다.

3
간결한 프린터 예.
Lakesare는

2
좋은 예입니다. 그래도 "일관성"부분을 이해하지 못합니다. 제 생각에는 더 좋은 예는 "프린터는 10 인치보다 큰 용지를 받아들이지 않습니다."입니다.
skeller88

편집- "10 인치보다 넓은 용지"
skeller88

1
나는 약간의 스트레칭임을 인정한다. 그러나 "일관성"은 데이터에 관한 것이며 프린터는 데이터 장치가 아니기 때문에 더 좋은 예를 찾기가 어렵습니다.
Erwin Smout

1
프린터에는 문서의 페이지 수가 현재 용지 공급 장치에있는 것으로 알려진 용지 수보다 많으면 인쇄를 시작하지 못하게하는 기능이 있습니다. 당신은 여기에 의견을 말하는 많은 사람들에게 문제가 있음을 알 수 있습니다. 당신은 "프린터"를 언급하고 그들은 거실 전체를 채우는 고급 전문가 용 기기가 아니라 홈 데스크에있는 멍청한 직렬 스트리밍 기기만을 본다.
Erwin Smout

21

좀 더 설명하기 쉽게 프린터 예제를 수정했습니다.

내용이 2 페이지 인 1 개의 문서가 프린터로 전송되었습니다.

거래 -프린터로 전송 된 문서

  • 원 자성 -프린터가 문서 2 페이지를 인쇄하거나 인쇄하지 않음
  • 일관성 -프린터가 반 페이지를 인쇄하고 페이지가 멈 춥니 다. 프린터가 다시 시작되고 모든 내용이 포함 된 2 페이지를 인쇄합니다
  • 격리 -진행중인 인쇄물이 너무 많으면 프린터가 문서의 올바른 내용을 인쇄합니다.
  • 내구성 -인쇄하는 동안 전원 차단이 발생했습니다. 프린터는 오류없이 문서를 다시 인쇄합니다.

이것이 누군가 ACID 개념을 익히는 데 도움이되기를 바랍니다.


" 진행중인 인쇄물 이 너무 많음 "이 무슨 의미인지 잘 모르겠습니다. " 너무 많음 "이 아니라 "다중"입니까?
icc97 2016 년

17

ACID와 데이터베이스 트랜잭션의 관계는 무엇입니까?

관계형 데이터베이스에서는 모든 SQL 문이 트랜잭션 범위에서 실행되어야합니다.

트랜잭션 경계를 명시 적으로 정의하지 않으면 데이터베이스는 모든 개별 명령문을 둘러싼 암시 적 트랜잭션을 사용하게됩니다.

내재적 트랜잭션은 명령문이 실행되기 전에 시작되고 명령문이 실행 된 후 종료 (커밋 또는 롤백)됩니다. 암시 적 트랜잭션 모드는 일반적으로 자동 커밋으로 알려져 있습니다.

이 기사 에서 설명하는 것처럼 트랜잭션은 포함 된 모든 작업이 성공한 경우에만 성공하는 읽기 / 쓰기 작업의 모음입니다.

원 자성

본질적으로 트랜잭션은 네 가지 속성 (일반적으로 ACID라고 함)으로 구성됩니다.

  • 원 자성
  • 일관성
  • 격리
  • 내구성

ACID는 데이터베이스 트랜잭션을 제공합니까, 아니면 같은 것입니까?

관계형 데이터베이스 시스템의 경우 이는 SQL 표준이 트랜잭션이 ACID 보증을 제공하도록 지정하기 때문에 적용됩니다.

원 자성

Atomicity는 개별 작업을 수행하여 포함 된 모든 작업이 성공한 경우에만 성공하여 전혀 또는 전혀없는 작업 단위로 바꿉니다.

트랜잭션은 상태 변경을 캡슐화 할 수 있습니다 (읽기 전용이 아닌 경우). 주어진 시간에 얼마나 많은 동시 트랜잭션이 인터리브되는지에 관계없이 트랜잭션은 항상 시스템을 일관성있는 상태로 유지해야합니다.

일관성

일관성은 커밋 된 모든 트랜잭션에 대해 제약 조건이 적용됨을 의미합니다. 이는 모든 키, 데이터 유형, 검사 및 트리거가 성공적이며 제약 조건 위반이 트리거되지 않음을 의미합니다.

격리

트랜잭션에는 동시성 제어 메커니즘이 필요하며 인터리브 될 때도 정확성을 보장합니다. 트랜잭션이 실패해도 시스템 상태가 손상되지 않아야하므로 격리는 커밋되지 않은 상태 변경을 외부 세계로부터 숨길 수있는 이점을 제공합니다. 비관적 또는 낙관적 잠금 메커니즘을 사용하여 동시성 제어를 통해 격리가 이루어집니다.

내구성

성공적인 트랜잭션은 시스템 상태를 영구적으로 변경해야하며 종료하기 전에 상태 변경이 지속 된 트랜잭션 로그에 기록됩니다. 시스템 충돌이나 정전으로 인해 시스템이 갑자기 영향을받는 경우 완료되지 않은 커밋 된 트랜잭션이 모두 재생 될 수 있습니다.

여기에 이미지 설명을 입력하십시오

내구성 및 재실행 로그에 대한 자세한 내용은 이 기사를 확인 하십시오 .


"일관성"에 대해서는 여러 곳에서 설명으로 "응용 프로그램 별 논리적 정확성"을 참조하십시오. 이 경우 DB는 앱 논리를 알 수 없습니다. 따라서 "일관성"은 DB의 고유 속성이 될 수 없습니다. 따라서 앱이 정확성 (또는 "일관성")을 구현하기에 충분하지 않고 격리되지 않았습니까?
user104309

1
ACID의 일관성은 데이터베이스 무결성 제약 조건 (PK, FK, UNIQUE 제약 조건)을 의미합니다. ACID는 중요하지만 응용 프로그램 수준의 낙관적 잠금이 필요한 긴 대화에서 업데이트 손실을 방지 하는 것과 같이 응용 프로그램에 그 이상이 필요할 수 있습니다 .
Vlad Mihalcea

한 번 볼게요. 그러나 그 전에 기본 설명이 필요합니다. 받아 들여진 답변에 대한 브레인 캠벨 (Brain Campbell)의 의견은 "트랜잭션을 사용하면 개별적인 진술이 일관성을 유지하지는 않지만 전체적으로 트랜잭션이 수행된다"고 답했다. 그게 어떻게 가능해 ? 그리고 일관성과 관련하여 여러 직불 및 크레딧은 어떻게 관련되어 있습니까?
user104309

모든 질문에 대한 자세한 답변은 고성능 Java Persistence 책 의 Transactions 장을 확인하십시오 .
Vlad Mihalcea

12

ACID 속성은 데이터베이스 이론의 매우 오래되고 중요한 개념입니다. 이 주제에 대해 많은 게시물을 찾을 수 있지만 RDBMS의 매우 중요한 주제이기 때문에 이에 대한 답변을 시작하고 싶습니다.

데이터베이스 시스템은 모든 트랜잭션에 특정 특성이있는 다양한 유형의 트랜잭션을 처리합니다. 이 특성을 ACID 속성이라고합니다. ACID 속성은 모든 작업을 수행하기 위해 모든 데이터베이스 트랜잭션에 대한 권한을 부여합니다.

원 자성 : 모두 또는 아무것도 저 지르지 않습니다.

일관성 : 트랜잭션의 모든 규칙과 제약 조건을 검증한다는 관점에서 일관된 기록을 만듭니다.

격리 : 두 트랜잭션이 서로를 인식하지 못하도록합니다.

내구성 : 커밋 된 데이터를 영원히 저장합니다. 이 기사에서 가져온 참조 :


5

위키 백과 를 인용하려면 :

ACID (원 자성, 일관성, 격리, 내구성)는 데이터베이스 트랜잭션이 안정적으로 처리되도록하는 일련의 속성입니다.

트랜잭션을 지원하는 DBMS는 이러한 모든 속성을 지원하기 위해 노력할 것입니다. 모든 상용 DBMS (및 여러 오픈 소스 DBMS)는 완전한 ACID '지원'을 제공합니다. ACIDness를 줄임으로써 완전한 거래 행위의 보장을 잃게됩니다.


3

[Gray]는 1981 년에 거래에 대한 ACD 속성을 소개했습니다. 1983 년에 [Haerder]는 Isolation 속성을 추가했습니다. 제 생각에는 ACD 속성에는 더 유용한 속성 집합이있을 것입니다. Atomicity에 대한 한 가지 해석 (언제든지 클라이언트가 볼 수있는 트랜잭션이 원자 적이어야 함)은 실제로 격리 속성을 암시합니다. "격리"속성은 트랜잭션이 격리 되지 않은 경우에 유용합니다 . 격리 특성이 완화되었을 때 ANSI SQL에서 말하기 : 격리 수준이 약하면 SERIALIZABLE입니다. 그러나 격리 수준을 직렬화 할 수 있으면 격리 속성에 실제로 관심이 없습니다.

블로그 게시물에 "ACID가 감지하지 못함"에 이에 대해 더 많이 썼습니다.

http://blog.franslundberg.com/2013/12/acid-does-not-make-sense.html

[Gray] 트랜잭션 개념, Jim Gray, 1981. http://research.microsoft.com/en-us/um/people/gray/papers/theTransactionConcept.pdf

[Haerder] 트랜잭션 지향 데이터베이스 복구 원칙, Haerder and Reuter, 1983. http://www.stanford.edu/class/cs340v/papers/recovery.pdf


1

트랜잭션은 최소 처리 단위로 간주되는 작업 모음으로 정의 될 수 있습니다. 각 최소 처리 장치는 더 이상 나눌 수 없습니다.

모든 트랜잭션에는 일반적으로 ACID 속성으로 알려진 4 개의 속성이 포함되어야합니다. 즉, ACID는 모든 거래의 속성 그룹입니다.

  • 원 자성 :
  • 일관성
  • 격리
  • 내구성
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.