• 締切済み

Postgresの高速化:ハードウェアの強化で

PostgreSQL8を使ってWEBのシステムを構築しています。 データの構造やアプリケーションの問題もあると思うのですが、 データ量が増えてきていて、SQLのクエリーの結果が遅くなっています。 その解決方法についての相談です。 アプリの対応で解決するのではなく、ハードウェアを強化して解決しようと考えています。 (新しいハードの購入を考えています。) が、 DBの高速化を狙った、ハードウェアのスペックアップてどこを強化すればいいのでしょうか、 ハードディスクの回転数? Raid構成の変更? メモリの増量? CPUの強化? 何処にお金をかけるのが一番最適でしょうか。 因みに今は CPU:XeonE5530_2.4GH_1p/4c MEM:6G HDD:SAS 15krpm 140G RAID:1 です。

みんなの回答

  • pakuti
  • ベストアンサー率50% (317/631)
回答No.3

どれくらいのクエリーが発生しており、DBのサイズはどれくらいなのでしょう? またWebへのアクセスはどの程度?? 単純に考えるとHDDのアクセスが1番足を引っ張りやすいです 140G2本でRaid1ですか? この手のサーバーなら最低でも4本でRaid1+0にするべきです。 余裕があるならば、6~8本にするべきでしょう。 実際のボトルネックがどこなのかが不明なので何とも言えませんが 単純にApache(?)やPostgreSQLの設定チューニング(SQLの最適化では無い)だけでも それなりの改善はされそうな気がしますが。。。 また、デッドロックが発生しまくっているような状況であれば 幾らハードにお金をかけても改善はされないかと思われます、年のため。

回答No.2

私も#1の意見に同意です。 正直、現段階でもハードウェアの交換で劇的に改善される見込みはないと考えられます。 ・ストレージの速度は、比較的高速です ・メモリーの量も少なくない ・CPUの性能は、この場合は関係がない クエリーを見直すのが当たり前だと思うんですけどね。 ご自身もデータの構造、アプリケーションに問題があると書いているくらいですから。 explainでクエリーの状態を見るだけでも、違うと思います。 あとは、memcachedとかのミドルウェアでの手段もあるし、 未だに出てくる PostgreSQL で vacuum を使わず遅いとかいう人も いるから、この辺もあるとは思うんですが。

  • gtx456gtx
  • ベストアンサー率18% (194/1035)
回答No.1

PostgreSQLのチューニングを行ったことはないですが・・・下記のような手順でチューニングすれば? 1.具体的に高速化したいSQLと目標の応答を明確にする。 2.#1のSQLを遅くしている原因を明確にする。 3.#2で判明した原因を改善し、目標の応答時間になるまで繰り返す。 一般的にはハードウェアの強化って、パラメータなどのチューニングで対応できないからハードウェアの強化なんですが、質問を読むと面倒だからと思えるのですが・・・ 単純にハードウェアの強化なら、下記のような可能性ありますが・・・現状分析なしに行うとお金を捨てるようなもんですよ 1.メモリの拡張 2.高速HDDへの交換  ・10Kを15Kへの高速回転化  ・大容量キャッシュへの交換 3.RAIDの見直し  RAID1からRAID0(ZERO)へ変更し高速化

