人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PostgreSQLの質問です。

プログラムを1回起動させると複数のテーブルにINSERTが70回ほど走ります。日に最低でも50回ほどの起動が予想されるため、1日に3500回以上のINSERTが走ることになります。
※これ以外にもいくつかの処理が並行して走って
いますが、ここではこの条件でのみお考えいた
だければOKです。


少しでもDBへの負荷を軽減、スピードアップするために何らかの処置を取ろうと思いますが、何か効果的な方法があれば教えてください。


以下は案・条件・疑問です。
・プログラムからSQLを発行するより、
psql経由の方が軽い??(未確認)
・極力bindを使用する。
・DBとの永続接続
・ほぼリアルタイムで反映する必要があるため
cron+バッチは今回検討しない。

●質問者: katsube
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:BIND dB postgreSQL psql SQL
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● keisen
●20ポイント

正確に測定したわけではないので経験則になってしまいますが、

ご質問の環境ですと、PLSQLを使うのが最も妥当だと思います。

◎質問者からの返答

コマンドラインツールのpsqlではなく、言語のPL/pgSQLを使用した方が良いということですよね。

なるほど。わたしも計測したことないのですが、何からの言語(C,Perl,PHPなど)から問い合わせを行うより、PL/pgSQLの方が軽いor速いということでしょうか?


2 ● keisen
●20ポイント

> わたしも計測したことないのですが、

> 何からの言語(C,Perl,PHPなど)から問い合わせを行うより、

> PL/pgSQLの方が軽いor速いということでしょうか?

だと思います。

複数回のINSERTを実行するのであれば、

どのような言語を使っても外部から複数問い合わせすることに変わりは無いと思います。

それよりも、PL/SQLで一気に処理してしまった方が早いように思います。

実績値が無いので空想の域をでませんが(^^;

◎質問者からの返答

なるほど、なるほど。

keisenさんのお話をお伺いすると、確かにDB内部に用意された機構をダイレクトに使用した方が速そうな印象ありますね(^^;



私も調べてみますが、もしどなたかが実験されているページなどあれば教えてくださいませ>皆様


また他のアプローチ方法なども募集しています。


3 ● tombe
●20ポイント

1回あたり70回のINSERTということでしたら、INSERTの代わりにCOPYコマンドを使うと多少速いかもしれません。

http://www.postgresql.jp/document/pg721doc/reference/sql-cop...

上記URLの概略では「ファイルとテーブルの間でデータをコピーします。」とありますが、stdinへのパイプが使えますのでアプリから動的データを流し込めばOKです。

「1日に3500回以上」というのは、それほど高い負荷では無いような気もしますが参考までに。

◎質問者からの返答

>stdinへのパイプが使えますので

なるほど!

COPYコマンドは盲点でした。標準入力が受け取れるならメモリ上で完結しそうですね。これも実験してみたいと思います。


> 「1日に3500回以上」というのは、

> それほど高い負荷では無いような気も

> しますが参考までに。

ここ三?六ヶ月程度でこの10倍以上になるんじゃないかという予測が立っているので、打てる手は今のうちに打っておこうという意図で質問してみました。


4 ● mass3
●20ポイント

・サーバコンピュータのメモリの大きさやディスク性能によって、

COMMITのタイミングで性能が変わります。

以下のように変えて性能測定をしてみてはいかがでしょうか?

・INSERT時にはインデックスが多いと負荷になります。

SELECT文を洗い出して、EXPLAINで実行計画を見て、

有効に使われないインデックスはドロップしましょう。

・「極力bindを使用する」は正しい対処です。

プリペアされたSQLを使用することで、

PostgreSQL内部での構文解析が1回ですみます。


5 ● b-wind
●20ポイント

INSERT が多いということですと、COPY または psql コマンドの \copy を使うのが常套手段ですが、PostgreSQL 本体のチューニングも視野に入れてはいかがでしょうか?

このばあいトランザクションログバッファやライタープロセスのチューニングが有効に思えます。

https://www.stackasterisk.jp/tech/dataBase/postgresTuning01_...

http://www.thinkit.co.jp/free/tech/10/1/1.html

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