第5回: PostgreSQL安定運用のコツ2009、DBサーバーのパフォーマンスチューニング PostgreSQLは使ったことも運用したこともほとんどないので端から端までわからないかなと思っていたのだけど、みんながよく言うVACUUM処理の原理的な必要性が理解できたし、統計系コマンドが充実していることを知ることができたのでとても良かった。スライドが判りやすくまとまっている。前提知識として頭に入れておけば、いつか本格的にPostgreSQLを使わなければならなくなったときにとても役に立ちそう。 MySQLは一番業務で利用しているRDB。SIerの頃はOracleだったけれども、今となってはMySQLの利用経験の方が多くなっている。 まだ最後の章が読み切れていないのだけど、Linux-DB システム構築/運用入門 (DB Magazine SELECTION)がとても良本なので(読み終わった
2. アジェンダ • パフォーマンスと初期設定 • データベースの監視 • 性能劣化とメンテナンス • パフォーマンスチューニング(GUC編) • パフォーマンスチューニング(SQL編) • バックアップ&リカバリ 本日の資料は http://slideshare.net/uptimejp にアップしてあります。 Copyright 2009 Uptime Technologies LLC, All rights reserved. 4. PostgreSQLプロセス構造 • PostgreSQL 8.4の場合 [snaga@devpg01 ~]$ ps -aef | cat | grep ^snaga snaga 5282 1 0 20:15 tty1 00:00:00 /usr/local/pgsql/bin/postgres - D ./pgdata snaga 5283 5282
SQLインジェクションの進化形として、ブラインドSQLインジェクションという手法があります。通常のSQLインジェクションは、検索結果表示やエラー表示のところに、アプリケーションの想定とは別のテーブル・列の値を表示するものですが、ブラインドSQLインジェクションは、SQLの結果がエラーになる・ならないを1ビットの情報として悪用し、これを積み重ねることで、データベース内の任意情報を得ることができるというものです。 1ビットの情報が得る手段としては、SQLのエラー表示に限らないわけで、現実問題として、SQLのエラーが外部からは判別しにくい場合もあります。そのような場合の究極形として、時間差を利用するという手法があります。 MS SQL Serverには、waitfor delayという命令があって、時・分・秒指定でスリープさせることができます。金床本には、MySQLやPostgreSQLの場合の
PostgreSQL で簡易に MQ - Mi manca qualche giovedi`? を読んで、こりゃ素晴らしいと思ったので Perl モジュール化しました。 simple message queue using PostgreSQL. http://github.com/fujiwara/perl-queue-q4pg-lite/tree/master 割と簡易な Message Queue ということで、Lite って名前に。pg_advisory_lock() を使用してるので、PostgreSQL-8.2 以降でないと動きません。 インターフェースは Queue::Q4M とほとんど同じ……というか、コード自体を半分ぐらい Queue::Q4M から頂いています。 use Queue::Q4Pg::Lite; my $q = Queue::Q4Pg::Lite->conn
PostgreSQLで日本語が格納されているカラムをORDER BYでソートさせたら明らかにおかしい順序で返ってきた。 test=# select name from test_table order by name asc; name - 試験 てすと テスト てすとです 試験データ テストデータ test (7 rows) こんな感じ。 まぁlocaleとかcollateの問題なんだろうなーと思いつつもPostgreSQLではどうなってるのか知らなかったので、ぐぐる先生にお伺いを立ててみたら、どうやらデータベースクラスタの初期化時(initdb時)に指定したものが一生使われるらしい。変更不可(えー 追記:8.4からはcreatedb時に指定できるみたい。 現在の設定の確認 pg_controldataコマンドで確認できるらしい。 $ pg_controldata /var/lib/pg
「PostgreSQL で安くて早くてうまい MQ 作ってね」的ミッションがどこからともなく降ってきたので、色々調べて試してみたところ、案外よい方法が見つかったので、まとめてみた。 [4/24] 複数キューを扱う場合の方法を tableoid を利用するように更新。 [4/27] フィルタ条件を付ける場合の記法について追記(WHERE 句内の評価順の明示的指定) [4/30] 優先順位に ORDER BY は利用できない旨追記 鍵は advisory lock。PostgreSQL 8.2 以降の機能だ。 メッセージキューと言っても、安くて早いわけだからもちろんフルフルの高機能なわけなく、いろいろ制限がある。 receiver は複数可。メッセージは receiver の一つが受信する。ブロードキャスト/マルチキャストは対象外。 ack あり。ack せずに receiver が落ちた場合
37歳になりました.いい年こいて相変わらずいきます. PHPであればpg_pconnect、Java+TomcatであればTomcatのコネクションプール機構をそのまま、その他アプリケーションフレームワークのレベルで提供されるコネクションプール機構があるようならそれを、必ず使うべきだ。 pg_pconnect()ってこれね. PHP: pg_pconnect - Manual 経験上pg_pconnect()を使うと本気であまり接続が切れません.切れる条件としては多分この辺. httpdがMaxRequestsPerChildなりSEGFAULTの都合で死んだ PostgreSQL側の設定でtimeoutした initscriptなりで停止や再起動させた その上でhttpdって何をするかというと,いわゆるHTMLやXML(フィードなど)の生成処理をするだけじゃなく,画像の処理もするんですね
2007年07月10日23:27 カテゴリ技術-PHP PHP+PostgreSQLでEUC-JP出力は非常識!? 〜windowsでIBM拡張文字が文字化け PHPでプログラムを作成する場合、文字コードをEUC-JPで作成するケースが多いと思います。 SJISでソースは書けませんし、UTF-8は正直まだなじみが薄いといえます。 しかし... 今回の結論(突然ですが) PHP+PostgreSQLの環境でEUC-JPを使うと、Windows環境においてIBM拡張文字を正しく表示できずに文字化けを起こす。 表示させるには、出力文字コードをUTF-8やSJISとすること。 IBM拡張文字とは? JIS基本漢字(JIS X 0208)以外に定義される拡張文字のことです。 IBMによって定義された「IBM拡張文字」 (115〜119区) と、NECが自社のPC-9800シリーズ用に定義した「NEC
PostgreSQLをチューニングする機会があったので その時に調べたチューニング項目を備忘録として残しておきます。 バージョンの違いやサーバの規模などによっても 効果は変わってくると思うのであくまで参考程度のものですが。 ・shared_buffers 7系では8000〜10000程度まで引き上げる 8系では150000程度まで引き上げることが可能、100000程度が性能のピーク これに多く割り当てるよりOSのバッファ領域として使う方が性能が向上する テーブルサイズを割り出して設定するのがベスト 簡単に設定するなら搭載メモリ量の1/4、搭載メモリが多ければ1/2ぐらいでも可 ・max_connections 7系では256程度、8系では1000程度が性能のピーク ・work_mem(sort_mem) 適切なサイズに調整する、2048〜4096程度 プロセス毎
先日Oracleについての書籍をプッシュしておきながらこういうことを書くのもどうかと思うのですが、ここ数年ずっとPostgreSQLを使ってきて愛着は増す一方です。 一方、PostgreSQLは7.0から使い始めました。理由は率直に言って予算の問題です。当初はOracleと比較すると至らないところも確かにありました。MySQLもあったのですが「サブクエリの使えないRDBMSなんか嫌いじゃ!」(今はサブクエリも使えます)ということで、PostgreSQLを使ってました。 そしてPostgreSQL自体がどんどん成長してくるのと同時に、様々な案件をこなしていくなかで私が関わる規模の案件であれば、PostgreSQLで必要にして十分だと実感するようになりました。 私は10年ほど前にはERPのビジネスに携わっていた時期があります。SAPさんのR/3や当時のOracle Applications(今
こんばんは、牧野です。 前回、その前の前とPostgreSQLのチューニングについてでしたが今日もPostgreSQL関連で、PostgreSQLでのレプリケーションについてです。 MySQLの場合、別のソフトウェアを使わなくてもMySQLだけでレプリケーションを実現できますが、PostgreSQLの場合は別途専用のソフトが必要になります。 今回はそんなソフトの1つ、pgpool-II(以下pgpoolと書いています)を使ったレプリケーションを紹介します。 pgpoolを使うと、PostgreSQLで手軽にマルチマスタ方式のレプリケーションを実現できます。 他にも、コネクションプーリング、アクティブスタンバイ、slony-I等のレプリケーションソフトと組み合わせたマスタ・スレーブ方式のレプリケーション、時間がかかる検索処理を複数サーバで並列処理させる(パラレルモード)というようなことができ
テーブルロックモードの関係を把握しやすいように図で表してみました。 () 内はそのロックを自動的に獲得するクエリです。 ■ロックとトランザクション SQL における排他制御の方法として、トランザクションとロックが挙げられます。 複数のクエリをトランザクションでひとつにまとめることで、(デフォルトのトランザクションレベル READ COMMITTED の場合)コミット済みの結果のみ参照されるようになり、トランザクション中の内容を外部からは見えなくなるため一見アトミック性が守られるように見えます。 しかし、複数の接続で同時に既存の同じレコードに対して参照と更新を分けて実行する場合などはトランザクションだけでは限界があるのも事実です。 たとえば以下のテーブルを考えてみましょう。 CREATE TABLE foo ( id int NOT NULL, — 商品の識別番号 price int NOT
オープンソースのPostgreSQLでシステムを構築 10代、20代を中心に急激な普及を見せる“ケータイSNS”。会員数が865万人に達する「モバゲータウン」や月間118億ページビュー(PV)を誇る「mixi」(約6割がモバイル経由)など、大手SNSサイトが存在感を増している(数値はいずれも2007年12月現在)。そうした中で先行組を激しく追撃しているのが、オープンドアが運営する携帯電話向けのSNSサイト「大集合NEO」だ。 2007年1月にスタートした大集合NEOは、SNSのみならず、アバターやゲーム、小説、動画、日記、チャットなどのサービスをすべて無料で楽しめるのが特徴だ。アバターやサイト内通貨の使い勝手の良さで先行サイトと差別化を図り、2007年夏に50万人だった会員数が2008年2月時点で2倍の100万人に達している。 その大集合NEOのシステム基盤を担っているのは、MySQLとオ
先日のデブサミで華々しく散ってきた森川です。最近 8.3 がリリースされたPostgreSQLにLudiaという全文検索モジュールを組み込んで、MySQLのTritonnと比較してみました。 インストールについては、それぞれのサイトに書いてあるので割愛します(Ludia、Tritonn)。 今回使用したテキストは青空文庫から太宰治の作品を拝借しました。以下のようなテーブルに作品名と内容を入れています。 PostgreSQL: CREATE TABLE ludia_test ( id serial primary key, name text, contents text ); CREATE INDEX fulltext_contents_index ON ludia_test USING fulltext(contents); MySQL: CREATE TABLE ludia_test
\閉鎖予定のサイトも売れるかも?/ アクセスがないサイトもコンテンツ価値で売れる場合も… ドメインの有効期限を更新してサイト売却にトライしてみましょう
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く