Geoserver インスタンスと Postgres/PostGIS の間の相互作用に奇妙な点があることに気付きました。
開発者のデバッグを含むように Geoserver のログ レベルを設定した後、Geoserver WMS から PostGIS への単一の要求をキャプチャすることができました。
(短縮された)一連のイベントとそのタイムスタンプ:
12:31:22,658 - SELECT query for MSG is sent to Postgres
12:32:10,315 - Rendering for MSG layer starts
12:32:10,356 - DB Connection Closed
~ 48 seconds
興味深いことに、同じクエリ (MSG) を PgAdmin3 から直接実行すると、次のようになります。
SELECT "frp_mw",encode(ST_AsBinary(ST_Force_2D("the_geom")),'base64') as "the_geom" FROM "public"."af_msg_abba_datetime_today" WHERE ("the_geom" && GeometryFromText('POLYGON ((-27.67968749408379 -46.92207325648429, -27.67968749408379 -6.186892358058866, 75.67968748740275 -6.186892358058866, 75.67968748740275 -46.92207325648429, -27.67968749408379 -46.92207325648429))', 4326) AND (("frp_mw" >= -1 AND "frp_mw" <= 150) OR ("frp_mw" >= 151 AND "frp_mw" <= 300) OR ("frp_mw" >= 301 AND "frp_mw" <= 600) OR ("frp_mw" >= 601 AND "frp_mw" <= 50000)));
380 ミリ秒で 6515 行を取得します。
つまり、PgAdmin3 からクエリを実行した場合、Postgres は 380 ミリ秒以内にクエリの結果を返すことができますが、Geoserver は同じ結果セットを取得するのに約 48 秒かかります。
これはおそらくある種のJDBCの問題ですか?
セットアップに関する詳細:
マスター Postgres データベースは Geoserver とは別の VM 上にありますが、Geoserver VM (同じホスト) 上のスレーブ Postgres クラスターにレプリケートします。そのため、Geoserver はクエリ用に「localhost」読み取り専用 Postgres クラスターを参照しています。
上記の 380 ミリ秒の応答時間は、Geoserver が使用しているスレーブ Postgres クラスターからのものです。
すべて Linux (Ubuntu 11.10) ベース。Postgres 9.1 PostGIS 1.5 ジオサーバー 2.1.3