<div dir="ltr"><div>クヌギと申します。</div><div>現在pgpoolの利用を検討しており、検証を行っております。</div><div><br></div><div>検証において、pgbenchを使用して計測を行ったのですが、</div><div>pgpoolを経由した場合、postgresqlへ直接した方が数値として</div><div>良い結果が出ている状況です。</div><div><br></div><div>pgpoolを経由させる方が、パフォーマンスがでるものと予想していいましたが、</div><div>その通りとはいきませんでした。</div><div><br></div><div>設定等を確認して、調整を行っていますが、ネットを検索して</div><div>パラメータの指定を変更して確認していますが、状況が改善されませんでした。</div><div><br></div><div>このような状況の場合、どの設定を変更するのが有効かご教示いただければと</div><div>思い、投稿いたしました。</div><div><br></div><div>検証環境は、以下の仮想サーバ3台で検証しています。</div><div><br></div><div>・CentOS 6.6 x86_64</div><div>・Memory 1GB</div><div>・PostgreSQL 9.3.6</div><div>・pgpool-II 3.4.1</div><div><br></div><div>PostgreSQLは3台のストリーミングレプリケーション構成となっています。</div><div><br></div><div>PostgreSQLの設定で変更した箇所は以下になります。</div><div><br></div><div>・postgresql.conf</div><div>=============================================</div><div>listen_addresses = &#39;*&#39;</div><div>port = 5433</div><div>max_connections = 100</div><div>shared_buffers = 384MB</div><div>work_mem = 4MB</div><div>maintenance_work_mem = 64MB</div><div>wal_level = hot_standby</div><div>synchronous_commit = local</div><div>checkpoint_segments = 12</div><div>checkpoint_timeout = 15min</div><div>checkpoint_completion_target = 0.3</div><div>max_wal_senders = 3</div><div>synchronous_standby_names = &#39;slave1,slave2&#39;</div><div>hot_standby = on</div><div>random_page_cost = 2.0</div><div>effective_cache_size = 512MB</div><div>autovacuum_naptime = 10min</div><div>autovacuum_vacuum_threshold = 1000</div><div>autovacuum_analyze_threshold = 1000</div><div>deadlock_timeout = 100s</div><div>=============================================</div><div><br></div><div>pgpoolの設定は以下のようになっています。</div><div>なお、マスタは、backend_hostname0になります。</div><div>=============================================</div><div>・pgpool.conf</div><div>listen_addresses = &#39;*&#39; </div><div>port = 9979 </div><div>socket_dir = &#39;/tmp&#39; </div><div>pcp_port = 9898 </div><div>pcp_socket_dir = &#39;/tmp&#39; </div><div>backend_hostname0 = &#39;192.168.10.57&#39; </div><div>backend_port0 = 5433 </div><div>backend_weight0 = 0 </div><div>backend_data_directory0 = &#39;/var/lib/pgsql/9.3/data&#39; </div><div>backend_flag0 = &#39;DISALLOW_TO_FAILOVER&#39; </div><div>backend_hostname1 = &#39;192.168.10.89&#39; </div><div>backend_port1 = 5433 </div><div>backend_weight1 = 1 </div><div>backend_data_directory1 = &#39;/var/lib/pgsql/9.3/data&#39; </div><div>backend_flag1 = &#39;ALLOW_TO_FAILOVER&#39; </div><div>backend_hostname2 = &#39;192.168.10.67&#39; </div><div>backend_port2 = 5433 </div><div>backend_weight2 = 1 </div><div>backend_data_directory2 = &#39;/var/lib/pgsql/9.3/data&#39; </div><div>backend_flag2 = &#39;ALLOW_TO_FAILOVER&#39; </div><div>enable_pool_hba = off </div><div>pool_passwd = &#39;&#39; </div><div>authentication_timeout = 60 </div><div>client_min_messages = error </div><div>log_min_messages = error </div><div>ssl = off </div><div>num_init_children = 32 </div><div>max_pool = 4 </div><div>child_life_time = 300 </div><div>child_max_connections = 0 </div><div>connection_life_time = 0 </div><div>client_idle_limit = 0 </div><div>log_destination = &#39;stderr&#39; </div><div>print_timestamp = on </div><div>log_connections = off </div><div>log_hostname = off </div><div>log_statement = off </div><div>log_per_node_statement = off </div><div>log_standby_delay = &#39;if_over_threshold&#39; </div><div>syslog_facility = &#39;LOCAL0&#39; </div><div>syslog_ident = &#39;pgpool&#39; </div><div>debug_level = 0 </div><div>pid_file_name = &#39;/var/run/pgpool/pgpool.pid&#39; </div><div>logdir = &#39;/tmp&#39; </div><div>connection_cache = on </div><div>reset_query_list = &#39;ABORT; DISCARD ALL&#39; </div><div>replication_mode = off </div><div>replicate_select = off </div><div>insert_lock = off </div><div>lobj_lock_table = &#39;&#39; </div><div>replication_stop_on_mismatch = off </div><div>failover_if_affected_tuples_mismatch = off </div><div>load_balance_mode = on </div><div>ignore_leading_white_space = on </div><div>white_function_list = &#39;&#39; </div><div>black_function_list = &#39;currval,lastval,nextval,setval&#39; </div><div>master_slave_mode = on </div><div>master_slave_sub_mode = &#39;stream&#39; </div><div>sr_check_period = 10 </div><div>sr_check_user = &#39;repl_user&#39; </div><div>sr_check_password = &#39;repl_user&#39; </div><div>delay_threshold = 10000 </div><div>follow_master_command = &#39;&#39; </div><div>parallel_mode = off </div><div>pgpool2_hostname = &#39;&#39; </div><div>health_check_period = 0 </div><div>health_check_timeout = 20 </div><div>health_check_user = &#39;hogehoge&#39; </div><div>health_check_password = &#39;fugafuga&#39; </div><div>health_check_max_retries = 0 </div><div>health_check_retry_delay = 1 </div><div>failover_command = &#39;&#39; </div><div>failback_command = &#39;&#39; </div><div>fail_over_on_backend_error = on </div><div>search_primary_node_timeout = 10 </div><div>recovery_user = &#39;nobody&#39; </div><div>recovery_password = &#39;&#39; </div><div>recovery_1st_stage_command = &#39;&#39; </div><div>recovery_2nd_stage_command = &#39;&#39; </div><div>recovery_timeout = 90 </div><div>client_idle_limit_in_recovery = 0 </div><div>use_watchdog = off </div><div>trusted_servers = &#39;&#39; </div><div>ping_path = &#39;/bin&#39; </div><div>wd_hostname = &#39;&#39; </div><div>wd_port = 9000 </div><div>wd_authkey = &#39;&#39; </div><div>delegate_IP = &#39;&#39; </div><div>ifconfig_path = &#39;/sbin&#39; </div><div>if_up_cmd = &#39;ifconfig eth0:0 inet $_IP_$ netmask 255.255.255.0&#39; </div><div>if_down_cmd = &#39;ifconfig eth0:0 down&#39; </div><div>arping_path = &#39;/usr/sbin&#39;           # arping command path </div><div>arping_cmd = &#39;arping -U $_IP_$ -w 1&#39; </div><div>clear_memqcache_on_escalation = on </div><div>wd_escalation_command = &#39;&#39; </div><div>wd_lifecheck_method = &#39;heartbeat&#39; </div><div>wd_interval = 10 </div><div>wd_heartbeat_port = 9694 </div><div>wd_heartbeat_keepalive = 2 </div><div>wd_heartbeat_deadtime = 30 </div><div>heartbeat_destination0 = &#39;host0_ip1&#39; </div><div>heartbeat_destination_port0 = 9694 </div><div>heartbeat_device0 = &#39;&#39; </div><div>wd_life_point = 3 </div><div>wd_lifecheck_query = &#39;SELECT 1&#39; </div><div>wd_lifecheck_dbname = &#39;template1&#39; </div><div>wd_lifecheck_user = &#39;nobody&#39; </div><div>wd_lifecheck_password = &#39;&#39; </div><div>relcache_expire = 0 </div><div>relcache_size = 256 </div><div>check_temp_table = on </div><div>memory_cache_enabled = off </div><div>memqcache_method = &#39;shmem&#39; </div><div>memqcache_memcached_host = &#39;localhost&#39; </div><div>memqcache_memcached_port = 11211 </div><div>memqcache_total_size = 67108864 </div><div>memqcache_max_num_cache = 1000000 </div><div>memqcache_expire = 0 </div><div>memqcache_auto_cache_invalidation = on </div><div>memqcache_maxcache = 409600 </div><div>memqcache_cache_block_size = 1048576 </div><div>memqcache_oiddir = &#39;/var/log/pgpool/oiddir&#39; </div><div>white_memqcache_table_list = &#39;&#39; </div><div>black_memqcache_table_list = &#39;&#39;</div><div>=============================================</div><div><br></div><div>pgbenchにおける結果は以下のようになります。</div><div>※各数値は3回の平均値です。</div><div><br></div><div>■postgresqlへの実施</div><div> ・To Master</div><div>/usr/pgsql-9.3/bin/pgbench -n -p 5433 -c 10 -t 1000 -h 192.168.10.57 pgbench</div><div>tps = 491.6782643 (including connections establishing)<br></div><div>tps = 492.576876 (excluding connections establishing)</div><div><br></div><div>■pgpoolへの実施</div><div> ・To Master</div><div>/usr/pgsql-9.3/bin/pgbench -n -p 9979 -c 10 -t 1000 -h 192.168.10.57 pgbench</div><div>tps = 346.4907967 (including connections establishing)</div><div>tps = 346.8569167 (excluding connections establishing)</div><div><br></div><div> ・To Slave1</div><div>/usr/pgsql-9.3/bin/pgbench -n -p 9979 -c 10 -t 1000 -h 192.168.10.57 pgbench</div><div>tps = 377.00388 (including connections establishing)</div><div>tps = 377.536235 (excluding connections establishing)</div><div><br></div><div>長文で申し訳ありませんが、設定の勘所等ご教示いただければと思います。</div><div>よろしくお願いいたします。</div><div><br></div></div>