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

PostgreSQLを使ったWebシステムを構築しているのですが、検索データが沢山ある場合、
検索処理に時間がかかってしまって、顧客より改善をお願いされています。

とはいっても、高性能なハードウェアを購入する事ができないので、ソフトウェア側で
対策を講じたいと考えています。

色々調べていたら、pgpool-IIというオープンソースがあることがわかったのですが、
このpgpool-IIのパラレルクエリの機能を使う場合は、サーバーが複数必要になるのでしょうか?
それとも、サーバーは一台でもよくて、DBのノードを複数持たせればよいだけなのでしょうか?

ものすごく困っています。


初心者ですみませんが、よろしくお願いいたします。

●質問者: inu
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:dB postgreSQL Web オープンソース クエリ
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● JULY
●35ポイント

pgpool-II - pgpool Wiki

パラレルクエリに関して下記のように書いてますね。

複数のサーバにデータを分割して受け持たせ,それぞれのサーバに同時に検索問い合わせを投げて,問い合わせの処理時間を短縮するパラレルクエリが利用できます.特に大規模なデータを検索するときに威力を発揮します.

なので、サーバを複数台あることが前提です。

1台のサーバ上で複数の PostgreSQL サーバを動かす事も可能なので、原理的には、1台のサーバで pgpool-II のパラレルクエリ、ということもできるとは思いますが、パフォーマンスの改善には繋がらないと思います。

PostgreSQL パフォーマンスチューニングまとめ - 徒然なるままにBlog

まず、postgresql.conf のパラメータを確認する必要はあるでしょう。デフォルトのパラメータが、貧弱なサーバを前提とした値になっている事が多いです。

SQLチューニング(2) ? 実行コスト(EXPLAIN / EXPLAIN ANALYZE) — NPO法人 日本PostgreSQLユーザ会

それと、クエリーの確認です。ありがちなのは、検索にインデックスが使われていない、というケースです。検索条件に使われるカラムにインデックスを付けるだけで、劇的に改善される事は多いです。


2 ● GreenStar
●35ポイント

パラレルクエリはパーティショニングの一種! 単一サーバでも構わないが、複数のハードディスクを搭載して分散させるなどしないとオーバーヘッドのほうが大きくなって得られるものはないと言っても過言ではない!!

こまごま言うよりも! チュートリアルを見たほうが全体が掴めてよいよ!!

http://pgpool.projects.postgresql.org/pgpool-II/doc/tutorial-ja....


ネックがハードディスクへのアクセスであるならばpgpool等の採用を考えてみても良いとは思う! が、その前に、何が本当のネックかを見極める必要があるのでは??


検索に時間がかかるならば、まずはEXPLAINを発行するなどして遅いSQLを特定して修正したり! テーブル構成の見直しやインデックスの見直しなどの実施! 継承の利用を考えるなどPosthreSQL標準装備の範囲内で考え! 可能であればミドルウェアでのキャッシュなども考慮したり、可能であればOSのメモリ割り当てなども調整する!! ソフトウェアで出来る限りのチューニングを施してもダメなら分散処理も含めてハードウェアの増強を考える!! という流れになる。

どこまで対応済みかは判らないが、見直しをかける事を勧める


PostgrSQLのバージョンをあげることによって回避できる問題もある。最近の話ならば7.xということは無いと思うが可能であれば最新にあげる事を奨める。同じSQLでもスピードアップしているし8.4用にSQLを書き換えればさらに数倍以上のパフォーマンスを得られる場合もあるので、まだであれば8.4の機能について調べる事を勧める


PostgrSQLのマニュアルはフリーの中では他に類を見ないほど充実し、データベースをはじめた使う人から玄人まで非常に参考になるものであるからして、熟読必須!!

http://www.postgresql.jp/

関連質問


●質問をもっと探す●



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