Postgresで二層コミット

PostgreSQLバージョン8.4.6で二層コミットを行おうとしたところエラーが発生してうまく行えない現象に遭遇しました。二層コミットはC#で作成したアプリケーションでTransactionScopeを使用して行おうとしたのですが…。

これまでは、MySQLにしろ、SQL Serverにしろ基本的にはデフォルトで二層コミットができていたので当たり前のようにTransactionScopeで二層コミットをしていましたが、PostgreSQLではデフォルトでは二層コミットはできないように設定されているようです。

早速設定を確認したところ、設定ファイルの max_prepared_transactions 項目にトランザクション数を指定しますが、デフォルトでは0に設定されていました。確かに0では使用不可ですね。

max_prepared_transactions を5に変更してPostgreSQLを再起動したところ正常に二層コミットが使用できることを確認しました。

ただ、どうやら二層コミットを使用する場合(に限らないのかもしれませんが…)、PostgreSQLが使用するメモリ関連のチューニングを行った方が良いらしいことも知りました。いろいろと詳しく記載があったのですが、今は時間がとれそうにもないので追々チューニングしていこうかと思います。


 

参考にしたサイト


PostgreSQLのSHMMAXの計算式の検証


 

参考にした書籍

PostgreSQLのリファレンスはこれを使用しています。少し古い書籍ですがPostgreSQLの内部構造など説明が詳細にあるので役立ちます。MySQLがOracleに買収されてからというもの、今後の見通しが立たなくなったのでPostgreSQLに移行する人も多いと思うのですが、、、書籍は新しいバージョンは出ないのでしょうかね?