
하나의 작업 단위로 처리되는 쿼리(query)의 모음이다.
BEGIN으로 시작하고, 모든 작업이 성공적으로 완료되면 COMMIT을 통해 변경 사항을 영구히 저장한다.ROLLBACK을 통해 이전의 모든 작업을 취소하며 ROLLBACK이 실행된다.변경 사항을 즉시 디스크에 쓰지 않고, 먼저 메모리의 캐시 공간에 저장한다. 이렇게 하면 여러 쓰기 작업을 메모리에서 빠르게 처리한 후, 나중에 한꺼번에 디스크에 쓸 수 있어 쓰기 성능이 향상된다.
장점:
단점:
데이터 변경이 발생하면 메모리 캐시와 디스크에 동시에 기록한다. 데이터가 즉시 영구 저장소에 보관되므로 데이터의 일관성과 안정성이 매우 높다
장점:
단점:
대부분의 현대 데이터베이스는 위 두 방식의 장점을 절충한 WAL(Write-Ahead Logging) 기법을 사용한다.
실제 데이터 변경 사항(예: 테이블, 인덱스)을 디스크에 쓰기 전에, 변경 내용에 대한 로그를 먼저 디스크에 기록한다.
로그 파일만 디스크에 즉시 기록하면 되므로, 실제 데이터 파일 전체를 쓰는 것보다 훨씬 빠르다. 만약 시스템에 장애가 발생하더라도, 디스크에 기록된 로그를 보고 메모리에서 미처 디스크로 옮겨지지 못한 변경 사항을 복구할 수 있어 데이터 안정성과 성능을 모두 확보할 수 있다.
데이터베이스는 운영체제에게 로그를 디스크에 "반드시" 쓰도록 fsync와 같은 명령을 내리는데, 이 과정이 너무 빈번하면 성능에 영향을 줄 수 있다. 따라서 fsync호출 빈도를 조절하여 안정성과 성능 사이의 균형을 맞춰야한다.
새로 들어온 책을 일단 '신규 도서' 코너의 빈자리에 순서대로 쭉 쌓아두는 것과 같다. 작업이 매우 빠르고 단순하다
로그 파일은 트랜잭션의 변경 내용을 시간 순서대로 파일의 맨 끝에 추가하기만 한다. 이것은 디스크의 읽기/쓰기 헤드가 한 방향으로 쭉 움직이며 데이터를 쓰는 것과 같아서 매우 빠르다
디스크에 여러 다른 물리적 위치에 흩어진 데이터를 수정하는 직접 쓰기와 다르다.
직접 쓰기는 데이터가 저장된 각각의 물리적 위치를 모두 찾아가서 수정해야하기 때문에 순차 쓰기보다 느릴 수 있다.