PostgreSQLのREINDEXがまたまた死ねる
PostgreSQLのお話。
数日前から億レコード越えのテーブルに対して、
数千万件削除→VACUUM FULLを行った。
HDDの容量が圧迫されている対応であるが、
VACUUM FULLしても、容量が1ByteもOSの返却されない。
およよと、Google先生に相談してみると、
REINDEXをせよ!
とのお告げが。
ならばと、実行したのが運の尽き。
残りわずかなHDDを、pgsql_tmpと新規生成されたINDEXが強烈な勢いで食っていく。
あっつーまに、HDD100%達成。
PostgreSQL死亡。
しょうがないので、NAS上の空き領域に/db/data/base以下を全部コピーして、マウント。
/db/data/baseをバックアップとして、/db/data/base2に変更して、
/db/data/baseというシンボリックリンクを作成する。
これで、PostgreSQL起動したら、問題なくSELECT文発行できた。
REINDEXしたら、エラーなく開始。
なんとか一命を取り留めたかな。
REINDEX実行後、シンボリックリンクを削除して、
/db/data/baseをコピーしてやれば、復旧するはず。
今日得た教訓は、
「HDD容量ぎりぎりの状態ではREINDEXは命取り」
ということでした。
なんとも、苦しめてくれるテーブルである。。。