2004年10月09日

MapServerのパフォーマンス

Posted by nene2001 at 12:16 / Tag(Edit): / 1 Comments: Post / View / 1 TrackBack / Google Maps このエントリーを含むはてなブックマーク

MapServerのPerl-APIでの操作を覚えるついでに、パフォーマンスを調べてみた。
やってみたのは、一昨日のサンプルにあった、皇居を中心とした地図サンプルのMAPFILEを使って、PerlのAPIからMapScriptオブジェクトを取得し、ついでにランダムに経度で0.05度以内程度東西にふった地図画像を表示する、というもの。
データソースとしてSHAPEファイルのみを用いたものと、一部のデータはPostGISを用いたものを準備。
いずれもPerlのレイヤーでFastCGIで3プロセスあげて動かして、MapScriptオブジェクトはその中で永続化してる(ソースはこちら)。
もっともMapScript側の内部処理がどうなってるかよく判ってないので、それがパフォーマンスにどう影響してるかは判らないけど。
CGIベースCバイナリ版のMapServとのパフォーマンス比較もすべきだけど、絶対2パラメータ以上のQUERYSTRINGが必要であるにも関わらずApacheBenchがQUERYSTRINGが2パラメータ以上だとうまく動かせなかったので、今回は割愛。
ApacheBench、動かせました。
URLをダブルクオートで囲むだけでよかったみたいですね。
結果は続きで報告。

で、やってみた結果は、
SHAPEファイルをバックエンドに使ったものだと、大体秒あたり5〓6アクセス処理できる。
これはまあ仕方ない…FastCGI使ってるんだしもっと出て欲しいけど、もとのサーバがしょぼすぎる(Pen4-3GHz、DDR512MB、HD120GB、回線NTTの100Mbps…しょぼいといってもこれが「新サーバ予定機」なのが悲しすぎるけど…)から仕方ないと思う。
けど、一部にPostGISを使ったものだと秒あたり2〓3アクセスしか処理できない。なんで?
おそらくは、アクセス毎にDBへのコネクションを貼り直しているからだと思う。
FastCGIでMapScriptオブジェクト自体は永続化してるけど、その中でのDB接続のプーリングはしていないのだと思う。
今回の場合データが東京23区内の道路データのみPostGIS化と、データ量が極めて少ないので、大量データをDBで扱う事の処理速度向上より、DB接続を繰り返す事による処理速度低下が上回ったのかな。
おそらくデータ量が増えるにつれ、SHAPEファイルの速度がPostGISの速度を下回ると思うんだけど、ただ問題は、SHAPEファイル〓PostGIS間の相対的な速度はPostGISの方が速くなっても、「データが非常に増えている」状況では、絶対的速度としては今回出た「秒あたり2〓3アクセス」を上回る事はないんじゃないか、という事。
これじゃあ困るよなあ…。
4.4以降ではMapServがFastCGIに対応して、DB接続のプーリングも行ってくれるという事なわけだけど、そうすると少しは改善されるのだろうか…?

他にも気になる事3点ほど。

1.PostGISを使う場合のMAPFILEなんだけど、

LAYER
NAME "道路"
CONNECTION "user=XXXX password=XXXX dbname=XXXX host=localhost port=5432"
CONNECTIONTYPE postgis
DATA "the_geom from dourokukan"
〓中略〓
END
みたいなふうになっている。
つまり、DBへのコネクションの設定は、ファイル単位じゃなくて、レイヤー単位で設定されているという事。
これってもしかして、本当はアクセス毎にDBに接続どころか、同じアクセスの中でもレイヤー毎に接続してるって事なんだろうか?
ちゃんと同じ接続文字列なら、せめて同一アクセス内くらいは同じ接続の使い回し、とかしてくれてるのかなあ?

2.同じくMAPFILEでのDB設定で気になるところだけど、今度は

DATA "the_geom from dourokukan"
の部分。
データ量が増えたとき、SHAPEファイルでなくDBの方が早くなると思われるのは、SHAPEファイルが必然的に全データをメモリ内に読み込まないといけないのに対し、DBだと空間インデックスを使って、必要な部分だけ即座に取得できるから。
その空間インデックスによる抜き出しを怠って、全データを読み込んでしまうなら、DBだってSHAPEファイルだって変わりはない(と、思う)。
でも、上の検索条件文字列の設定だと、明らかにSQL文の一部っぽいけど、検索範囲を制限するためのWHERE句にあたるようなものが全く設定されていない。
これは…MapServerが内部で勝手にEXTENTパラメータ等からその辺を補完したSQLを発行してくれるのだろうか?
或いは、自分で指定しないといけないけど、これは飽くまでサンプルだからその辺のややこしいあたりは省略されているのだろうか。

