アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんにちは。

現在某KD○I系列のレンタルサーバー屋で専用サーバーを借りていますが PostgreSQLのデータINSERTの速度がありえないぐらい遅く
サーバー屋にさいさん文句を言っていますが これが仕様ですといってらちがあきません。
どれぐらい遅いか?というと1万行のデータをphpPgAdminからインサートするのに4分近くかかります。
ちなみにうちで適当に作ったVMでの実行だと10秒程度、あまりにらちあかなくて頭着てロリポップで試してみても35秒でした
(まぁロリポップはMySQLですが)
なおデータが複雑だから、、、というわけではなく以下のようなシンプルな構成にしても同様です。

testid varchar(10)
testvalue varchar(10)

ネットワークやハードウェアの障害かとも思いましたが phpMyAdminからMySQLに流し込む分には5秒程度で終わりますし
特定のサーバーの問題かと思い ほかのサーバーでも試してもらいましたが結果は同じでした。

かなり文句を言って向こうのサポートと喧嘩状態になりながら 最終的に向こうからの回答は以下の感じで は?という感じです。

********************(一部伏字)
検証結果にて判明致しましたが、仮想化環境ではディスク自体が
仮想化されている為か、INSERT の結果にはご指摘いただいたように非常に素早い結果を得ることが出来ました。これは、弊社にて別途ご提供中のVPS の*****で要したのは 5 秒前後という結果でございました。

しかしながら、仮想化ではない通常のサーバでは、Disk への書き込み部分が
ボトルネックとなるようで、上位プランの筐体を利用しての動作検証でも、
数十秒程度の速度向上が得られた程度にて、著しい成果を得ることは、
出来ませんでした。

大変申し訳ございませんが、Postgre SQL の設定ではなくご提供しております
オペレーティングシステムのファイルシステムを含めたデータ処理方法などに起因する動作結果となります為、弊社では本速度を仕様としてご案内させていただきます。
********************

1万件で4分が仕様だそうですので 50件インサートするのに約1秒かかり
現在構築中のアンケートシステムでは一人50問程度使うので
10人同時にアクセスしたら最大10秒待たされるわけで とても使い物になりません。
年間100万以上の予算を組んだサーバーでまさかロリポップにも劣る速度になるとはホント驚きです。

ルート権限もなくSSHでログインすることもできないのでログもろくに見られない状態なのですが 上記のような現象に心当たりがあったり解決方法をご存知の方おられませんでしょうか?
本来であれば別のサーバー屋と契約したいところなのですが OPENの日時考えると他のサーバー屋で再契約するには社内の稟議の問題もあり難しいです。
なんで客である自分がこんなこと調べないといけないんだーと かなり憤ってますが そうはいってもサーバー屋が原因であれプロジェクト失敗すれば私の心証も悪くなってしまいますし なんとか避けたいです。

何か心当たりがあれば教えてください。
よろしくお願いします。

A 回答 (4件)

>レンタルサーバー屋で専用サーバーを借りていますが


>仮想化環境ではディスク自体が
レンタルしているのは専用サーバか?
それともVPSか?
それとも専用サーバをレンタルしてその中で質問者が
VPSを構築しているのか?
    • good
    • 0

PostgreSQL データベースで大量データの登録・削除を行う場合、


適時 vacuum や vacuum full しないと極端に遅くなりますよ。

動作検証のため、大量データの登録・削除を繰り返している
ようでしたら、一度 vacuum full してみてはいかがでしょうか。
    • good
    • 0
この回答へのお礼

ありがとうございます。

新規契約したばかりのサーバーなのでバキュームするまでもない、と思っていて試していなかったので 試しにかけてみました。
が、残念ながら数分かわる状況は変わらず、でした、

ありがとうございました

お礼日時:2009/10/02 13:36

こんにちは、



僕は、pg_dumpのインサートに下記で解決しました。
※ 余談ですが、pg_dumpのコピーコマンドでは遅延は発生しません。

postgresqlを停止して、fsyncを on → off 変更後postgresqlを起動する。
インサート完了後、off → on にしてpostgresqlを再起動して使用しています。

参考URL:http://decide.cocolog-nifty.com/blog/2009/03/pg_ …
    • good
    • 0
この回答へのお礼

情報ありがとうございます。

ただ今回はPostgresに初期データを流し込むことではなく
動的にデータを登録するアンケートシステムの登録速度が問題なのでこの方法での対処は難しそうです。

しかし このファイルへの書き込みも遅い原因の一因なのは間違いないですが 上の1万行のSQL文って全部で500kbぐらいなんですよね。
いくら1万回にわけて書き込んでいるとは言え 500kb分のデータ書き込みにそこまでかかる、ってのも何か納得いかないものがあります。。。

SQLの文法除いた 純データは1行10バイト以内だし 1万行でも100kb
インデックス作ったってせいぜい倍の200kbぐらいだろうし・・・

お礼日時:2009/10/01 19:07

ありえるとすれば、このあたりでしょうか。


http://www.fiberbit.net/user/kunyami/postgresql/ …

phpPgAdminからの更新であれば、おそらく1行毎にコミットされているので、
毎回ディスクへの書き込みを実行していると遅くなるかもしれません。

同じ設定でも、仮想環境の場合はハードディスクへの書き込み自体を
キャッシュしておいてディスク自体には遅延書き込みを行う場合があるので、
パフォーマンスが圧倒的に違う というのも納得できます。
    • good
    • 0
この回答へのお礼

ありがとうございます。

なるほど。
設定がどうかは確認できませんが 確かに作成したプログラムもトランザクションありで実行すると心なしか実行速度があがったように思われます。

高アクセスが予想され 最悪サーバーダウンなどで完了しなくても一部だけでも登録できれれば、と今回はあえてトランザクションは使わずに実装したのですが そういうことならトランザクション使う方法での実行も検討してみる価値がありますね。

ただトランザクション使っても心なし早くはなるけれど たかが50件のインサートに0.5秒ぐらいはかかってるので 改善は見られるものの根本的な解決をはかるには サーバー側に設定を変えてもらうよう検討してもらうのが一番ですが・・・

情報ありがとうございました

お礼日時:2009/10/01 19:01

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す