[pgsql-jp: 41556] Re: REINDEXの処理時間

MauMau maumau307 @ gmail.com
2014年 1月 25日 (土) 07:51:40 JST


MauMauといいます。

REINDEXは主に次のようなことをします。

1.テーブルのファイルをすべて読み、(ガベージでない)有効なレコードを一時作業域に書き出す。
2.一時作業域のレコードを、インデックスのキー順にソートする。
3.新しいインデックス用ファイルに、一時作業域のレコードを書き出す。

そのため、実行時間はレコード数だけに比例するのではないと思います。
たとえば、100万件のレコードが入っていたテーブルがあるとします。
DELETEですべてのレコードを消すと、SELECT COUNT(*)で得られる有効レコード数は0です。
しかし、100万件のガベージは残っています。
それでも、REINDEXは100万件のガベージを読みます。

また、ソートの時間がレコード件数に比例しないかもしれません。


以上です。

----- Original Message ----- 
From: <masaosa9592 @ zenrin.co.jp>
To: <pgsql-jp @ ml.postgresql.jp>
Sent: Friday, January 24, 2014 1:22 PM
Subject: [pgsql-jp: 41553] REINDEXの処理時間


佐野と申します。
REINDEXの処理時間について質問があります。

レコード数増加とREINDEX処理時間の関係が
比例関係にありませんが、PostgreSQLのメカニズム上
そういう傾向にあるものでしょうか?

また、処理時間の増加はデータ容量ではなく
レコード数にともなって増加すると考えていますが
認識はあっていますでしょうか


レコード数:5億6千万レコード
データ容量:180G
処理時間:5時間55分
  ↓
レコード数:6億5千万レコード
データ容量:200G
処理時間:8時間45分


以上、よろしくお願い致します。




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