大規模データベース運用のノウハウ

このQ&Aのポイント
  • データベース運用のノウハウを紹介!Linux + PostgreSQLで数10万件のデータを保持し、効率的な処理を実現する方法について解説します。
  • データベースのパフォーマンスを向上させるための施策やテーブル設計について詳しく解説。JDBCの活用やキャッシュメモリの設定方法などを紹介します。
  • データベースのチューニングに関するアドバイスを求める質問。Oracleの導入やSQL発行の回数を減らす方法など、パフォーマンス向上のヒントを探ります。
回答を見る
  • ベストアンサー

大規模データベース運用のノウハウ

Linux + PostgreSQLにて、1台あたり数10万件のデータを保持するデータベースの運用を考えています。フロントエンドからのデータの取得と更新が同程度の頻度で発生するものです。 そこで、テスト用のSQL文を発行して負荷を計測してみているのですが、必要とする処理件数の1/10程度しか処理しきれないことが分かりました。 ただいまSQLレベルで効率的な問い合わせ方法を試行錯誤している状態ですが、根本的な部分でデータベースのチューニングについても理解していないことが不安になり、こちらで質問させていただこうと思いました。 一般的に、データベースのパフォーマンスを向上させるためにはどういった施策が有効なのでしょうか? 当方で検討しているのは以下のような点です。 ・JDBCでのPreparedStatementの使用。ただ、同じ問い合わせを繰り返すことは少なく、10件程度の問い合わせに使用するだけだと大きな変化は見られず。 ・データベースのキャッシュメモリ(postmaster -Bで指定する共有メモリバッファ)を大量に確保し、ディスクアクセスの頻度も少なくなるように設定する(postmasterの-o '-F'オプション)。 ・テーブルの柔軟性を犠牲にしてでも、SQL発行の回数を極力減らすようにすべきではないか。 ・実はOracleにすると劇的に速かったりするのではないか。(まあ、予算の都合もあるのですが…) 個人的な興味のみによる質問でないことがバレバレかとは思いますが、詳しい方にアドバイスをいただければ幸いです。 また、参考になるウェブサイトや書籍を紹介していただいても助かります。

質問者が選んだベストアンサー

  • ベストアンサー
  • MovingWalk
  • ベストアンサー率43% (2233/5098)
回答No.1

私はノウハウがないので、とりあえず参考URLを。 特に、  ユーザーズガイド  11. パフォーマンスに関するヒント あたりは見られましでょうか。 他には、Googleで「PostgreSQL チューニング」を検索すると、いっぱい出ますからその中から適当なものを探してください。 関連のMLに参加して聞くのもいいかもしれません。

参考URL:
http://osb.sra.co.jp/PostgreSQL/Manual/PostgreSQL-7.1-ja/
mojimojio
質問者

お礼

PostgreSQLのユーザーズガイドは知っていたのですが、今回じっくり読み直してみると新たな発見があったりしました。 アドバイスありがとうございました。

mojimojio
質問者

補足

ほったらかしにしていて申し訳ないです。