関連するQ&A

  • エラーと改行について

    「PostgreSQL」カテゴリと迷ったのですが、こちらに書込みをさせて いただきます。 まだPHPもPostgreSQLもやり始めたばかりの頃に、ShiftJISでDBを作成 したのですが、Accessでのデータ操作が出来るようにEUCでDBを作り 直し、そちらにデータを移行する作業を行っています。 一旦CSVファイルにDBの内容を出力し、新しいDBにデータを書き込むと いう手順で行っているのですが、その際に 「Warning: PostgreSQL query failed: ERROR: Invalid EUC_JP character sequence found (0xa12c) in ~」 というエラーが発生し、一部のデータが書き込まれません。また、改行 部分が無効になっています。(書込み部分で「<BR>に変換したものを「\n」に 変換しています。) 色々と調べていますが、今ひとつ原因がつかめません。どなたか解決法を お教えください。よろしくお願いします。

    • 締切済み
    • PHP
  • ハードウェアRAIDをバイオスが認識しなくなりました。

    ハードウェアRAIDをバイオスが認識しなくなりました。 HighPonint社のRocketRaid640 http://www.highpoint-tech.com/USA_new/series_rr600.htm http://www.dirac.co.jp/highpoint/rr640.html というハードウェアRAIDカードを買って、SSD128GB(CSSD-S6M128NMQ)2枚でRAID0で自作PCに取り付けました。最初はPCのバイオスも認識して、いろいろいじってこれから起動できるようにしたんですが、突然、電源を入れると、PCのバイオスが一瞬出た後、カーソル点滅画面になりそこから動かなくなりました。 RAIDカードはPCI Express2.0×16の2つ目にさしてあります。VGAと入れ替えたり、各コネクタを確認したりしましたが、変わりありませんでした。CMOSクリアもしたんですが、同じでした。 日本の代理店にメールで問い合わせしたんですが、1週間になるのに返事がありません。(問い合わせに電話が無く、メールとFAXだけです) RAIDカードの故障でしょうか? よろしくお願いいたします。 PC構成 CPU i7 860 MEM CORSAIR CMX4G3M2A1600C9×2(8GB) M/B ASUS P7P55D-E EVO SSD CSSD-S6M128NMQ×2 HDD HDS721050CLA362×3 VGA Quadro FX380 電源 PRO87+ EPG600AWT OS Windows7 HomePremium 64bit

  • ソフトウェア・ハードウェアRAIDのメリット・デメリットについて

    はじめまして、いろいろ調べたのですが皆様にご意見いただきたく質問いたします。 現在、自作したキューブ型のPCを使用しております。 前々から動画編集(Premiere、AfterEffectなど)を行っておりますが、動画編集を行うとどうしてもより快適な環境がほしくなります。 CPUはPentium4 3.0C(HT対応)、メモリは512MB×2でデュアルチャネルです。 全体の作業を見ると、大きなサイズの動画を扱うのでHDDの性能に足を引っ張られてるように感じます。 HDDはHGSTの250GB(型番は忘れました)を使用してます。 そこでHDDのRAID0(ストライピング)でパフォーマンスを上げようと考えましたが、ハードウェアRAIDのほか、WindowsOSで用意しているストライプボリュームを使ってみるのも手ではないかと思いました。 別にOSの起動時間を早くしたいわけでは無いので、システムドライブをストライプできなくても構いません。 また、ハードウェアRAIDも以前使用していましたが現在はキューブ型PCを使用しているためPCIスロットの空きが厳しい状態です。(あるにはありますが、i-RAM用に考えてます) 予定では、現在使用しているHDDはそのままで、別途HDDを2つ購入することを考えてます。 ソフトウェアRAIDのデメリットはCPUに負荷がかかると聞きましたがどの程度でしょうか? 以前古いHDD(8GB程度)で試した際にはそれほどCPU負荷はかからなかったのですが、最近のHDDは転送速度も速いのでその分負荷もかかりそうですが・・・ なお、基本的にはRAIDしているHDDには作業データしか入れませんので事故でデータが消えても大丈夫です。 また、ソフトウェア・ハードウェアRAIDは基本的なことはわかりますが、経験者の方ならではのメリット・デメリット等、ご意見がありましたら教えていただければと思います。 よろしくお願いします。

  • Oracleでデータ取得処理を高速化するには?

    DBサーバー(Oracle10g)でCPU使用率が100%近くとなり、システムを調べたところ、どのSQL文が遅いかを特定する事はできました。 SQL文の見直しはするとして、それでも改善できない場合、高速化にはどのような手立てをするものなのでしょうか? 自分の考えでは↓を考えています。 ・SQL見直し ・VIEWを使う あらかじめ特定のテーブルを結合しておけば速くなる?と思っています ・ストアドプロシージャーにする すいませんがよろしくお願いします。

  • sql文のヵウント関数について

    sql文のcountを使い、humanテーブルのレコード件数を取得し出力したいのですが、 Object of class SQLite3Result could not be converted to string in のエラーが出て困っています。 (1)humanテーブルのレコード件数を表示する方法を教えてください。(sql文はうまく動いているのが確認できているので、表示する方法を教えていただきたいです。データベースの接続も正常です。) (2)sqlの出力って配列のみなのでしょうか? <?php // 変数の初期化 $db = null; $query=null; $con =null; $db = new SQLite3("test.db"); $res = $db->query ($sql); // データの取得 $query = "SELECT count (id) from human"; //クエリを実行 $con = $db->query($query); //データの件数を表示する print $con; ?>

    • ベストアンサー
    • PHP
  • oracleのアーカイブの必要性

    現在、oracleでDBを構築しています。 DBサーバーのHDDはハードウェアRAIDを組んでいます。 このような状況でも、oracleのREDOログをアーカイブモードにする必要はあるでしょうか? (私の考えでは、障害が発生してもRAIDを組んでいるのだから、  データは守られると思っているのですが・・・認識を誤ってるかな?)

  • 配列に配列を足すことはできるか?

    PHPを使ってMYSQLのデータを吐き出すプログラムを作っています。 $re=mysql_query(SQL命令1); でDBに命令し $kekka=mysql_fetch_array($re) で、配列に代入 $re=mysql_query(SQL命令2); でDBの別テーブル(データ型やカラム数は同じ)に命令し $kekkaに情報を足すということがしたいのですが、どのように書けば$kekkaにデータが蓄積されていくのでしょうか?

    • ベストアンサー
    • PHP
  • 最も効果の大きいパソコン最適化ソフト

    メモリやCPUの増設やRAID0のようなハードウェアの強化に頼らずソフトの力のみでWindowsの動作を早くするならばもっとも効果の高い高速化ソフトはどれですか?フリーでもシェアでも1万円以下なら何でもかまいませんので教えてください。

  • SQLが遅い、CPUスペックあげて解決する??

    MYSQLですが、現在4000万レコードほどあるDBで単純な結合SQLを実行してまして、だいたい20分くらいかかってます。 もちろんインデックなども貼っており、 SQL自体も複雑なクエリではないです DBを整理しろなどの意見もあると思いますが そこはとりあえずおいといて、スペックをあげて解決するかが知りたいです。 現在、CPU 2コア、2G程度のwindowsサーバ2012r2 同時使用接続ユーザが最大8人程度です。 CPU 3コア、6G程度と CPU 4コア、4G程度 が同じくらいの料金アップなのですが、 どっちが良いでしょうか、、

  • PEAR DBのupdateについて

    PEAR DBにて複数のデータを一度にUPDATEにて更新しようと思っているのですが、うまくいきません。 foreach($data as $value){   $SQL = "update `table_name` set `id` = '" .addslashes($value). "';"; } $res = $this->db->query($SQL); まず、update分をデータ分foreachにて溜め込み、一気にクエリを投げております。insert文の場合はうまく処理してくれるのですが、updateの場合はエラーが返ってきてしまい、処理してくれません。updateの場合、PEAR DBでは不可能なのでしょうか? お分かりになる方、ご教授ください。よろしくお願いいたします。

    • 締切済み
    • PHP