AccessとLinux

中小企業での販売管理プログラムの作成についての所感

ホンチャンインストール9

2006年12月03日 01時39分48秒 | Weblog
PostgreSQLのチューニング

いつも悩むのはこのチューニングで今回は、特にSolaris側の設定が必要なのかどうかもわからず随分悩みました。結局、Solaris10ではカーネル側の設定は必要ないものとしました。(本当かいな!)
実際、良くわからないのですが、Solaris10のカーネルチューニングというsunから配布されているマニュアルを見ると、Solaris10ではそれ以前のバージョンと違い、各種パラメータが大きく設定されているので、自動チューニングで良いはずだ、といったような説明があります。また、調べても共有メモリの既定値がいくらになっているかさえわからず、へたにさわる必要もないかと思い、カーネルについてはチューニングなしで運用に入りました。
postgresql.confについてはメモリーを2Gbyte乗せたこともあって、下記の設定をデフォルトから変更しました。ログはこれまではとらないで、silent_mode = on で使用していましたが、今回は始めてSolarisを使用するので、当面、ログを取ることにしました。(今のところ、ログをみても特に問題ないので、近々、ログを取るのをやめようかと思っています。)

listen_address = '*'
max_connections = 64
shared_buffers = 50000 #400M
temp_buffers = 5000 #40M
work_mem = 10000 #10M
wal_sync_method = fdatasync
commit_delay = 10
effective_cache_size = 5000 #40M 2G*2%
random_page_cost = 3
redirect_stderr = on
log_filename = '%a.log'
log_truncate_on_rotation = on
log_min_error_statement = 'error'
log_line_prefix = '<%t %u %d %p>'

今回、チューニングにあたって『PostgreSQL完全攻略ガイド 改訂第5版 石井達夫著 技術評論社』を購入しました。第2版、第3版と続いて第5版を買ってしまいました。実際、大分変わっているので、チューニングに関しては第3版はPostgreSQL Ver8.1では参考になりません。特にメモリーは安価になって今回のように2Gbyte乗せても大した費用がかからなくなり、shared_bufferについての設定値は全く変わりました。8.1の性能からいうと100000くらいに設定するのがベストとのことです。取り敢えず、100000に設定してみて起動しないようなら減していくといった説明になっています。
実際やってみると100000では起動せず、半分の50000にしました。

Solarisのshmmaxを設定してやれば起動するようになるのかもしれませんが、まあ、前回はメモリー1Gbyteで4096にして運用していたので、起動しさえすれば50000でも良いかと思います。50000は少し大きすぎるくらいで、今のところ、運用時にswapしている様子もないので50000で行こうと思います

wal_sync_methodはいままで既定値のfsyncから変更したことはなかったのですが、最近Linuxではfdatasyncが普通になっているようなのでこうしました。Solarisの運用実績を調べてみると、open_datasyncというものもありました。

commit_delay=10は攻略ガイドの説明にマルチコアの場合の設定として紹介があるのでこうしました。

effective_cache_size = 5000 #40M 2G*2%
というのは共有バッファの設定ですが、Solaris10のカーネルチュニングに共有バッファの既定値は実メモリの2%という記述があり、2Gbyte×0.02=40Mbyteとしました。
random_page_cost = 3 はQUERY TUNIGの設定ですが、やはり攻略ガイドの説明を参考にしました。

結果として、更新前と比較して速度はあまり変わりませんでした。どちらかというと、別の理由で遅くなった感じがします。(後述)
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

ホンチャンインストール8

2006年12月03日 01時33分44秒 | Weblog
Solaris10でPostgreSQLの自動起動2

2.シェルスクプトpostgresqlの保存
同じく、rootで第2節の

#!/sbin/sh
から
exit $SMF_EXIT_OK
まで

をコピー&ペーストでテキストファイルにしてpostgresqlという名前で/lib/svc/methodに保存します。
それから

# chmod 555 /lib/svc/method/postgresql
# cd /var/svc/manifest/application/database
# /usr/sbin/svccfg import postgresql.xml
# svcs postgresql
# /usr/sbin/svcadm enable postgresql:default

これで自動起動するようになります。
自動起動を止める時は

# /usr/sbin/svcadm disable postgresql:defult

この後マニュアルではZoneの設定と、Solaris10以前のバージョンにPostgreSQLをインストールする方法について書いてありますが特に必要ないので読んでいません。Zoneについてはデータベースサーバーとしてしか使用しないので、特に必要ないと思いました。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

ホンチャンインストール7

2006年12月03日 01時32分24秒 | Weblog
Solaris10でPostgreSQLの自動起動1

PostgreSQLのインストールはLinuxの場合とほとんどかわりませんでしたが、自動起動のための設定は全く違います。これも

