PostgreSQL

増永教授のDB特論⑪「結果整合性」

 

1. はじめに

 ビッグデータの管理・運用で注目を浴びることとなった結果整合性(eventual consistency)ですが,賛否両論あるようです.否定的な意見は,たとえば,クレップマン(Martin Kleppmann)[1]の
著作に見ることができます.この著作,結構多くの方々がお持ちかと思いますが,クレップマンは複
製を行うデータベースのほとんどは,少なくとも結果整合性を提供しているとしながらも,これは非
常に弱い保障であり,複製がいつ(最終値に)収束するのかについては何も語られていなく,収束す
るときまで,読取りの結果が何になるのか,あるいはそもそも何も返さないのかは分からない,とク
レームしています.さらに,CAP 定理の対象範囲は非常に狭く,考慮しているのは 1 つの一貫性モ
デルと 1 種類のフォールト(つまり,ネットワーク分断)だけで,ネットワークの遅延,落ちている
ノード,あるいは他のトレードオフについては何も語っていない.したがって,CAP 定理は歴史的
には大きな影響力があったものの,システムの設計における実際的な価値はほとんどない,と述べて
います(文献[1]の 9 章「一貫性と合意」).

続きを読む

PostgreSQL 15 に関する技術情報

このページでは PostgreSQL 15(2022/10/13リリース) に関する技術情報をお届けします。
本ドキュメントは PostgreSQL のリリースノートを元に弊社で解説を加えたものです。
バージョン15 の新機能については「PostgreSQL 15 検証報告」も参照してください。

続きを読む

増永教授のDB特論⑩「GEQO」

 

1. はじめに

 リレーショナル DBMS において質問処理の最適化はリレーショナル DBMS の開発が始まって以来,設計者が最も腐心するところでした.その嚆矢は 1970 年代に IBM Sanサン Joseホゼ 研究所で開発された System R で提案・実装されたコストベース(cost based approach)の最適化手法です[1].System
R は PostgreSQL の前身である INGRES と共にリレーショナル DBMS のプロトタイプとして名高い
システムですが,そこで開発されたこの手法は現在もプロプライエタリや PostgreSQL を含む OSS
のリレーショナル DBMS の質問処理最適化技法の基本となっています.

続きを読む

増永教授のDB特論⑨「NULL」

 

1. はじめに

 Null という語,データベースに携わっている人なら見たことないという人はいないと思いますが,なんと発音していますか?
 「ヌル」って言うのだよ,と誰が教えたのでしょうか?結構,皆さん,ヌル,ヌル,って言っています.違うですねー.「ナル」って発音するのです.英語の発音記号は nʌ’l です.英語の発音を日本語で書き表すのは難しいですが,決してヌルではありません.英語を母国語とする人にヌルと言ったら,多分首を傾げると思いますよ.ナルって言いましょう.
 さて,ナル(null)は「値がない」(having no value)という意味ですね.これに異議ありという方は多分いないと思います.では,リレーショナルデータベースでナルはどのような時にどのように使われているのでしょうか?なんで今さらそんなことを聞いているの?といぶかしげな読者の顔が浮かびますが,ナルに関しては蘊蓄うんちくを傾ければきりがなく,理論面でも実践面でも不明確なところが多々あり,議論しだしたらきりがないのかなといった感じです.しばしナル談議にふけってみたいと思います.

続きを読む

増永教授のDB特論⑧「MVCC」

 

1. はじめに

 トランザクションの同時実行制御は障害時回復とならんでトランザクション管理には欠かせない機能であることは言うまでもないことです.そのために 2 相ロッキング(two phase locking, 2PL)プロトコルが考案され,伝統的に 2PL が多くのデータベース管理システム(DBMS)で実装されてきました.しかし,2PLでは同時実行されているトランザクションの直列化可能性を保証するために,トランザクションは読取りや更新の対象となるオブジェクトをロック(lock,施錠)することが必要で,それによる同時実行性(concurrency)の制約は古くから認識されるところでした.
多版同時実行制御(multiversion concurrency control, MVCC)は 2PL とは異なり,競合しているトランザクションの実行終了を待つのではなく,同じデータ項目の異なる(version)を用意することによって,トランザクションの隔離性を向上させ,同時実行性を高めようとするアプローチです.データ項目の版という概念の導入は 1978 年に遡りますが[1],その考え方はデータベース分野に直ちに入り込み,1980 年代初頭には MVCC の理論の礎が築かれました[2].MVCC と一口に言ってもその実現法は MVTO(multiversion timestamp ordering),MV2PL,MVMM,MVOCC,SI(snapshot isolation,スナップショット隔離性),SSI(serializable snapshot isolation,直列化可能スナップショット隔離性)など多様です.現在 MVCC はこのようなさまざまな実現法を包括した用語として用いられると同時に,狭義には MVCC の原点である MVTO を指す言葉としても用いられます.現在,多くのプロプラィエタリ(proprietary)あるいは OSS のリレーショナル DBMS で MVCC が実装されています.
 2PL と MVCC ではトランザクションの同時持実行制御の考え方が根本的に異なるので,2PL を念頭に制定された国際標準リレーショナルデータベース言語 SQL が定めた隔離性水準(isolation level)と MVCC の提供する隔離性水準との間には齟齬そごが出ます.現在 PostgreSQL や Oracle で実装されている SI は ANSI SQL の隔離性水準を論評する過程で考案され,1995 年に公表されました[5].
 本稿では,MVTO と SI を中心において,MVCCと は何かを改めて議論しておきたいと考えます.

続きを読む