데이터베이스

[DBMS] Transactions을 사용하는 이유(ACID)

파송송 2023. 5. 30. 17:29
728x90

Disk(=Hard Disk)

Disk architecture

Hard Disk는 자성물질을 가진 회전체로 Tracks에 data를 저장한다.


특징

  • Slow
    • 정보가 담긴 Track을 선택하는 것이 느림
    • 그러나 track을 찾으면 정보를 빠르게 읽을 수 있음
  • Durable
    • 내구성이 좋기 때문에 Disk에 저장된 데이터는 충격이 가해지는 게 아닌 이상 안정하게 보관됨
  • Cheap

Random Access Memory(RAM), Main Memory

특징

  • Fast
    • sequential access속도가 10배 향상됨
    • random access속도가 100,000배 향상됨
  • Vloatile
    • 휘발성 메모리로 power out 되면 데이터가 날아간다
  • Expendive
    • Disk에 비해 가격이 비쌈

Memory of Transaction

RAM에서 정보를 추가하거나 삭제하고 이를 Disk로 보내 모두가 사용할 수 있게 한다.

  • Local(DRAM)
    • DBMS는 각 process를 가지고 있고 읽을 수만 있는 값
  • Global(DRAM+DISK)
    • 각 process 간 공유 데이터로 읽고 쓸 수 있음
  • Disk (영구적 기록)
    • Global에서 디스크로 일기, Flush가 가능함
    • Flush: Main memory에서 Disk로 정보를 쓰는 행위
  • Log
    • Transactions의 실행과정을 기록한 것

Transaction(TXN)

하나 이상의 연속된 작업을 묶어서 표현한 것이다.

START TRANSACTION
	UPDATE Product	
	SET Price = Price – 1.99
	WHERE pname = ‘Gizmo’
COMMIT
START TRANSACTION
	UPDATE Bank SET amount = amount – 100 
	WHERE name = ‘Bob’
	UPDATE Bank SET amount = amount + 100 
	WHERE name = ‘Joe’
COMMIT

START TRANSACTION와 COMMIT을 이용하여 정의하며 여러 개의 명령어를 설정할 수 있다.

 

Transaction은 완전히 실행하거나 하나도 실행하지 않는 상태(Completely or not at all)를 유지하며 이는 중요한 성질이다.

예시

  • Transfer money between accounts(송금)
  • Purchase a group of products(구매)
  • Register for a class(수강신청)

Motivatoin of Transactions

  • Recovery and Durability
    •  crashes, aborts, system shutdowns에도 data를 일관성 있게 유지하기 위해 필요함
    • roll-back을 통해 durably을 보장함
  • Concurrency
    • 에러를 발생시키지 않고 TXN를 병렬화 하여 동시성을 가짐
    • 느린 Disk에서 여러 요청을 처리하기  위해서 필요함
    • 여러 개의 TXNs을 다루지만 각 TXNs 간의 Isolation을 보장함

Transactions이 없다면 crash, abort가 발생하였을 때 원자성을 보장할 수 없다. 위의 사진을 보면 Price의 값이 사용자가 원하는 값과 다르게 나올 수 있다.


Client 1: 	UPDATE Product
			SET Price = Price – 1.99
			WHERE pname = ‘Gizmo’

Client 2: 	UPDATE Product
			SET Price = Price*0.5
			WHERE pname=‘Gizmo’

Transactions이 없다면 두 명령어가 한 번에 실행되어 price의 값이 사용자가 원하는 값과 달라질 수 있다.

Client 1: 	START TRANSACTION
				UPDATE Product
				SET Price = Price – 1.99
				WHERE pname = ‘Gizmo’
			COMMIT
Client 2: 	START TRANSACTION
				UPDATE Product
				SET Price = Price*0.5
				WHERE pname=‘Gizmo’
			COMMIT

Transactions을 통해 충동을 없앤다.


Properties of Transactions

Transaction의 성질로는 ACID가 있고 각 뜻은 아래와 같다. ACID는 DB가 가져야 할 성질과도 같다.(NOSQL과 같은 몇몇 DB는 따르지 않기도 하지만 기본적으로 ACID를 따름)

  • Atomicity
    • 데이터가 0 또는 1로 실행되어야 함 (all or noting)
    • txn이 부분적으로 실행되거나 중간에 중단되고 일관성을 유지하게 함
  • Consistency
    • 데이터베이스의 제약조건을 준수하고 게이터의 일관성을 유지하는 것
    • 데이터베이스에는 여러개의 테이블과 관계가 존재하고, 이러한 관계를 유지하고 무결성을 보장하기 위해 필요함
      • Programmer: txn를 consistent state로 유지해야 함
      • System: txn가 atomic을 유지해야 함
  • Isolation
    • txn이 실행되고 있을 때 다른 txn에 의해 영향받지 않음
    • txn이 고립성을 갖고 동시에 다른 txn에 의해 현재 txn의 결과가 영향받지 않음을 보장함
  • Durabiliry
    • txn commit시 Disk가 유지되어야 함
    • txn이 성공적으로 실행되면 데이터의 변경 내용이 영구적으로 유지됨
    • 이를 통해 디스크 장애가 발생해도 데이터베이스는 복구되어 일관된 상태를 유지함

 

728x90