関連するQ&A

  • データベースの質問です

    phpでサイト構築を考えておりますが、データベースをmysqlかpostgresか、マイクロソフトのSQLサーバのどちらが早いのか検討しています 一日のデータの件数を5万件入れて、そのデータをselect、insert、updateなどするときに mysqlかpostgresのマイクロソフトのSQLサーバのどちらが早いのか、良くわからなくて、皆様の知恵をお借りしたいです。 シンプルに、データの件数での処理の速さで考えております。 例えば、10万件のデータをinsertする 10万件のデータを、updateする 10万件のデータを、登録する あと、どの程度データを各データベースに入れると重くなってしまうものなのか・・・ 宜しくお願い致します

  • JDBCでのinsertについて

    JDBCを使ってDBを扱います。 データベースはPostgresqlです。 Servlet+JSP+Beanで開発しているのですが、 以下のようなinsert処理をBeanで行っています。 String sql_insert = "INSERT INTO tal_ks(cd,kbn)" + " VALUES(" + vl1 + ",'" + vl2 + "')";System.out.println(sql_insert); System.out.println("SQL文発行"); int in = stmt.executeUpdate(sql_insert); System.out.println("(SQL文発行後"); ・ ・ ・ これを行うと、例外処理には流れず 実行したかのように見えるんですが、 実際はデータがはいっておりません。 このSQLと同じものをpsqlで直接実行すると insert できました。 これは、どういうことが原因なのでしょうか? 教えていただきたいです。

    • ベストアンサー
    • Java
  • SQLクエリでデータベースが壊れる?

    AccessアプリでSQL Serverデータベースを更新しています。 データベースをODBCデータソースとして登録して、AccessdeそのODBCデータソースへのリンクテーブルを作っています。 データベースが何回か壊れたのですが、AccessVBAから発行したリンクテーブルへのSQLクエリでデータベースが壊れるようなことはあるんでしょうか? あるとしたら、そのクエリを発行すると必ず壊れると思うんですが・・・。 同じAccessアプリを使っても、データベースが壊れない環境もありますし・・・。 データベースが壊れた原因がわからなくて困っています。 Windows 7、SQL Server 2008 R2 Express です。

  • 高速なデーターベースは?

    今ネット上でcgi/perlをつかって会員データーをcsv形式でデーターベース化しています。 1万件ほどなの問題ないのですが、これが10万件やそれ以上になってきた場合より高速なデーターベースが必要となるのでその際早いデーターベースに変更したいのですが、どのデーターベースが速いと思いますか? 一概には言えないと思いますが、mysqlやpostgresqlなどなど。 mysqlは使ったことがあるのですが大量なデーターは扱ったことがないので実際の速度は体感してません。

  • Javaでデータベース(PostgreSQL)に接続したいです

    学校でJavaの勉強をしています。この前、DB(PostgreSQL)に接続しました。 勉強のため、家のPCでもDBに接続できるようにしたいです。 自分で試してみましたが、上手くいかないので、知識をお持ちの方、どうかご教示ください。 ・Javaのバージョン     JDK1.5.08 ・PostgresSQLのバージョン  PostgresSQL8.2 ・OS               WindowsXP このサイト http://jdbc.postgresql.org/download.html から、postgresql-8.2-504.jdbc3をダウンロードしました。 ダウンロードしたファイルを、Program Files>Java>jdk1.5.0_08>jre>lib>ext と   Program Files>Java>jre1.5.0_08>lib>ext に 入れました。 (学校ではこのextというフォルダに入れていました。ちなみに学校のPCに入れたファイルは postgresql-jdbc3でした。) 学校の環境ではデータベースにアクセスできました。なので、SQL文とDBに接続するための Javaのコードは正しいと思います。 しかし実行すると、NullPointerException というエラーが出ます。 ファイルを入れた場所が間違っていると思うのですが、postgresql-8.2-504.jdbc3は どのフォルダに入れればよいのでしょうか。 解決する知識をお持ちの方、どうかご教示願います。 宜しくお願いいたします。

    • ベストアンサー
    • Java
  • いま自宅(linux)でPostgresqlでデータベースを構築し、1

    いま自宅(linux)でPostgresqlでデータベースを構築し、10万件規模のデータを管理しています。 このデータは日々更新されるのですが、この更新情報を 外部のレンタルサーバ内のPostgresqlに簡単にコピーする方法はないでしょうか? レンタルサーバ側はport=80/443くらいしか通さないので postgresqlに直接接続することができません。 今現在は、 自宅のpostgresqlからsql形式でdumpファイルを作成し、 その中身から比較的新しいSQLを抜き出し、  レンタルサーバ側のphppgadminをたちあげ、さきほどSQLをコピー&ペーストし実行 という面倒なことやってます。 上記を解決する ソフトやツール or レンタルサーバに置くWebアプリサンプル or 参考情報 などあればおねがいします。

  • PostgreSQLとMySQL

    データベースの学習のため、 PostgreSQLかMySQLを利用しようと考えていますが、 どちらにするか決め手が無く、悩んでいます。 利用方法はプログラムからSQL文を発行し、 データの取り出し、書き込みを行う程度なので どちらでも特に何も問題は無いと思いますが、 「こっちの方がオススメ!」みたいなものはあるでしょうか?

  • すでにあるsqlファイルを使用して、データベースを作成する方法

    すでにあるsqlファイルを使用して、データベースを作成する方法 もらったシステム(html,php,sqlで構成されるシステム)を自分の環境で動かそうとしているのですが、データベースを作成できないため、先に進むことが出来ず困っています。 もらったシステムには、テーブルのsqlファイルや、そのテーブルに入れるデータのsqlファイルがありました。 わかりにくい文章ですいません。 どなたかご存じの方、ご教授お願いいたします。 OS: CentOS5.3 postgresql8.1.18 apache2.2.3 php5.1.6

  • データベースへの接続で困ってます

    JSPを関連させてcom.mysql.jdbc.Driverというドライバでデータベースに接続したいのですが、エラーが出てしまってどうすればいいかお手上げ状態になっています。プログラムを貼るので、何かおかしいとこがありましたら教えてもらいたいです。よろしくお願いします。 /*プログラム*/ <%@ page import="java.sql.*" %> <html> <head> <title>データを表示する</title> </head> <body> <% //データベースに接続する Class.forName("com.mysql.jdbc.Driver"); String url = "jdbc:mysql://localhost/sqldb?useUnicode=true&characterEncoding=SJIS"; String user = "matsuzaki"; String password = "matsuzaki"; Connection conn = DriverManager.getConnection(url, user, password); //データを取得する Statement st = conn.createStatement(); String sql = "SELECT * FROM cd"; //実行するSQL ResultSet rs = st.executeQuery(sql); //データを全件表示する out.println("<table border=1>"); while(rs.next()){ out.println("<tr>"); out.println("<td>" + rs.getInt("name") + "</td>"); out.println("<td>" + rs.getString("artist") + "</td>"); out.println("<td>" + rs.getInt("price") + "</td>"); out.println("</tr>"); } out.println("</table>"); //データベース接続を閉じる conn.close(); %> </body> </html>

    • ベストアンサー
    • MySQL
  • データベースソフトとは・・・

    情報処理の授業でデータベースについてレポートを書くことになりました。 課題の内容は「データベースソフトにはどのようなものがあるか列挙せよ」という漠然としたものなので、何から書けばよいか困っています。 まったくの初心者なので、自分なりに調べてみたのですが、顧客管理用など種類もたくさんあり混乱しています。 Access Oracle ファイルメーカー OpenOffice.org MS SQL Server PostgreSQL MySQL DocuWorks EXCEL 以上が自分で調べたものなのですが、これがすべてデータベースソフトなのかも自信がありません。 Access、Oracleが有名らしいのですが、他にも有名なものって何なのでしょうか。 市販でも、フリーソフトでもかまいません。 どうぞ回答よろしくお願いいたします。