DB

[기타] TPCC++ - write skew 테스트 용 벤치마크

폭풍저그김탁구 2025. 2. 5. 11:47

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