Transaction Anomalyの概念はデータベースの外で生き続ける(のかな?)

nikezono,misc

この記事は データベース・システム系 Advent Calendar 2023 (opens in a new tab) の16日目の記事です.

深い意味はない

この記事はポエムです.また,Redbookの6章 (opens in a new tab)Peter Bailis のブログ (opens in a new tab) がほぼ同じ話をしているので,この記事を読むよりこちらを読まれたほうがより深い理解が得られます.

TL;DR;

Anomalyとは. トランザクション処理を用いるミドルウェアではAnomaly1 またはIsolation Bugsと呼ばれる現象が発生する.これは並行性に起因するバグで,以下のようなシナリオが現実に起こる.

こういった並行性バグは基本的に予測不可能(ハイゼンバグ)とされることが多いが,データベースの中という閉じた世界ではトランザクションの理論によってAnomalyというラベル付けがされ,定式化がなされている. Anomalyはバグの中でも扱いやすい形態をしている.なぜ起きたのかグラフを描いて説明できるし,どうすれば防げるかも明らかにされていて,そのためのワークアラウンドも充実している (SELECTSELECT FOR UPDATE に変えましょう,とか).CIDR '23 の論文 [1] ではAnomalyというツールを使えばハイゼンバグを再現性の高いボーアバグに変換できて便利だ,というふうに説明されていて,なかなかわかりやすい.

Serializableと現実. Anomalyという概念は非常に強力なツールなのだが,バグの説明性と再現性が高まっているだけで,アプリケーションにバグが出てしまうことには変わりがない.そのため,トランザクション処理の文脈(特に研究レベル)では,「最も強い分離レベルである Serializable を提供するアルゴリズムなら,Anomalyは発生しない保証ができます.これを使いましょう」というのが通説だった. ところが,Serializableを躊躇なく使えるユーザはそれほど多くないのが現実である.

Anomalyは実際に起きるのか. Serializableが選ばれない理由はシンプルで,性能が低くなることと,多くの製品でデフォルトの設定ではないことの2点が大きい.さらには,そもそもAnomalyというのはたいして発生しないのではという説がある.この点はアプリケーションによるので一貫した答えはない・・・と思いきや,いくつか研究レベルでも話が出ている. [3] では,定理立てて以下のような話が証明されている.

we show that the weakest consistency level in transaction processing, such as NoCon, is equivalent to snapshot isolation (SI) if the BN3 is always true.

[3] の発表スライドから引用. Concurrency Control がなくともある程度の一貫性(Anomalyの排除) が保障される場合 BN3 についての論文.

BN3とは Bad things doN't come into 3 という意味で,ざっくり言うと 「intersect/conflictしたトランザクションが二つ(エッジが一つ)以下なら,一切Concurrency ControlしなくてもSnapshot Isolationまでは保証される」ことを意味している2. そして,グラフ処理のワークロードでは,実際にクエリを流してみても99%以上の確率でBN3になることを確認している.この場合,どんな一貫性レベルでデータベースを運用してもANSIが定義したAnomalyはすべて防げることになる.

分散処理. 分散処理ともなるとオーバヘッドの問題はより深刻になり,一貫性を放棄するインセンティブがさらに高まる.Facebook が SOSP' 15 で発表した論文 [4] では,Facebookのソーシャルグラフを扱うシステムTAOにおいて Strong consistency がどれだけ違反されているかを調べている3. TAOは Eventual Consistency で動作しており(おそらく当時の中身はMySQLのレプリケーションクラスタだと思う),レプリケーション遅延があるのだが,この遅延を観測してしまうユーザがどれだけいたのかを実験によって調べている.結果として,0.0004% の読み取りのみがStrong consistencyに違反していることが明らかになった.この0.0004%の一貫性違反を防止するために,どれだけのコストを支払えるだろうか?

[4] から引用. FacebookのTAO上で観測される一貫性違反の割合

また,分散処理で実際にStrong Consistency + Serializableを実現しようとするとどれだけオーバヘッドが高くつくのか,というのは VLDB' 14 の Coordination Avoidance in Database Systems [5] という論文がマイクロベンチマークを行なっている.

[5] から引用. 同じクエリを分散ロックありとなしで実行した際の性能の差を測定.

対数軸なので桁違い,4桁くらいの性能劣化が起きてしまう.これほどの性能劣化を常に許容できるほどミッションクリティカルなアプリケーションは割合としては少ない.

予防かデバッグか. したがって,もはやSerializableでデータベースを運用するのは一般的なアプリケーションにとってのコスト最適からは遠くなっている.しかし,CIDR '23の発表 [6] では,93件のConcurrency系のIssueについて調査したところ,開発者はみな「事前に予防できるなら予防したい」と考えていることが示された.それは当たり前の話なのだが,そうできないのが現実になっている.

ツールになっていくAnomaly. では,Serializableでしかもゼロオーバヘッドという夢のようなデータベースが出てくるまで,トランザクション理論とConcurrency Controlは象牙の塔の産物になるのだろうか? それがそうでもない.Anomalyという概念の有用性はまだ残っている.冒頭に述べたように,Anomalyはデータベースに関係するハイゼンバグをボーアバグに変えてくれる.これを活かした,「デバッグのためのAnomaly」という新たな研究領域が誕生している.具体的には,以下のような研究が花開いている/開きつつある.以下は論文のリファレンス紹介と夢の話:

