2012年11月29日木曜日

PostgreSQLのSQLチューニングについて

青柳です。

PostgreSQLのSQLをチューニングするのに役に立つドキュメントは本家のドキュメントです。
ただし、本家のドキュメントは読みにくいところがあるので、用語の解説とわかりやすい説明のリンクをつけました。
本家を読みながらか、先にこちらを読んでから本家を読むとよいです。
あと、実際のチューニング例のリンクも追加しました。

第 14章性能に関するヒント
http://www.postgresql.jp/document/9.2/html/performance-tips.html

■用語
・シーケンシャルスキャン
テーブルを順に走査していく。テーブルの多数を読む場合、インデックススキャンよりも有効。インデックススキャンはインデックス用のデータ領域にアクセスするので余分にアクセスすることになる。例えば本の全てを読むのに一々目次を見ながら読むのは効率的では無いのと一緒。

・インデックススキャン
インデックス用のデータを検査し、本体のテーブルにアクセスする。検索する件数が少ない場合有効。例えば本で目的の章のみ見たい場合、全部読むよりも目次からページを探す方が有効なのと一緒。

・ビットマップインデックススキャン
テーブルの行に対応する位置を0/1で表現して検査する。フラグなど識別する値が少ないと(カーディナリティが低い)有効。


・ネステッドループ結合
2つのテーブルを行単位で逐次比較。
データが小さい場合向いている

・マージ結合
2つのテーブルをソートしておいてから(もしくはBtreeインデックスを使って)結合。
データ量が多い場合向いている

・ハッシュ結合
ハッシュ表を作成しておいてから2つのテーブルを結合
ソートメモリが多い場合向いている


[PostgreSQLウォッチ]第17回 新しい実行プラン・タイプによるPostgreSQL 8.1の性能向上
http://itpro.nikkeibp.co.jp/members/ITPro/oss/20050514/160833/?ST=oss&P=1
ビットマップスキャンについて詳しく説明している

基礎から理解するデータベースのしくみ(9)
http://itpro.nikkeibp.co.jp/article/COLUMN/20060113/227241/
ビットマップスキャンに対する図がわかりやすい

Oracle SQLチューニング講座(3)
SQLチューニングの必須知識を総ざらい(後編)
http://www.atmarkit.co.jp/fdb/rensai/orasql03/orasql03_1.html
結合の図がわかりやすい

■チューニングの例

Linuxトラブルシューティング
第3回 PostgreSQLを遅くしている犯人はどこだ?
http://www.atmarkit.co.jp/flinux/rensai/troubleshoot03/ts03c.html
わかりやすいチューニングの例

20090107 Postgre Sqlチューニング(Sql編)
http://www.slideshare.net/kwappa/20090107-postgre-sqlsql-presentation#btnNext
いささか古い記述があるがわかりやすい


0 件のコメント:

コメントを投稿