AccessとLinux

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

サーバーの更新6

2006年04月30日 19時50分09秒 | Weblog
PostgreSQLのチューニングは下記のようにしました。これで良いのか、全く自信がありません。
変更、追加した項目だけです。

/etc/sysctl.conf
kernel.shmmax = 268435456
fs.file-max = 16384

/usr/local/pgsql/data/postgresql.conf
listen_addresses = '*'
max_connections = 64
superuser_reserved_connections = 32
shared_buffers = 4096 # min 16 or max_connections*2, 8KB each
work_mem = 4096 # min 64, size in KB
silent_mode = on


カーネルのshared memory は上限があるのかどうかわかりませんが、以前はメモリー512Mに対して128Mを割り当てていました。今回は1G積んでいるので倍の256Mとしました。
(ホームページあさっていると、「shared memoryはメモリーの1/4が基準」というページがあったので、そのまま採用して256Mにしました。)
fs.file-maxはよくわかりませんが、旧サーバーと同じ設定にしました。
max_connectionは以前は32にしていましたが、今回はsuperuser_reserved_connectionsという項目が新たに追加されているようなので、全体として64、superuserとして32としました。
(極めて邪道と思いますが、全てのクライアントはpostgresでログオンしています。Accessのデータベースウインドウを非表示にしてしまえば、AccessのプログラムでしかPostgreSQLのテーブルを操作できないので、postgresでログオンしても特に支障がないのです。ODBCドライバーをユーザーが独自にリンクすればどんな操作でもできますが、まあよしとしています。)
shared_buffers=4096は32Mになります。現在使用中の販売管理プログラムはpg_dumpして136Mくらいなので、shared_buffersが32Mは十分ではないかと思います。旧サーバーと同じにしました。work_memも同様です。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

サーバーの更新5

2006年04月29日 23時38分39秒 | Weblog
今回のサーバー更新では、動作速度が非常に上がりました。
「サーバーの更新1」で約3.5倍になったと書きましたが、より純粋にクエリーの実行速度だけを比較してみると、5倍は速度が上がっています。
(3.5倍と計算した処理ではローカルに作成したテンポラリーテーブルをExcelに書き込む部分が結構な時間がかかっており、クエリーの処理速度の比較には向かない処理でした。ただ処理時間が非常に長いので、時間計測には向いており、最初にこの処理時間を計ってみました。)
売上伝票発行の流れは、サーバーから読み込み、行計算、印刷用テンポラリーテーブルの作成、印刷、書き込み、といったふうになっていますが、select文、insert文の処理が多く、こっちの方がクエリーの処理速度の比較に向いています。この場合だと20秒くらいかかっていた処理が約4秒くらいで終了します。
旧サーバーでは10秒で印刷開始、印刷中にデータをサーバーに書き込む(これも約10秒)という処理ですが、新サーバーでは2秒で印刷が始まります。印刷中にデータ登録が終わります。登録も約2秒くらいです。この位の処理速度だと、広島事務所から廿日市事務所のサーバーにデータを登録する売上伝票処理でも全く支障がありません。
サーバーを更新する前は廿日市~広島の光ファイバーの回線増設も検討していましたが、今となってはその必要はなくなりました。(月3万円助かったよ~)
廿日市~広島間での売上伝票登録時間は
   旧サーバー 25秒(印刷開始まで約10秒)
   新サーバー 10秒(印刷開始まで約4秒)

全く感じですが、処理速度向上の内訳を考えてみると、
ハード PostgreSQLバージョンアップ
0.7×0.3=0.21
といった印象です。ハードの処理速度0.7はPostgreSQLのconfigureやmakeの短縮時間の感じです。正確に計ったわけではありません。ODBCドライバーのバージョンも含めて、PostgreSQLを7.3.5から8.1.3に変更したことで、処理速度が1/3になったという印象です。
PostgreSQL8.1は速いというふれ込みでしたが、実際相当速いです。こんな速度で動作するのなら特にネイティブドライバーを使用する必要も無いのではないかと思います。ODBCドライバーならAccessのリンクテーブルをリンクし直すだけで、ドライバーの更新ができます。これはやはり便利です。wxWidgetにしても、データーベースとの接続にはODBCをラッパーとして使用しており、ODBCは低速ながら、汎用性が高いといえます。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