以上のように,論文だけを見ても多くの研究分野が誕生している.どれも,Anomalyという,Serializableの定義から生まれた概念をSerializableではない環境で使い倒しているのが面白い.

終わりに. Anomaly が便利な概念であること,しかし現実はSerializableで運用されAnomalyを予防しているシステムは少ないこと,そしてAnomalyはデバッグや開発のためのツールに変質していっていることをみた.

明日は,実際に実世界のアプリケーションでどんなAnomalyが起き,どのようにデバッグされているかを調べる.ちゃんと書けたらいいですね.

  1. Qian Li, Peter Kraft, Michael J. Cafarella, Çagatay Demiralp, Goetz Graefe, Christos Kozyrakis, Michael Stonebraker, Lalith Suresh, Matei Zaharia: Transactions Make Debugging Easy. CIDR 2023
  2. What Are We Doing With Our Lives?: Nobody Cares About Our Concurrency Control Research (SIGMOD'17, Keynote) (opens in a new tab)
  3. My Weak Consistency is Strong: When Bad Things Do Not Come in Threes. Zechao Shang, Jeffrey Xu Yu. CIDR 2017
  4. Haonan Lu, Kaushik Veeraraghavan, Philippe Ajoux, Jim Hunt, Yee Jiun Song, Wendy Tobagus, Sanjeev Kumar, and Wyatt Lloyd. 2015. Existential consistency: measuring and understanding consistency at Facebook. In Proceedings of the 25th Symposium on Operating Systems Principles (SOSP '15). Association for Computing Machinery, New York, NY, USA, 295–310. https://doi.org/10.1145/2815400.2815426 (opens in a new tab)
  5. Peter Bailis, Alan Fekete, Michael J. Franklin, Ali Ghodsi, Joseph M. Hellerstein, and Ion Stoica. 2014. Coordination avoidance in database systems. Proc. VLDB Endow. 8, 3 (November 2014), 185–196. https://doi.org/10.14778/2735508.2735509 (opens in a new tab)
  6. Chaoyi Cheng, Mingzhe Han, Nuo Xu, Spyros Blanas, Michael D. Bond, Yang Wang: Developer's Responsibility or Database's Responsibility? Rethinking Concurrency Control in Databases. CIDR 2023
  7. Peter Alvaro, Kyle Kingsbury: Elle: Inferring Isolation Anomalies from Experimental Observations. Proc. VLDB Endow. 14(3): 268-280 (2020)
  8. Yifan Gan, Xueyuan Ren, Drew Ripberger, Spyros Blanas, Yang Wang: IsoDiff: Debugging Anomalies Caused by Weak Isolation. Proc. VLDB Endow. 13(11): 2773-2786 (2020)
  9. Drew Ripberger, Yifan Gan, Xueyuan Ren, Spyros Blanas, Yang Wang: IsoBugView: Interactively Debugging Isolation Bugs in Database Applications. Proc. VLDB Endow. 15(12): 3726-3729 (2022)
  10. Wensheng Dou, Ziyu Cui, Qianwang Dai, Jiansen Song, Dong Wang, Yu Gao, Wei Wang, Jun Wei, Lei Chen, Hanmo Wang, Hua Zhong, Tao Huang: Detecting Isolation Bugs via Transaction Oracle Construction. ICSE 2023: 1123-1135
  11. Todd Warszawski, Peter Bailis: ACIDRain: Concurrency-Related Attacks on Database-Backed Web Applications. SIGMOD Conference 2017: 5-20
  12. Brecht Vandevoort, Bas Ketsman, Christoph Koch, Frank Neven: Detecting Robustness against MVRC for Transaction Programs with Predicate Reads. EDBT 2023: 565-577
  13. Brecht Vandevoort, Bas Ketsman, Christoph Koch, Frank Neven: Robustness Against Read Committed: A Free Transactional Lunch. PODS 2022: 1-14
  14. Brecht Vandevoort, Bas Ketsman, Christoph Koch, Frank Neven: Robustness against Read Committed for Transaction Templates. Proc. VLDB Endow. 14(11): 2141-2153 (2021)
  15. Bas Ketsman, Christoph Koch, Frank Neven, Brecht Vandevoort: Deciding Robustness for Lower SQL Isolation Levels. PODS 2020: 315-330
  16. Peter Kraft, Qian Li, Xinjing Zhou, Peter Bailis, Michael Stonebraker, Xiangyao Yu, Matei Zaharia: Epoxy: ACID Transactions Across Diverse Data Stores. Proc. VLDB Endow. 16(11): 2742-2754 (2023)

Footnotes

  1. Anomalyの細分類や定義は揺らぎがある(DBMS各種製品,ANSIの定義,論文などですべて違う)が,ここでは「Serializableではないときのみ発生する事象」をAnomalyと呼び,それ以上深入りしないことにする.つまり,「Serializableにしていたら防げたのになぁ」というバグの総体について考える.

  2. 実際にはBN3はシステムに対してかなり多くの仮定を置いているため,すべての場合において成り立つ定理ではない.

  3. Serializableの話をしているのにstrong_consistencyの話を混ぜてしまっているが,分散システムでstrict_serializableを達成しようとするとstrong_consistencyを達成する必要があるので,そこの文脈を飛ばした.

© nikezono.devRSS