[pgsql-jp: 38091] Re: コミット待ちトランザクションのメモリ消費量について

Hiroki Kataoka kataoka @ interwiz.jp
2007年 2月 27日 (火) 18:38:30 JST


片岡です。

 いろいろ意見がでましたが、私からも補足を。

 PostgreSQLの場合は、未コミットのデータが溜まったとしてもロールバックセ
グメントが溢れるというような問題は起きません。これはアーキテクチャの違い
からです。なので、この点ではあまり気にしなくて大丈夫です。単純なINSERTや
UPDATEなどであればたとえ数十万件であってもコミットは1回でまず問題ありま
せん。

 ただし、データを投入するSQL内で文字列演算を多用するなど、PostgreSQL内
部のワークメモリを多く必要とする処理の場合には注意が必要です。これらの
ワークメモリの中には、演算の終了時ではなくてトランザクションの終了時にの
み開放されるものがあり、これが未コミットデータの件数分積み重なって、コ
ミット前にメモリを使い切る可能性があります。

 どんな演算の場合にワークメモリが積み重なるのか、残念ながら私には具体的
な例が挙げられません(そこまで細かく調べてない&覚えていないのです)。中
途半端なアドバイスですみません。

松本 康寛 wrote:
> 初めまして、松本と申します。
> みなさんのお知恵を拝借したいと思います。
> 
> 【知りたいこと】
> 大量データを登録・更新・削除処理する際に、
> トランザクションはどれくらいメモリを消費していくのか?
> 
> 【システム環境】
> サーバ:SUSE Linux DB:PostgreSQL 8.1.1
> 
> 【アプリケーション構成】
> Tomcat+Java ServletのWEBアプリケーション
> 
> 【経緯】
> バッチ処理で大量のデータを処理する必要があるのですが、
> その際に「ある程度の件数を処理したらコミットを切る」
> という話になりました。
> 今までも1000件単位だとかでコミット切るプログラムを
> 組んできた経験はあったのですが、
> 果たして「1000件単位」とはどれくらい妥当なのかが気になりました。
> 
> また、件数で制約を設けると処理の途中で終わってしまう可能性を
> 考慮しリカバリ可能なテーブル設計に修正する必要が出てくるので、
> 思惑としては全件処理後にコミットを切りたいところです。
> 
> 気になる点としては
> ・ページングよるパフォーマンスの劣化
> ・最悪メモリ溢れでシステムダウン
> 
> みなさん、どのように考慮しておられるのでしょうか?
> 
> 長文で申し訳ありませんが、よろしくお願いします。
> 
> *+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*
> 
>  松本 康寛 (マツモト ヤスヒロ)
> 
> E-mail :wochenendhaus @ hotmail.com
> *+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*
> 
> ※利便性などを考えて、Hotmailを使用しております。
>  何卒、ご理解を賜りますようよろしくお願いします。
> 
> _________________________________________________________________
> ここでしかもらえない貴重なリア・ディゾンの壁紙をダウンロード! 
> http://campaign.live.jp/dizon/

-- 
Hiroki Kataoka <kataoka @ interwiz.jp>



pgsql-jp メーリングリストの案内