![Page 1: PostgreSQLをデフォルト設定のまま使っていませ …...その他のチェック項目:effective_cache_size OSのディスクキャッシュサイズの想定値 正しく設定していない場合、効率の悪い問い合わせプランを選択す](https://reader033.vdocuments.pub/reader033/viewer/2022060218/5f0679127e708231d4182ad0/html5/thumbnails/1.jpg)
1Copyright © 2005, Hiroki Kataoka
PostgreSQLをデフォルト設定のまま使っていませんか?
日本PostgreSQLユーザ会片岡 裕生
![Page 2: PostgreSQLをデフォルト設定のまま使っていませ …...その他のチェック項目:effective_cache_size OSのディスクキャッシュサイズの想定値 正しく設定していない場合、効率の悪い問い合わせプランを選択す](https://reader033.vdocuments.pub/reader033/viewer/2022060218/5f0679127e708231d4182ad0/html5/thumbnails/2.jpg)
2Copyright © 2005, Hiroki Kataoka
PostgreSQLのデフォルト設定とは?
■ PostgreSQLをインストールしただけの状態のこと
■ 設定内容はミニマム ロースペックのマシン環境でも動作するように。
![Page 3: PostgreSQLをデフォルト設定のまま使っていませ …...その他のチェック項目:effective_cache_size OSのディスクキャッシュサイズの想定値 正しく設定していない場合、効率の悪い問い合わせプランを選択す](https://reader033.vdocuments.pub/reader033/viewer/2022060218/5f0679127e708231d4182ad0/html5/thumbnails/3.jpg)
3Copyright © 2005, Hiroki Kataoka
ベンチマークについて
■ pgbenchによるベンチマークを実施 select×1+update×3という、更新割合の高いベンチマーク。
■ データ規模 500万行 800MBのデータサイズ
■ ハードウェア Pentium III 1.4G×2 メモリ512MB HDD
➔ ATA 20GB (OS用)➔ U160 SCSI 18GB 10000rpm×2 (データベース用)
■ ソフトウェア Red Hat EL 3.0 ES PostgreSQL 8.0.3
![Page 4: PostgreSQLをデフォルト設定のまま使っていませ …...その他のチェック項目:effective_cache_size OSのディスクキャッシュサイズの想定値 正しく設定していない場合、効率の悪い問い合わせプランを選択す](https://reader033.vdocuments.pub/reader033/viewer/2022060218/5f0679127e708231d4182ad0/html5/thumbnails/4.jpg)
4Copyright © 2005, Hiroki Kataoka
デフォルト設定でのパフォーマンス
デフォルト
0
20
40
60
80
100
120
140
160
180
1 2 4 8 16 32 64 128
クライアント数
トラ
ンザ
クシ
ョン
数/秒
デフォルト
![Page 5: PostgreSQLをデフォルト設定のまま使っていませ …...その他のチェック項目:effective_cache_size OSのディスクキャッシュサイズの想定値 正しく設定していない場合、効率の悪い問い合わせプランを選択す](https://reader033.vdocuments.pub/reader033/viewer/2022060218/5f0679127e708231d4182ad0/html5/thumbnails/5.jpg)
5Copyright © 2005, Hiroki Kataoka
PostgreSQL設定のチェックポイント
![Page 6: PostgreSQLをデフォルト設定のまま使っていませ …...その他のチェック項目:effective_cache_size OSのディスクキャッシュサイズの想定値 正しく設定していない場合、効率の悪い問い合わせプランを選択す](https://reader033.vdocuments.pub/reader033/viewer/2022060218/5f0679127e708231d4182ad0/html5/thumbnails/6.jpg)
6Copyright © 2005, Hiroki Kataoka
PostgreSQLエンジン
チェック1:共有バッファ
■ PostgreSQLが独自に用意しているディスクキャッシュ
■ デフォルトは1000ページ(8MB) ほとんどの場合、1000ページでは少なすぎる。 古いPostgreSQLのバージョンではデフォルトで32ページしかない。
データベース
共有バッファ
![Page 7: PostgreSQLをデフォルト設定のまま使っていませ …...その他のチェック項目:effective_cache_size OSのディスクキャッシュサイズの想定値 正しく設定していない場合、効率の悪い問い合わせプランを選択す](https://reader033.vdocuments.pub/reader033/viewer/2022060218/5f0679127e708231d4182ad0/html5/thumbnails/7.jpg)
7Copyright © 2005, Hiroki Kataoka
サーバ搭載メモリ
共有バッファ
共有バッファの調整
■ 調整のポイント 共有バッファは共有メモリ上に作成される。 1ページは8Kバイト。 基本的に大きいほど良い。 ただし、プログラム実行用のメモリは残しておく必要がある。
■ 例として、これを16000ページ(128MB)に増やしてみると… postgresql.confの編集
➔ shared_buffers = 16000
× 接続クライアント数PostgreSQLサーバの実行用メモリ
他のプログラム用のメモリ
OSの必要メモリ
![Page 8: PostgreSQLをデフォルト設定のまま使っていませ …...その他のチェック項目:effective_cache_size OSのディスクキャッシュサイズの想定値 正しく設定していない場合、効率の悪い問い合わせプランを選択す](https://reader033.vdocuments.pub/reader033/viewer/2022060218/5f0679127e708231d4182ad0/html5/thumbnails/8.jpg)
8Copyright © 2005, Hiroki Kataoka
共有バッファを増やすと…
0
20
40
60
80
100
120
140
160
180
1 2 4 8 16 32 64 128
クライアント数
トラ
ンザ
クシ
ョン
数/秒
デフォルト
チェック1
![Page 9: PostgreSQLをデフォルト設定のまま使っていませ …...その他のチェック項目:effective_cache_size OSのディスクキャッシュサイズの想定値 正しく設定していない場合、効率の悪い問い合わせプランを選択す](https://reader033.vdocuments.pub/reader033/viewer/2022060218/5f0679127e708231d4182ad0/html5/thumbnails/9.jpg)
9Copyright © 2005, Hiroki Kataoka
チェック2:トランザクションログバッファ
■ トランザクションログ(WAL)を書き込む際に用いられるバッファ
■ デフォルトは8ページ(64KB) トランザクションの規模に対してこれが小さすぎると、不必要なタイミン
グでトランザクションログの書き出しが行われてしまう。
トランザクションログ
トランザクションログバッファ
PostgreSQLエンジン
![Page 10: PostgreSQLをデフォルト設定のまま使っていませ …...その他のチェック項目:effective_cache_size OSのディスクキャッシュサイズの想定値 正しく設定していない場合、効率の悪い問い合わせプランを選択す](https://reader033.vdocuments.pub/reader033/viewer/2022060218/5f0679127e708231d4182ad0/html5/thumbnails/10.jpg)
10Copyright © 2005, Hiroki Kataoka
トランザクションログバッファの調整
■ 調整のポイント トランザクションログバッファは共有メモリ上に作成される。 1ページは8Kバイト。 コミット→コミット間のトランザクションログが格納できる大きさが理想。
➔ 複数のクライアントが同時接続していると、コミットは不定期かつ頻繁に発生するので、正確な見積もりは難しい。
ベンチマークテストで最適値を見つける。➔ とりあえず適当な大きさ(16~32くらい)に設定してもよい。
■ 例として、これを32ページ(256KB)に増やしてみると… postgresql.confの編集
➔ wal_buffers = 32
![Page 11: PostgreSQLをデフォルト設定のまま使っていませ …...その他のチェック項目:effective_cache_size OSのディスクキャッシュサイズの想定値 正しく設定していない場合、効率の悪い問い合わせプランを選択す](https://reader033.vdocuments.pub/reader033/viewer/2022060218/5f0679127e708231d4182ad0/html5/thumbnails/11.jpg)
11Copyright © 2005, Hiroki Kataoka
トランザクションログバッファを増やすと…
0
20
40
60
80
100
120
140
160
180
1 2 4 8 16 32 64 128
クライアント数
トラ
ンザ
クシ
ョン
数/秒
チェック1
チェック2
![Page 12: PostgreSQLをデフォルト設定のまま使っていませ …...その他のチェック項目:effective_cache_size OSのディスクキャッシュサイズの想定値 正しく設定していない場合、効率の悪い問い合わせプランを選択す](https://reader033.vdocuments.pub/reader033/viewer/2022060218/5f0679127e708231d4182ad0/html5/thumbnails/12.jpg)
12Copyright © 2005, Hiroki Kataoka
チェック3:ライタープロセス
■ 共有バッファ内のダーティページ(HDDにまだ保存されていないページ)をHDDへ保存し続けるバックグラウンドプロセス
■ デフォルトでは、200msごとに最大100ページを書き込む 更新が多いデータベースではライタープロセス自体が重くなる。
データベース
共有バッファ
:ダーティページ
PostgreSQLエンジン
ライタープロセス
![Page 13: PostgreSQLをデフォルト設定のまま使っていませ …...その他のチェック項目:effective_cache_size OSのディスクキャッシュサイズの想定値 正しく設定していない場合、効率の悪い問い合わせプランを選択す](https://reader033.vdocuments.pub/reader033/viewer/2022060218/5f0679127e708231d4182ad0/html5/thumbnails/13.jpg)
13Copyright © 2005, Hiroki Kataoka
チェック3:ライタープロセス
■ 調整のポイント 負荷の高いサーバの場合、ライタープロセスの仕事を軽くすれば表
面的な性能は向上する。➔周期を長くする➔ 最大書き込みページ数を少なくする
ライタープロセスの仕事を軽くしすぎると副作用もある。➔ CHECKPOINTが重くなる
■ 例として、これを200msごとに最大4ページに設定してみると… postgresql.conf
➔ bgwriter_delay = 200➔ bgwriter_maxpages = 4
![Page 14: PostgreSQLをデフォルト設定のまま使っていませ …...その他のチェック項目:effective_cache_size OSのディスクキャッシュサイズの想定値 正しく設定していない場合、効率の悪い問い合わせプランを選択す](https://reader033.vdocuments.pub/reader033/viewer/2022060218/5f0679127e708231d4182ad0/html5/thumbnails/14.jpg)
14Copyright © 2005, Hiroki Kataoka
ライタープロセスを調整すると…
0
20
40
60
80
100
120
140
160
180
1 2 4 8 16 32 64 128
クライアント数
トラ
ンザ
クシ
ョン
数/秒
チェック2
チェック3
![Page 15: PostgreSQLをデフォルト設定のまま使っていませ …...その他のチェック項目:effective_cache_size OSのディスクキャッシュサイズの想定値 正しく設定していない場合、効率の悪い問い合わせプランを選択す](https://reader033.vdocuments.pub/reader033/viewer/2022060218/5f0679127e708231d4182ad0/html5/thumbnails/15.jpg)
15Copyright © 2005, Hiroki Kataoka
チェック4:テーブルスペース
■ データベースオブジェクトを任意のディレクトリに配置するための機能 配置可能なオブジェクト
➔ DATABASE➔ TABLE➔ INDEX➔ SEQUENCE
■ デフォルトテーブルスペース“pg_default” データベースオブジェクトのデフォルトの格納先。 トランザクションログなどもここに格納されると考えてよい。
➔ I/Oの負荷分散の余地が残されている。
(例)CREATE TABLESPACE pgdata1 LOCATION '/disk1/pgdata1';CREATE DATABASE ~ TABLESPACE pgdata1;CREATE TABLE ~ TABLESPACE pgdata1;ALTER TABLE ~ SET TABLESPACE pgdata1;
![Page 16: PostgreSQLをデフォルト設定のまま使っていませ …...その他のチェック項目:effective_cache_size OSのディスクキャッシュサイズの想定値 正しく設定していない場合、効率の悪い問い合わせプランを選択す](https://reader033.vdocuments.pub/reader033/viewer/2022060218/5f0679127e708231d4182ad0/html5/thumbnails/16.jpg)
16Copyright © 2005, Hiroki Kataoka
テーブルスペースの活用
■ ベンチマーク用のデータベースを別HDDに配置してI/Oの負荷分散をしてみると…
HDD No.1トランザクション
ログなど
HDD No.2ベンチマーク用データベース
PostgreSQLエンジン
![Page 17: PostgreSQLをデフォルト設定のまま使っていませ …...その他のチェック項目:effective_cache_size OSのディスクキャッシュサイズの想定値 正しく設定していない場合、効率の悪い問い合わせプランを選択す](https://reader033.vdocuments.pub/reader033/viewer/2022060218/5f0679127e708231d4182ad0/html5/thumbnails/17.jpg)
17Copyright © 2005, Hiroki Kataoka
テーブルスペースを利用すると…
0
20
40
60
80
100
120
140
160
180
1 2 4 8 16 32 64 128
クライアント数
トラ
ンザ
クシ
ョン
数/秒
チェック3
チェック4
![Page 18: PostgreSQLをデフォルト設定のまま使っていませ …...その他のチェック項目:effective_cache_size OSのディスクキャッシュサイズの想定値 正しく設定していない場合、効率の悪い問い合わせプランを選択す](https://reader033.vdocuments.pub/reader033/viewer/2022060218/5f0679127e708231d4182ad0/html5/thumbnails/18.jpg)
18Copyright © 2005, Hiroki Kataoka
チェック5:チェックポイントセグメント数
■ トランザクションログのセグメント数がこの値に達するとチェックポイントが発生する
■ デフォルトでは3セグメント(112MB) 更新の多い環境ではやや少ない。
トランザクションログ
セグメント 1セグメント 2
:
データベース
共有バッファ
:ダーティページ
CHECKPOINT発行
PostgreSQLエンジン
![Page 19: PostgreSQLをデフォルト設定のまま使っていませ …...その他のチェック項目:effective_cache_size OSのディスクキャッシュサイズの想定値 正しく設定していない場合、効率の悪い問い合わせプランを選択す](https://reader033.vdocuments.pub/reader033/viewer/2022060218/5f0679127e708231d4182ad0/html5/thumbnails/19.jpg)
19Copyright © 2005, Hiroki Kataoka
チェックポイントセグメント数の調整
■ 調整のポイント トランザクションログはディスク上に作成される。 1セグメントは16MB
➔ 最大ディスク使用量は、その約2倍。 基本的に大きいほど良い。 ディスク空き容量と相談。
■ 例として、これを16セグメント(ディスク使用量は最大で264MB)に増やしてみると…
postgresql.conf➔ checkpoint_segments = 16
![Page 20: PostgreSQLをデフォルト設定のまま使っていませ …...その他のチェック項目:effective_cache_size OSのディスクキャッシュサイズの想定値 正しく設定していない場合、効率の悪い問い合わせプランを選択す](https://reader033.vdocuments.pub/reader033/viewer/2022060218/5f0679127e708231d4182ad0/html5/thumbnails/20.jpg)
20Copyright © 2005, Hiroki Kataoka
チェックポイントセグメント数を増やすと…
0
20
40
60
80
100
120
140
160
180
1 2 4 8 16 32 64 128
クライアント数
トラ
ンザ
クシ
ョン
数/秒
チェック4
チェック5
![Page 21: PostgreSQLをデフォルト設定のまま使っていませ …...その他のチェック項目:effective_cache_size OSのディスクキャッシュサイズの想定値 正しく設定していない場合、効率の悪い問い合わせプランを選択す](https://reader033.vdocuments.pub/reader033/viewer/2022060218/5f0679127e708231d4182ad0/html5/thumbnails/21.jpg)
21Copyright © 2005, Hiroki Kataoka
チェック6:ファイルシステムの調整
■ ファイルシステムがデータベース専用であれば、atime(アクセス時間の記録)を「off」に設定することでパフォーマンスが向上
■ 設定例 mountコマンドでは
➔ mount -o noatime ... /etc/fstabでは
➔ /dev/sdc1 /disk1 ext3 noatime 1 2
■ では、どうなるかというと…
![Page 22: PostgreSQLをデフォルト設定のまま使っていませ …...その他のチェック項目:effective_cache_size OSのディスクキャッシュサイズの想定値 正しく設定していない場合、効率の悪い問い合わせプランを選択す](https://reader033.vdocuments.pub/reader033/viewer/2022060218/5f0679127e708231d4182ad0/html5/thumbnails/22.jpg)
22Copyright © 2005, Hiroki Kataoka
ファイルシステムを調整すると…
0
20
40
60
80
100
120
140
160
180
1 2 4 8 16 32 64 128
クライアント数
トラ
ンザ
クシ
ョン
数/秒
チェック5
チェック6
![Page 23: PostgreSQLをデフォルト設定のまま使っていませ …...その他のチェック項目:effective_cache_size OSのディスクキャッシュサイズの想定値 正しく設定していない場合、効率の悪い問い合わせプランを選択す](https://reader033.vdocuments.pub/reader033/viewer/2022060218/5f0679127e708231d4182ad0/html5/thumbnails/23.jpg)
23Copyright © 2005, Hiroki Kataoka
その他のチェック項目:effective_cache_size
■ OSのディスクキャッシュサイズの想定値 正しく設定していない場合、効率の悪い問い合わせプランを選択す
ることがある。
■ デフォルトでは1000ページ(8Kバイト)。 ほとんどの場合で少なすぎる。
■ 調整のポイント サーバの平均的な空きメモリ量(サーバ搭載メモリ量の1/3くらい?)
を設定すると良い。➔主なOSでは空きメモリ量のほとんどをディスクキャッシュに利用す
るため。■ 設定例
postgresql.conf➔ effective_cache_size = 16000
![Page 24: PostgreSQLをデフォルト設定のまま使っていませ …...その他のチェック項目:effective_cache_size OSのディスクキャッシュサイズの想定値 正しく設定していない場合、効率の悪い問い合わせプランを選択す](https://reader033.vdocuments.pub/reader033/viewer/2022060218/5f0679127e708231d4182ad0/html5/thumbnails/24.jpg)
24Copyright © 2005, Hiroki Kataoka
その他のチェック項目:VACUUM
■ PostgreSQLは追記型アーキテクチャ レコードの更新と削除では不要領域が増えてしまう。 時間と共に不要領域が増え、徐々に性能が低下。
➔ゴミ掃除が必要!
■ バキューム VACUUM
➔ゴミ掃除を行うためのPostgreSQL特有のSQL命令 vacuumdb
➔ VACUUMを行うラッパコマンド pg_autovacuum
➔ データベースを監視して自動的にVACUUMを行うコマンド。
■ 定期的にVACUUMを行う必要 cronなどで定期的にデータベースのゴミ掃除を行う。
➔常に最適なパフォーマンスでPostgreSQLを使おう!
![Page 25: PostgreSQLをデフォルト設定のまま使っていませ …...その他のチェック項目:effective_cache_size OSのディスクキャッシュサイズの想定値 正しく設定していない場合、効率の悪い問い合わせプランを選択す](https://reader033.vdocuments.pub/reader033/viewer/2022060218/5f0679127e708231d4182ad0/html5/thumbnails/25.jpg)
25Copyright © 2005, Hiroki Kataoka
PostgreSQLを最大限に使い切りましょう!
0
20
40
60
80
100
120
140
160
180
1 2 4 8 16 32 64 128
クライアント数
トラ
ンザ
クシ
ョン
数/秒
デフォルト設定
調整後
ご清聴ありがとうございました