OSDL DBT-1によるPostgreSQLの設定ファイルのチューニングに関する考察

【1.概要】

 PostgreSQL8.0,PostgreSQL8.1の設定ファイルのそれぞれのパラメタを変更してDBT1を実行し、設定ファイルをデフォルトのまま 実行させたBT値と比較した。
 また、設定ファイルのパラメタの中で、幾つかのパラメタ指定値についてDBT1の特徴だった部分についても、考察する。

【2.測定結果】

 PostgreSQL8.0,PostgreSQL8.1の設定ファイルのそれぞれのパラメタを変更し,DBT1を実行させたBT値を表2-1に示す。
表2-1 設定ファイル(postgresql.conf)のパラメタ値を変更させたDBT1の測定結果
パラメタ オプション値 Ver8.0.6 Ver8.1.2
BT/s デフォルト比(※1) BT/s デフォルト比
shared_buffers(※2) 500178.20.87200.60.95
1000207.31.01213.71.02
5000229.11.11 269.41.28
10000 226.91.10270.0 1.28
50000 222.91.08268.3 1.28
10000 222.91.08270.2 1.28
work_mem 64199.80.95207.30.96
10240212.11.00220.11.02
max_fsm_pages 3000(※3)211.71.00217.91.01
max_fales_per_process 50212.81.01216.51.01
5000210.91.00218.61.02
8.0 bgwriter_delay−(i)(i)200,(ii)0,(iii)0 213.41.01
bgwriter_percent−(ii)(i)200,(ii)100,(iii)5 211.21.00
bgwriter_maxpages−(iii)(i)200,(ii)100,(iii)50 213.51.01
8.1 bgwriter_delay−(i)(i)200,(ii)0,(iii)0,(iv)0,(v)0 215.41.00
bgwriter_lru_percent−(ii)(i)200,(ii)100,(iii)5,(iv)0,(v)0 218.11.01
bgwriter_lru_maxpages−(iii)(i)200,(ii)100,(iii)50,(iv)0,(v)0 218.2 1.02
bgwriter_all_percent−(iv)
bgwriter_all_maxpages−(v)
fysnc off209.20.99271.31.26
full_page_writes off210.00.98
wal_sync_method fsync212.01.00216.61.01
open_sync207.60.98261.41.22
wal_buffers 16212.21.00217.81.01
32213.41.01217.81.01
64212.11.00214.71.00
commit_delay−(i) (i)10,(ii)5212.81.01213.10.99
commit_siblings−(ii) (i)50,(ii)5211.11.00217.61.01
checkpoint_segments−(i) (i)30,(ii)100211.41.00217.61.01
checkpoint_timeout−(ii) (i)30,(ii)600213.31.00214.81.00
(i)30,(ii)900211.91.00218.11.01
deadlock_timeout 100000211.61.00215.81.00
max_locks_per_transaction 300211.91.00213.80.99
walログ格納ディスク変更 206.40.98268.71.25
noatimeオプション 211.81.03210.50.98
Elevator=deadline 210.51.00214.71.00

※1 デフォルト環境での測定値(eu=2000)は以下の通り。shared_buffersを観点とした測定はPostgreSQLの 統計情報を取得して測定したため,基準値もデフォルト環境に統計情報取得の指定を加えて測定した値 (カッコ内)で比をとった。
PostgreSQL 8.0.6 211.3(205.6)
PostgreSQL 8.1.2 214.9(210.3)
※2 shmmaxを一律1073741824に変更して測定した。
※3 DB初期ロードのシェル実行時に"NOTICE: number of page slots needed (28352) exceeds max_fsm_pages (20000)”のメッセージが出力されていたため,30000で試行した。

【3.考察】

3.1 shared_buffersについて

 本評価では指定値1000〜3000の間でBT値が大きく変化し,それ以上に指定値を増やしてもBT値の大きな変化は なかった。図3-1,図3-2,図3-3に,それぞれshared_buffers を1000,5000,100000で測定したPostgreSQL 8.1.2 のアクセス統計情報を示す。shared_buffersを1000から5000に増やすことにより,ブロックリード回数が減少して おり,5000から100000に増やしても1000と5000の間程の差異は無いことが分かる。 このことから,アクセス頻度の多いテーブル(主にitemとauthor)がバッファに載り切ってしまえば,それ以 上のそれ以上大きな値を指定しても,キャッシュ効果は性能に影響しないと言える。


図3-1.PostgreSQL 8.1.2 eu=2400,shared_buffers=1000の統計情報(table_info89.out)

                


図3-2.PostgreSQL 8.1.2 eu=2400,shared_buffers=5000の統計情報(table_info89.out)

                


図3-2.PostgreSQL 8.1.2 eu=2400,shared_buffers=100000の統計情報(table_info89.out)


 DBT1では,頻繁にアクセスされるitem,authorテーブルおよびインデクスが載り切る程度のバッファを確保 することが好ましいと考える。ただし,PostgreSQL 8.0.6の探針測定の結果では,shared_buffers50000,100000 のケースは10000のケースに比べわずかながらBT値が劣化していることもあり,無条件で大きな値を指定するの ではなく,データベース規模と実測値を考慮して最適値を求めることが必要と考える。


3.2 walログ格納ディスク変更について

 デフォルト環境とwalログの格納先を変更した場合のiostat -d の結果(DBT-1結果ファイルのio.txtから)を比較すると, データベースと更新ログの格納先を分けることにより,以下のようにI/O負荷(書き込みの負荷)がsdbからsdcに分散 されたことで、CPU利用率を向上させることができたと判断する(特にPostgreSQL8.1.2)。

表3-1 PostgreSQL8.1.2に対してDBT1を実行した時のiostat(io.txt)の集計(eu=2000)
wal出力先 デバイス tps blk_read/s blk_wrtn/s blk_read blk_wrtn
デフォルト sda0.570.6620.726.59207.33
sdb174.32236.053071.442362.2930738.96
sdc3.670.03103.580.271036.64
wal格納先変更(sdc)/td> sda0.720.5225.935.18259.83
sdb119.30281.902131.682823.6021356.37
sdc34.030.05961.820.479636.43


表3-2 PostgreSQL8.0.6に対してDBT1を実行した時のiostat(io.txt)の集計(eu=2000)
wal出力先 デバイス tps blk_read/s blk_wrtn/s blk_read blk_wrtn
デフォルト sda0.660.1019.361.01193.68
sdb165.41246.062984.282461.6529853.65
sdc3.320.0287.800.20878.32
wal格納先変更(sdc)/td> sda0.740.3923.973.90239.73
sdb99.69233.481719.752335.2617201.28
sdc24.860.07802.410.678025.88


表3-3 CPU利用率の変化
バージョン wal格納先 user system iowait idle
PostgreSQL8.1.2 デフォルト57.4116.0913.7212.77
walログ出力先変更73.2322.421.692.66
PostgreSQL8.0.6 デフォルト80.3111.053.385.26
walログ出力先変更79.4511.791.737.03

PostgreSQL 8.0.6については,デフォルト状態ですでにCPU利用率が90%以上と高く, iowaitはそれほど大きな値では無かったため,I/O関連のチューニングをしてもBT値の向上効果が 出なかったと考える(上記数値は、関連考察データ:SQLチューニング実施後のデータ)。

3.3 PostgreSQL8.1とPostgreSQL8.0の比較

 PostgreSQLの設定ファイルのパラメタ変更してDBT1を実行した結果,性能向上に効果のあったパラメタ値を 組合てDBT1を実行した場合と,デフォルトのままでDBT1を実行した場合の比較を,図3-4に示す。


図3-4.PostgreSQL 8.1とPostgreSQL8.0の設定ファイルチューニング後とデフォルト状態との比較


【4.まとめ】

 DBT1では,設定ファイル(postgresql.conf)のパラメタによるチューニングに関してshared_buffers, wal_sync_method,walログの格納先の3項目について効果があることが分った。また,PsotgreSQL8.0と PostgreSQL8.1を比較して,PostgreSQL8.1で性能向上改善が図られたことが検証できた。
br>
表4-3 DBT1に対するPostgreSQL設定ファイルのチューニング結果
設定ファイルのチューニング PostgreSQL8.0 PostgreSQL8.1
postgresql.conf shared_buffers10000100000
wal_sync_methodopen_syncopen_sync
wal格納先DB本体と異なるディスクDB本体と異なるディスク
shmmax335544321073741824
BT値(eu=3200) デフォルト値で実行した場合193.80216.20
設定ファイルパラメタの
チューニング値で実行した場合
216.20333.50
BT値の向上率11%54%


このデータの性能データ

関連する考察データ

⇒ コメント表示 ⇒ コメント登録