3.Perl-APIのドキュメントを斜め読みながらざっと目を通したけど、MapScriptが生成した画像を、オンザフライで取得する方法が全く見つからない。
直接mapscript.pmのソースを覗いてみても、そんなのはないっぽくて、いちいち一旦一時ファイルに出力して、それを開いて読み込まないと、メモリ内に生成された画像を読み込めないみたい。
ただでさえ全体的に遅いのに、そんなこんなでいちいちディスクI/Oが発生していたんじゃたまったもんじゃない。
何とかならないのかなあ…。

そんなこんなで、まだまだ前途多難のMapServerでした。

[追記]
追加実験した、CGIベースCバイナリ版のMapServでのパフォーマンス。
SHAPEファイルベースだと、大体秒あたり4弱〓4強アクセス。
PostGISベースだと、秒あたり2強から、ひどい時では1出ない事も。
Perl-APIでのFastCGI版だと表示位置の移動も実行してるし、画像の受け渡しにディスクI/Oも発生してるだけに、やっぱりプロセスが起動しない分FastCGIの効果は絶大。
これでもうちょっとDB周りとかさえ速くなってくれれば…。

[composed and posted with ecto]

Related query words in Google & Yahoo
Related Books from Amazon
Trackback to this entry
TrackBack URL :
Trackbacks
[GIS]MapServerのデータベースへの持続的接続
Excerpt:  kokogikoさんのサイトで、MapServerのパフォーマンスを調査しており、興味深い情報を公開していただいています。そのなかでMapServerの動作にたいする疑問点を3点ほど提示しています ...
Weblog: 中村区アディクト
Tracked: 2004年10月09日 18:59
Comments

インストールしてないんでソースだけ眺めてました。

PostGISからのデータ取り出し
PostGISからのデータ抽出は出力範囲を使用して
geom列 && 'BOX3D(XMIN YMIN, XMAX YMAX)'::BOX3D
という条件を使用しています。空間インデックスがあれば使ってくれるようです。
これに加えてFILTERに設定された条件とANDでWHERE句に設定されています。

画像出力
ファイル名を空文字にすると画像はSTDOUTに吐くようですけど、それじゃ駄目でしょうか?

Posted by: takubo at 2004年10月10日 21:13
Post a comment












Remember personal info? 
2004年10月
Su Mo Tu We Th Fr Sa
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            

About Me

Navigation

Search
Google
Web
kokogiko.net
Archives
Recent Entries
Recent Comments
Recent Trackbacks
『共通善は共有してはいけない』に一部解毒され、一部またもやもやした(ここギコ!)
右翼はアイヌや沖縄を包摂する論理を構築すべきではないのか
『共通善は共有してはいけない』に一部解毒され、一部またもやもやした(ここギコ!)
確信犯より無関心・無神経の方が根が深い大問題
"「次世代交通情報を考える」ブロガーミーティング"に参加(チミンモラスイ?)
AMNブロガーミーティング「ユビークリンク/全力案内!」に行ってきました。
Google未オルソ衛星画像にぶった切られた我が母校(ここギコ!)
未オルソ画像が生むジョジョの世界&MSNの航空写真はオルソされている?
AMNブロガーミーティング「ユビークリンク/全力案内!」に行ってきました。(ここギコ!)
あいまいな個人認証の技術ってないんだろうか
ジオメディア忘年会2008に行ってきた(近江商人JINBLOG)
ジオメディア忘年会行ってきました
ジオメディア忘年会 2008 を終えて(Cirius Lab. ブログ)
ジオメディア忘年会行ってきました
ジオメディア忘年会行ってきました(ここギコ!)
ジオメディア忘年会 新年会から始まり東京1、2、関西と続いたジオメディア2008の締めくくり
ジオメディア忘年会行ってきました(ここギコ!)
モーバイルインフォサーチ実験から続く想いの系譜
「Web 2008 Expo」行って来ました(ここギコ!)
コンテキストを検知できないモバイルWebなどあり得ない
Hatena bookmarked
My del.icio.us

Banners

Syndication
Powered by
Get it!!