2011年2月28日月曜日

PostgreSQLの勉強会

忘れないうちにメモ。
こないだPostgreSQLの勉強会に行ってきた話。

初心者〜中級者向けと書いてあったのでデータベースの仕組み的なアレかと思ったらPostgreSQLの仕組みの話だった件。データベースが初心者の俺にもなんとなくわかったような感じはしたが、問題がひとつ、俺には「DBMSの機能」なのか「PostgreSQL固有の機能」なのかさっぱりわからない。

でもまぁ似たようなもんだと思うのでメモっとく。

構成としては10個のプロセス、4つのメモリ、5つのファイルから成っているらしい。
プロセスを監視するときは監視漏れにご注意を。

レコードを探すときはとりあえず共有バッファを先に探すらしい、ということは同じ命令だとキャッシュが残っているので高速ということか。
ということは、場合によっては一行ずつselectするよりも一度複数行まとめて呼び出した後にselectしたほうが早いこともあるってことか?

レコードの削除は削除フラグが立つだけで、VACUUMというのをしないと削除されないらしい。つまりDELETEしてもファイルサイズは減らないし、UPDATEすると増える。

インデックスは二分木らしい。なるほどそれで「数字よりも文字列のほうが検索早いよ」なんて情報も出てくるのね。

ユーザが入力したクエリは最適化されるらしい。最適化されたクエリプランは「EXPLAINコマンド」で見れるらしい。ここではかかるコストも見れる('時間'ではなく'コスト'なので相対値)らしいのでチューニングするときに見るといいらしい。


などなどあって、パフォーマンスは「単一クエリのレスポンス x クエリの同時実行数」と「ハードウェア」でだいたいきまるらしい。
なのでチューニングは「遅かったり実行数が多かったりするクエリをlog_min_durationオプションなどで探す」「クエリプランをEXPLAINで確認」などをすると原因特定しやすいんだとか。


あとは冗長化の話。
ストリーミングレプリケーションとかいう機能があって、「あるクエリを複数のデータベースに同時に適用する」ことができるらしく、まったく同じ状態のデータベースを複数用意できるらしい。
ホットスタンバイってやつですかね?なんか違う?新機能なので事例が少なくて、今使うと勇者に慣れるんだとかw


まぁおおまかに言えばそんな感じの話だった。
データベースの勉強ちゃんとやっとけばよかった。。。



0 comments:

コメントを投稿