[pgsql-jp: 39651] Re: データの断片化

坂本 光弘 msakamoto @ ybm.jp
2008年 11月 18日 (火) 18:53:34 JST


こんにちは

うちでは以下のようなことをやってます。
これだと、実行時にユーザ側での更新に影響が出るかもしれませんが、検索ぐ
らいであれば業務を中断させずにできますので、負荷の少ない時間帯を見つけ
て流すといいかもしれません。

これだと、vacuum fullとreindexかけたのと同じくらいの効果が出ると思いま
すよ。

ただし、テーブルの大きさによっては予定以上に時間がかかったりするかもし
れませんのでやるときには気を付けてくださいね。

begin;
  --tbl_Aをtbl_Bにコピーする。
  create table tbl_B as select * from tbl_A;

  --tbl_Aを削除する。
  drop table tbl_A;

  --tbl_Bをtbl_Aにリネームする。
  alter table tbl_B rename to tbl_A;

  --インデックスを作り直す。
  create unique index tbl_A_pkey ON tbl_A(cd);

commit;

注意)
・制約を入れている時にはうまく動かないかもしれません。
・tbl_Bがないことは確認してください。
・インデックスは自分で貼りなおす必要があります。事前にtbl_Aのインデッ
クスを調査してください。
・上記のSQLの意味が分からない人は決して手を出さないでください。W


ichikawa kenji <ichikawa @ fancs.com> wrote:

> 
> 市川 健児 です。
> 
> PostgreSQL 8.1.3 を運用しておりますが、
> 特定のテーブルに対する更新が多く、データの断片化により、
> PostgreSQL を運用しているサーバが高負荷状態になってしまい、
> アプリケーションのパフォーマンスに影響が出ております。
> 
> 24時間稼動を前提としているデータベースのため、
> 通常の vacuum のみを一日一回、実行し、
> full vacuum は実行しておりません。
> 
> 現在は、ほぼ月に一度程度発生する、 高負荷状態に陥ったときは、
> アプリケーションを停止させ、
> データベースそのものを pg_dump を使ってダンプさせて、
> データベースを再構築することで対応しております。
> 
> 対応として、tablespace の利用や PostgreSQl 8.3 への
> アップグレードを考えておりますが、私と同じようにデータの断片化により、
> パフォーマンス劣化を経験された方からのアドバイスをいただきたく、
> メーリングリストに投稿させていただきました。
> 
> よろしくお願いいたします。
> 
> 
> 
> 
> ------------------------------
> ichikawa kenji
> mailto:ichikawa @ fancs.com
> http://www.fancs.com/

--------------------
さかもと
mail:msakamoto @ ybm.jp
--------------------



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