본문 바로가기

DB(Database)

(Database) - transaction과 ACID

반응형

🍳머리말

transaction과 ACID에 대한 설명글입니다.


📕 transaction

📔 설명

db에서 data에 대한 하나의 논리적 실행단계입니다.

📔 처리

주고 lock을 사용했으나 동시작업이 어렵고 성능저하를 초래합니다. A유저가 특정 테이블을 읽고 있다면 B유저는 A가 끝나기를 기다려야 합니다. 따라서 MVCC를 통해 모든 데이터를 별도 복사본으로 관리하게 됩니다.

 

다음 세 명령어로 transaction 처리가 가능합니다.

📑 Commit

모든 부분작업이 정상적으로 완료하면 이 변경사항을 한꺼번에 DB에 반영합니다. 예를 들어 출금이라는 명령에는 계좌조회, 계좌선택, 금액입력, 출금완료 등으로 이루어진 여러 부분작업이 있습니다. 각 과정이 끝날 때마다 부분 commit을 하고 최종적으로 완료되었을 때 committed가 됩니다.

📑 Rollback

부분 작업 실패시 transaction실행 전으로 되돌리는 명령어입니다. 원자성을 위해 모든 연산을 취소하게 됩니다. 출금을 예시로 들면 선택한 계좌에서 입력한 금액만큼 돈이 없는 경우 실패하게 되고 다시 계좌선택부터 하도록 합니다. COMMIT을 하지 않은 내용에 대해 data변경사항이 발생한 경우 rollback명령어를 입력하면 마지막 COMMIT에 반영된 data의 저장상태로 복귀하게 됩니다.

📑 Savepoint

정해진 부분까지만 되돌릴 수 있는 명령어 입니다. 특정 부분에서 해당 명령어를 사용하면 transaction이 취소됩니다.

BEGIN;
  INSERT INTO tbl VALUES (1);
SAVEPOINT savepoint_example;
  INSERT INTO tbl VALUES (2);
ROLLBACK TO SAVEPOINT savepoint_example;
  INSERT INTO tbl VALUES (3);
COMMIT;

📔 상태도


📕 ACID

📔 설명

db transaction이 안전하게 수행됨을 보장하기 위한 설징을 가르키는 약어입니다.

📔 Atomicity

transaction과 관련된 작업들은 끝까지 실행되어야 함을 의미합니다.

📔 Consistency

transaction이 실행을 성공적으로 완료하면 언제나 db를 무결성으로 유지하는 것을 의미합니다.

📔 Isolation

transaction 수행시 다른 연산이 끼어들지 못하도록 함을 의미합니다.

📔 Durability

성공적으로 수행된 transaction은 그 결과가 영원히 반영되어야 함을 의미합니다. 모든 transaction은 log로 남고 system 장애 발생 전 상태로 되돌릴 수 있습니다. log에 모든 것이 저장된 후에만 commit상태로 간주될 수 있습니다.


*더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.