サーバーの更新4

2006年04月29日 22時57分58秒 | Weblog
ODBCドライバーについてもう一つ。

クライアントの一台はRS-232C経由でトラックスケールの計量データを取り込むようになっています。このプログラム自体はVB4.0で作成しており、計量の都度、ODBC Connect して計量データをPostgreSQLに書き込み後、切断するようになっています。
PostgreSQL7.3.5の時は、ODBC 7.01.00.06+日本語パッチで問題ありませんでした。このODBCドライバーもAccess2000と同様、ODBC PostgreSQL Unicode8.01.02.00に変更したところ、つながりません。一度だけ、insertクエリーを実行するだけなのに。書き込みデータ中の日本語を半角アルファベットにすると、書き込みできます。VB4.0+ODBC Unicode8.01.02.00+PostgreSQL8.1.3では日本語の書き込みができないようです。一度だけのクエリーなので、また、前のドライバーに戻してみると、無事書き込みできます。いまのところ、Windows2000+VB4.0+0DBC7.01.00.06(日本語パッチ)+PostgreSQL8.1.3で運用しています。トラックスケールの計量データの書き込みだけなので、せいぜい多くて10回/日insertクエリーを実行するだけです。まあ、特殊な場合です。
自宅で、WindowsXP+Office2000+ODBC7.01.00.06+PostgreSQL8.1.3では書き込みに成功したり、失敗したりで、ODBC7.01.00.06はPostgreSQL8.1.3については使用できなかったのですが、VB4.0ではOKぽい。使用できるODBCドライバーはクラアントプログラムによって決まることが多いのだろうか?!

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

サーバーの更新3

2006年04月29日 22時36分17秒 | Weblog
試験時には「サーバーの更新1」で書いた構成で問題なかったのですが、実際使用し始めると販売管理プログラムを立ち上げたまま10分くらいすると、ソケットが切断されるという症状がでました。最初はVineLinux3.2のtcpのデフォルト設定がそういうふうになっているのかと思い、keepaliveを調べて見ましが、どう調べてもデフォルトでは2時間(7200秒)はキープされるようになっています。訳がわからず、ODBCドライバーをPostgreSQL Unicode 8.01.02.00に変更してみたところ、ソケットが切断されるということはなくなりました。
結局、最終的には、このような構成になっています。

(旧サーバー)
Pentium4-2.4G
メモリーPC2700-256MB
PostgreSQL7.3.5
ODBC 7.01.00.06+日本語パッチ
RedHat9.0

(新サーバー)
PentiumD-805(2.66G)
メモリーPC3200-1GB
PostgreSQL8.1.3
ODBCドライバー PostgreSQL Unicode8.01.02.00
VineLinux3.2

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

サーバーの更新2

2006年04月26日 00時09分31秒 | Weblog
一番、ヤバかったのはPentiumD-805(2.66G)を採用したことでした。本当のところはAMD Opteronを使いたかったのですが、20万円近くするのであきらめました。
VineLinx3.2のカーネルがマルチコアに対応しているのか調べるために、色々ホームページを見てみると、「PentiumD-805(2.66G)は、元々マルチコアのPentium4(2.66G)をAMDに対抗するために急遽、同一パッケージで製造されたもので、性能は変わらない。」という記述があるではないですか。旧サーバーのCPUがPentium4(2.4G)だから、PentiumD-805(2.66G)はほぼ同じ性能ということになります。
まあ、PentiumDは同一パッケージのなっている分、多少性能アップが期待できるけれども、目安にしている3倍速にはほど遠い、ヤバイ!ヤバイぞ!
旧サーバーはメモリーが512Mしかなく、shared memory(128Mに設定。当時はこれが設定可能最大値だった) の設定が窮屈だったので、今回1Gもあればかなり改善されるのでは!?「PostgreSQLの新バージョンに期待するしかないだろう。」と思い直してPostgreSQLのチューニングに入りました。
カーネルのマルチコア対応は2.4.*はCPU4個までは確実に対応しているようで、それ以上になると、2.6.*を使用した方がよさそうです。(2.6.*を採用していて手に入りそうなのは試験的ディストリビューションFedraCoreしかないので、当面はやはり2.4.*を使うことになります。)
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする