[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 メーリングリストの案内