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

ichikawa kenji ichikawa @ fancs.com
2008年 11月 18日 (火) 19:57:11 JST


市川 健児 です。

お返事、ありがとうございます。

現在は、データベースそのものを pg_dump でダンプして、
そのダンプファイルを新たしいデータベースに読み込んで、
RENAME しているため、特定のテーブルのみを再構築する方法だと
短時間で済みそうですね。

こちらも、アプリケーションを停止できるときに
試してみます。



On Tue, 18 Nov 2008 19:27:54 +0900
坂本 光弘 <msakamoto @ ybm.jp> wrote:

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

------------------------------
ichikawa kenji
mailto:ichikawa @ fancs.com
http://www.fancs.com/




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