PostgreSQLで質問です。


あるサーバでアクセス混雑時に、1レコードのinsert処理に5~6秒かかることがあります。

これはinsertそのものが遅いのか、あるは何か別で重い処理があってそれで待たされて遅くなっているのか、どうすればわかるでしょうか?

insert処理を高速化したいのですが、何から手をつければいいかわからなくて困っています。


■詳細情報

・サーバ CentOS 5.3, PostgreSQL 8.4.4
・当該サーバはPostgreSQL専用。他のミドルウェアは動かしていない。

・INSERT文の例:

INSERT INTO applog (user_id, action, time) values (123, 'login', 'now()');
INSERT INTO cart (user_id, product_id, time) values (123, 456, 'now()');
など

・この時間帯は、どのテーブルでもINSERTが遅くなるようです。
・vacuumは毎日早朝に行っています。 (insertが遅いのは夜なので、vacuum実行時とは別の時間帯です)

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2011/11/13 03:06:49
  • 終了:2011/11/20 03:10:03

回答(2件)

id:Melodybox No.1

Melodybox回答回数4ベストアンサー獲得回数02011/11/13 12:56:11

ポイント50pt

時間帯によりアクセスが極端に遅くなるという事で、同時接続数が上限に達している可能性はありませんでしょうか?
アクセスが遅くなる時間帯に SELECT count(*) FROM pg_stat_activity; で接続数を調べてみて下さい。
結果がpostgresql.conf内の「max_connections」と同数付近である場合、上限に達している可能性が高いです。
max_connectionsを増やす事で重くなる現象が回避できると思います。
同時接続数を増やした場合、「shared_buffers」の値も増やす事をお勧めします。

id:DQNEO

ありがとうございます!同時接続数を見てみます。

2011/11/14 00:55:59
id:TransFreeBSD No.2

TransFreeBSD回答回数668ベストアンサー獲得回数2682011/11/13 16:37:55

id:DQNEO

ありがとうございます。
ps, topなどは見ています。iowaitが少し多い感じです。

統計情報をとれるように設定したので、結果が出るのを待っています。

2011/11/14 00:57:22
  • id:DQNEO
    sarで見ると、混雑時(23時ごろ) %iowaite 7.53 となっていました。これが原因かもしれません。
  • id:DQNEO
    結局原因究明をしないまま、MongoDBを採用することで解決しました。

    仮説ですが、テーブルのindexが膨張してinsert性能が悪くなっていたのかもしれません。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません