[pgsql-jp: 39586] pgpool-II経由のクエリがマスタ・スレーブ両ノードに投入される事象について

Kadir Tokyo kadir.tokyo @ gmail.com
2008年 9月 18日 (木) 15:13:14 JST


いつもお世話になっております。
片野と申します。

pgpool-IIを使い、参照系のクエリを投入すると、マスターノードと
スレーブノード両方にクエリが流れるという事象に遭遇しました。
過去の事例がどうしても見つけられなかったのでMLに投稿させて頂きました。

レプリケーション構成はSlony-Iで構築し、pgpool-IIをマスター/スレーブモード&
ロードバランスモードONで構成しました。数秒かかるクエリをpgpool-II経由で
Postgres用JDBCを通して一つ投げると、マスターとスレーブ両ノードで流れます。
pgpoolの設定が良くないと思い、タイムアウト関係のパラメータを色々と
変えてみたのですが、解決できませんでした。

何か心当たりをご存知の方がいらっしゃいましたら、
アドバイス頂ければと思っております。よろしくお願い致します。

■システム
PGPOOLノード
 ・CentOS 5.2
 ・pgpool-II-2.1
DBノード
 ・CentOS 5.2
 ・PostgreSQL8.3.3 + postgis-1.3.3
 ・slony1-1.2.15

■クエリ・・・PostGIS拡張による関数を使用。一部内容をマスクさせて頂いております。
SELECT
   *,
   distance_spheroid(geom, GeometryFromText('POINT(xx.xxxx
xx.xxxx)',xxxx),'SPHEROID["???",xxxx,xxxx]')
   AS dd
FROM
   <テーブル>
WHERE
   expand_sphere_pseudo(GeomFromText('POINT(xx.xxxx xxx.xxxx)',xxxx),
xxxx ) && ???
 AND
   distance_sphere(???, GeomFromText('POINT(xx.xxxx xx.xxxx)',xxxx)) < xxxx
ORDER BY
   dd
OFFSET 0 LIMIT xxxx
;

■pgpool.confの設定
-----------------------------------------------------------------------------------------
listen_addresses = '*'
port = 9999
pcp_port = 9898
socket_dir = '/var/run/pgpool'
pcp_socket_dir = '/var/run/pgpool'
backend_socket_dir = '/var/run/pgpool'
pcp_timeout = 10

num_init_children = 100
max_pool = 1
child_life_time = 0
connection_life_time = 300
child_max_connections = 0
client_idle_limit = 0
authentication_timeout = 60
logdir = '/data/log/pgpool'

replication_mode = false
load_balance_mode = true
replication_stop_on_mismatch = false
# replicate_select = false
reset_query_list = 'ABORT; RESET ALL; SET SESSION AUTHORIZATION DEFAULT'
print_timestamp = true
master_slave_mode = true

# connection_cache = true
# health_check_timeout = 20
health_check_period = 0
# insert_lock = false
# ignore_leading_white_space = true
log_statement = true
log_connections = true
# log_hostname = false
parallel_mode = false
enable_query_cache = false
# pgpool2_hostname = ''
# system DB info
# system_db_hostname = 'localhost'
# system_db_port = 5432
# system_db_dbname = 'pgpool'
# system_db_schema = 'pgpool_catalog'
# system_db_user = 'pgpool'
# system_db_password = ''

backend_hostname0 = '192.168.xxx.xxa'
backend_port0 = xxxx
backend_weight0 = 0
backend_hostname1 = '192.168.xxx.xxb'
backend_port1 = xxxx
backend_weight1 = 1
backend_hostname2 = '192.168.xxx.xxc'
backend_port2 = xxxx
backend_weight2 = 1
#backend_data_directory0 = '/data'
#backend_data_directory1 = '/data1'
enable_pool_hba = false
# recovery_user = 'nobody'
# recovery_password = ''
# recovery_1st_stage_command = ''
# recovery_2nd_stage_command = ''
# recovery_timeout = 90
-----------------------------------------------------------------------------------------



pgsql-jp メーリングリストの案内