Serializable Isolation for Snapshot Databases(MICHAEL J. CAHILL, UWE ROHM, and ALAN D. FEKETE) 라는 아티클에 소개된 벤치마크다.
SI에서 SSI로 발전에서 가장 큰 부분인 Write Skew를 검증하기 위해서 개발되었다.
TPC-C는 OLTP 워크로드 테스트에 가장 대표적인 벤치마크라 할 수 있다.
하지만 이 TPC-C만으로는 write skew가 개선되었는지를 충분히 테스트하기엔 아쉬운 점이 많다.
그래서 이 연구에서는 직렬성을 깨트릴 수 있는 'Credit Check'라는 새로운 트랜잭션을 추가하였다.
Write Skew라는 문제는 결국 두 트랜잭션이 동시에 같은 값을 읽고 쓰려고 할 때 발생하는 문제다. (RW-dependecy)
그래서 Credit Check 트랜잭션은
'고객의 미결제 잔액과 최근 주문을 확인해 신용 상태를 업데이트, 한도 초과 시 Bad Credit 상태로 업데이트'
한다.
한마디로 주문할 때 돈이 충분히 있는지 한도를 확인하는 트랜잭션이다.
이 트랜잭션은 새로운 주문을 생성하는 'New Order' 트랜잭션과 결제를 진행하는 'Payment' 트랜잭션 간에 Write Skew를 발생시킨다.
Ex) 고객의 한도 1000$, 현재 미결제 금액 900$
Operations
- New Order Transaction: new(200)
- Payment Transaction: pay(500)
의도 (Serial)
- new(200) -> BC -> pay(500) -> !BC (또는 pay(500) -> new(200))
Write Skew 발생 시나리오
T1 | T2 |
New Order: new(200) (미결제 900$) | |
Payment: pay(500) (미결제 900$) | |
Credit Check: 정상 (미결제 400$) | |
Credit Check: BC (미결제 1100$) | |
Commit | Commit |
- 정상적으로 진행되면 !BC여야 하지만 최종적으로 T1에 의해 BC가 된다.
참고
https://dl.acm.org/doi/10.1145/1620585.1620587
Serializable isolation for snapshot databases | ACM Transactions on Database Systems
Many popular database management systems implement a multiversion concurrency control algorithm called snapshot isolation rather than providing full serializability based on locking. There are well-known anomalies permitted by snapshot isolation that ...
dl.acm.org