[pgsql-jp: 41883] Re: 1行のサイズが2KBを超えたときの性能について

michio.kataoka.pmb @ rand.co.jp michio.kataoka.pmb @ rand.co.jp
2016年 8月 4日 (木) 13:19:44 JST


#管理者様、再投稿しましたので承認待ちのものは削除下さい。


JPUG高塚 様

ご回答ありがとうございます。片岡です。
Let's Postgresのページ、とても有り難く読ませていただいています、
中の人にご回答いただけて光栄です!


2KBはTOASTと行内カラムに纏わるお話だったのですね。
なんとなくわかってきた気がします。

・TOASTが効くので、varchar(N) や numeric などで2KBを超えても問題ない。
 ただし、TOASTされない行内カラムはそのまま行のサイズを増やしてしまう。
・1行当たり8KBを超えると保存できなくなる。
・TOASTされた行が全テーブル通算40億に近づくと著しい速度低下を引き起こす。
 ( https://wiki.postgresql.org/wiki/TOAST/ja )
・行が2KBに収まっていればTOASTが使われないので40億行の制限はない。


Let's Postgresにある「極端に性能が落ちる場合」について、
TOASTのカウンタ(OID)の最大値にまつわるものだと理解しました。

40億って4byteでしょうか、もうすこし多くてもいい気がしますが
検索してもあまりこのお話し出てきませんし、
回避方法もいくつかあるので実用上問題無いんでしょうね。。



----- Original Message -----
> 
> JPUG高塚です。
> 
> # Letsのメンテナンスもしています
> 
> 
> > 「PostgreSQL では1行のサイズが 2KB を超えると、極端に性能が落ちる場
合が
> > あります。」
> 
> 上記は行内カラムのことですね。(id int, dat varchar(2500)) みたいな
> テーブルなら TOAST が効くし、行内カラム長は短いので大丈夫です。
> 
> さて、TOAST を使うかの判断には 1行サイズ 2KB という基準も使われますが、
> 一方でその対象は varchar(N) や numeric のような可変長型に限られます。
> interval型(16バイト) × 150カラム は 2KB を超えますが、TOAST は
> 使われません。
> 
> 行内カラムで1行分のデータがページサイズを超えると、そもそも格納
> できません。INSERT や UDPATE でエラーになります。ページを跨げないので
す。
> 
> ということで、8KB のページに 2.1KB の行を投入すると、1ページに
> 3件だけ格納となりまして、いかにも効率が悪くなりそうではありませんか。
> 
> あるいは 2KB を超える行データ中に TOAST可能なものが含まれていて、
> 一部 TOASTに廻しても、結局行内カラム1行が 1KBくらいになったなら、
> これでも十分効率が悪そうです。
> 
> 
> 
> 
> On Tue, 02 Aug 2016 18:47:51 +0900
> <michio.kataoka.pmb @ rand.co.jp> wrote:
> 
> > 片岡と申します。
> > 
> > こちらでお聞きすることではないかもなのですが、
> > Let's Postgres のチューニングのページ 
> > http://lets.postgresql.jp/map/tuning> > 
> > 「PostgreSQL では1行のサイズが 2KB を超えると、極端に性能が落ちる場
合が
> > あります。」
> > との記述があります。
> > 
> > テーブルのブロックサイズは8KBなので2KBだったらブロック内に収まります
し、
> > TOASTが使われるのは行内のカラムの値が2KBを超えた場合だと説明されてい
たの
> > で
> > ちょっとニュアンスが異なるように思います。
> > 
> > 性能が落ちる理由を調べていたのですが、これだと思えるものを見つけられ
ませ
> > んでした。
> > 
> > Let's Postgresの説明の「極端に」とはどの程度なのか、
> > また「落ちる場合がある」とはどのような場合なのか、
> > お教えいただけないでしょうか。
> > 
> > 
> > よろしくお願い致します。
> 
> 
> 
> ______________________________________________________________________
>  日本PostgreSQLユーザ会  高塚 遙  http://www.postgresql.jp 
> 
> 





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