[14:36] <dtrebbien>
シリアル化の失敗が発生する条件は?
[14:36] <dtrebbien> ^ シリアル化の失敗が発生する条件は?
[14:37] <dtrebbien> シリアライゼーションの失敗の条件を特定できる PostgreSQL 開発者はいますか?
[14:38] <peerce>
http://www.postgresql.org/docs/current/static/transaction-iso.html#XACT-SERIALIZABLE
[14:43] <dtrebbien> "シリアライズ可能な同時トランザクションのセットは、一度に 1 つずつ実行された場合と同じ効果があります"
[14:44] <dtrebbien> PostgreSQL エンジンが従うルールは何ですか?
[14:44] <dtrebbien> つまり、行が変更された場合、それは失敗を引き起こしますか?
[14:44] <johto> 9.1 のシリアライズ可能な分離モードは本当に複雑です
[14:45] <dtrebbien> わかった。
[14:45] <dtrebbien> 私も読んだのですが、Serializable レベルがどういうわけか「固定」されていました。
[14:45] <RhodiumToad> dtrebbien: 9.1 より前の基本的なルールは、現在の値が見えない行をトランザクションが変更しようとすると失敗するというものでした。
[14:46] <dtrebbien> RhodiumToad: 興味深いですね。
[14:46] <dtrebbien> また、値にアクセスしますよね?
[14:46] <selenamarie> dtrebbien: 他の人が言ったことに加えて、その背後にある基本的な前提は、依存関係のサイクルの検出です
[14:47] <dtrebbien> ああ。
[14:50] <dtrebbien> 9.1 では、分離レベルをトリガーするためのルールがより複雑になり、基本的に「偽陽性」のシリアライゼーション異常を削減したと言っても過言ではありませんか?
[14:51] <johto> より単純な規則がすべてのシリアライゼーションの異常をキャッチできなかったので、それらは複雑になりました
[14:51] <dtrebbien> ああ!分かりました。
[14:51] <dtrebbien> リリースノートに「修正済み」と書かれているのはそのためです。
[14:52] <RhodiumToad> dtrebbien: 非表示の値へのアクセスは、スナップショットの時点で表示されていた値を取得しただけなので、エラーではありませんでした。
[14:53] <RhodiumToad> dtrebbien: 読み取り専用のシリアル化可能なクエリは、スナップショット時点でのデータベースの静的状態を参照するだけです。
[14:54] <RhodiumToad> dtrebbien: TRUNCATE の小さな問題を除けば、シリアライゼーションの問題はすべて読み取り/書き込みクエリに関係しています
[15:03] <dtrebbien> RhodiumToad、johto、selenamarie、peerce: この会話のトランスクリプトを Stack Overflow に投稿してもよろしいですか?
[15:07] <selenamarie> dtrebbien: そうですね :)
[15:07] <dtrebbien> 誰の役に立つかわかりません。かもしれない。
[15:08] <selenamarie> dtrebbien: これに関する Kevin Grittner の講演のメモをここに投稿しました:
http://www.chesnok.com/daily/2011/03/24/raw-notes-from-kevin-grittners-トークオンシー/