AccessとLinux

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

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

2006年12月03日 01時47分19秒 | Weblog
Solaris10を使用してみての感想

Vine3.2からSolaris10に変えた原因というのは、DMAエラーがでてカーネルごとOSが落ちてしまうためでした。そういう意味ではPCと合わせて、Solaris10に変えたのは成功でした。カーネルごと落ちるというこことは無くなりました。しかし、ODBCドライバーの接続の問題があって、少し使用感が落ちたのが残念です。

sambaにも問題があって、pg_dumpしたデータは150M程度あるのですが、/export/pub/に保管したダンプデータをバックアップ用にsambaを使用してWindowsパソコンに持ってこようとすると、ネットワークエラーが出て、ファイルのコピーができません。ftpではgetできます。小さい数十Mbyte程度のファイルならsambaでも問題ないのですが。

このようなことはVine3.2ではありませんでした。Vine3.2ではコピー中にPostgreSQLを使用していると、DMAエラーがでてカーネルごと落ちていましたが、他に何も使用していない状態でsambaでのファイルコピーは問題ありませんでした。Solaris10ではカーネルごと落ちたりしませんが、他に何も使用していない状態でsambaでファイルコピーをしているとネットワークエラーがでます。これはNICのドライバーの問題かもしれません。
(同様にODBCのソケット切断の問題もNICのドライバーの問題かもね)

Solaris10では64bit化したのですが、その効果は全くなかったと言っても良いと思います。大して速度は上がりませんでした。速度についてはPostgreSQL Ver8.1がかなり高速なので、ボトルネックがアプリケーション側ではなく通信速度側になっているためだと思います。それなら、次回は100BaseTではなく1000BaseTにしなければならないのかな。回線ごとやり直しかい!

やはりSolarisは少し難しいです。特に、NICやVideoCard周りはドライバーが限定されているか無いという状態で、新しいPCではインストールそのもので行き詰まってしまう場合もあるかと思います。
「なら、SPARC買えよ!」ってことですか。

Vine3.2でPCだけ変えた場合は試していないのですが、もし、Vine3.2で運用できるなら、それがベストだったかもしれません。
まあ、unixの天才ビル・ジョイのSolarisを使えただけでも幸せか~
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

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

2006年12月03日 01時43分21秒 | Weblog
ODBCドライバー

前回の更新時(PostgreSQL Ver7.3からVer8.1に変更した時)にも同じようなことがあったのですが、MS-AccessからODBC経由でPostgreSQLでアクセスしていると、しばらく操作しないでほおっておくとソケットが切れてしまう、という現象がありました。

Vine3.2の時はODBCドライバーをUnicode 8.01.02.00に変更することで、この現象が止まりましたが、同じPostgreSQL Ver8.1.3+Unicode 8.01.02.00でもSolaris10では操作なしで時間が経つとソケットが切れてしまいます。最新版のODBCドライバーUnicode 8.02.02.00を使用しても直りません。

結局、今度こそKeepAliveの問題のようなのでMS-Access側でタイマーイベントを使用して1分おきに簡単なクエリーを飛ばしてやることで、ソケット切断をふせいでいます。これで販売管理プログラムが凍ってしまうということはなくなりましたが、Vine3.2の時とは違い、しばらくするとソケットを再接続しているような様子があります。このことがあって、動作速度が遅くなったような感じがするのです。

これがSolaris10のカーネルに由来するものなのか、postgresql.confの設定に由来するものなのか良くわかりませんが、つながってしまうと、前回より動作が少し速い感じなので、やはりカーネル側の問題なのではないかと思います。
実際、PostgreSQLのログにはこれに容量についての警告等はでていないようです。

(これを書いてて気が付いたのですが、

log_min_error_statement='error'

じゃ警告は記録されないよな。'notice'に変更して様子を見てみよう。)
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

ホンチャンインストール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でシェアする