HOW to CONFIGURE and RUN POSTGRESQL ON SOLARIS10

の説明通りに行いました。
マニュアルでは

Starting PostgreSQL for the First Time

の次に

Integrate PostgreSQL with Solaris Service Management Facility

という節がありますが、この部分が自動起動の設定になります。Linuxの場合はpostgresという名前の起動スクリプトを作成して、

/etc/rc.d/init.d/

以下に保存して、chmod後

# /sbin/chkcoinfig --add postgres

としてやればよかったのですが、Solarisでは

Solaris Service Management Facility(SMF)

を使用します。postgresql.xmlを登録してpostgresqlというシェルスクリプトをsvcから追加する形になります。(この言い方は全くSolarisを知らない人間の言い方かもしれませんが)

1.postgresql.xmlの保存
自動起動の設定はrootでログインしたJava Desktop Systemから行いました。
まず、

http://www.sun.com/software/solaris/howtoguides/postgresqlhowto.jsp

から

Integrate PostgreSQL with Solaris Service Managemet Facility

の第1節の

<?xml version="1.0"?>
から
</service_bundel>
まで

をコピー&ペーストでテキストファイルにしてpostgresql.xmlという名前で

/var/svc/manifest/application/database

に保存します。

postgresql.xmlのファイルの作成をWindowsで行ってはいけません。内部コードが違うのでWindowsで作成したファイルを保存してもうまく動作しません。SolarisのGUI画面で作成して下さい。
実は、テストインストールの時はグラフィックチップをうまく認識していたので、Solaris上でpostgresql.xmlと次のシェルスクリプトpostgresqlを作成してうまくいったのですが、ホンチャンではGUIがうまく表示されないので、一端、Windowsで作成したファイルをsambaで移動した後、設定していました。これではうまくいきませんでした。(うまく表示されないGUI画面というのはVGA640×480になってしまった画面です。)
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

ホンチャンインストール6

2006年12月03日 01時27分35秒 | Weblog
3.いよいよinitdbです。
一端、rootをログアウトしてpostgresでログオンします。
インストールのところで書きましたが、Java Desktop Systemを使用していると、このままpostgresにログオンし直すと、マウスカーソルが見えなくなってしまいます。やりにくいので再起動して最初からpostgresでログオンすると、マウスカーソルが表示されます。再起動は乱暴なのかもしれませんが、init 6 ってやってます。

マニュアルでは

$ initdb -D /var/lib/pgsql/data

となっていますが、やはり環境変数PGDATAくらい設定しておきたいので、/export/postgres/.profileに

export PGDATA=/var/lib/pgsql/data
EDITOR=emacs

を追加しました。
2行目のEDITOR=emacsはPostgreSQLには関係ないのですが、後からcrond -eとして編集する際、emacsで編集したいので、postgresの標準エディタとして追加しました。
emacsだけでパスが通るか不安でしたが、/etc/profileに
PATH="$PATH":/opt/sfw/bin
を追加しているのがよかったのか、このままでemacsが標準エディタとして使用できました。

次に、

$ source .profile
$ initdb --no-locale --encoding=EUC_JP

としました。
もし、initdbのオプションを間違えて最初からやりなおしたい場合はrootで

# rm -Rf /var/lib/pgsql/data
# mkdir /var/lib/pgsql/data
# chown postgres:postgres /var/lib/pgsql/data

としました。いつもやってるパターンです。

後、マニュアルには

4.postgresの起動
5.psglの起動

とありますが、このあたりはLinuxで使用していた時と特に変わったこともありません。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

ホンチャンインストール5

2006年12月03日 01時24分30秒 | Weblog
2.次にPostgreSQLのデータディレクトリの設定です。
ソースからPostgreSQLをインストールする場合はデータディレクトリをrootで作ってchownやchmodしていましたが、PostgreSQLパッケージでインストールしているので、データディレクトリは最初からできています。マニュアルでは
rootで

# chown postgres /var/lib/pgsql/data
# chmod 700 /var/lib/pgsql/data

となっていますが、

# chown postgres:postgres /var/lib/pgsql

としました。というのは/var/lib/pgsql以下に

/var/lib/pgsql/backups
/var/lib/pgsql/data

と2つのディレクトリがあるので、backupsのグループと所有者が既定のrootというのもどうかと思いました。このあたりの操作はGUIを使って行っていますが、backups、dataのグループと所有者をプロパティからpostgresに変更しました。backups内のファイルも同様に変更しました。(これで良いのかどうかよくわかりません。私はこうしました。)

マニュアルには無いのですが、次からの操作はpostgresになって行わなければならないので、パスワードの設定をします。
rootで

# passwd postgres

としてパスワードを設定します。このパスワードはログインパスワードであると同時にWindowsのODBCドライバーに設定するパスワードになります。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする