prestogres 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +4 -0
- data/Gemfile +2 -0
- data/Gemfile.lock +20 -0
- data/LICENSE +202 -0
- data/NOTICE +22 -0
- data/README.md +217 -0
- data/Rakefile +13 -0
- data/VERSION +1 -0
- data/bin/prestogres +254 -0
- data/config/pcp.conf.sample +28 -0
- data/config/pgpool.conf +678 -0
- data/config/pool_hba.conf +84 -0
- data/config/pool_passwd +0 -0
- data/config/postgresql.conf +2 -0
- data/ext/.gitignore +6 -0
- data/ext/depend +26 -0
- data/ext/extconf.rb +4 -0
- data/ext/prestogres_config.c +12 -0
- data/pgpool2/.gitignore +36 -0
- data/pgpool2/AUTHORS +4 -0
- data/pgpool2/COPYING +12 -0
- data/pgpool2/ChangeLog +1 -0
- data/pgpool2/INSTALL +1 -0
- data/pgpool2/Makefile.am +159 -0
- data/pgpool2/Makefile.in +1187 -0
- data/pgpool2/NEWS +4960 -0
- data/pgpool2/README +1 -0
- data/pgpool2/README.euc_jp +1 -0
- data/pgpool2/README.online-recovery +62 -0
- data/pgpool2/TODO +103 -0
- data/pgpool2/ac_func_accept_argtypes.m4 +85 -0
- data/pgpool2/aclocal.m4 +1088 -0
- data/pgpool2/c-compiler.m4 +134 -0
- data/pgpool2/c-library.m4 +325 -0
- data/pgpool2/child.c +2097 -0
- data/pgpool2/config.guess +1532 -0
- data/pgpool2/config.h.in +332 -0
- data/pgpool2/config.sub +1640 -0
- data/pgpool2/configure +15752 -0
- data/pgpool2/configure.in +392 -0
- data/pgpool2/depcomp +522 -0
- data/pgpool2/doc/basebackup.sh +17 -0
- data/pgpool2/doc/pgpool-de.html +4220 -0
- data/pgpool2/doc/pgpool-en.html +5738 -0
- data/pgpool2/doc/pgpool-fr.html +4118 -0
- data/pgpool2/doc/pgpool-ja.css +198 -0
- data/pgpool2/doc/pgpool-ja.html +11279 -0
- data/pgpool2/doc/pgpool-zh_cn.html +4445 -0
- data/pgpool2/doc/pgpool.css +280 -0
- data/pgpool2/doc/pgpool_remote_start +13 -0
- data/pgpool2/doc/recovery.conf.sample +117 -0
- data/pgpool2/doc/tutorial-en.html +707 -0
- data/pgpool2/doc/tutorial-ja.html +422 -0
- data/pgpool2/doc/tutorial-memqcache-en.html +325 -0
- data/pgpool2/doc/tutorial-memqcache-ja.html +370 -0
- data/pgpool2/doc/tutorial-memqcache-zh_cn.html +322 -0
- data/pgpool2/doc/tutorial-watchdog-en.html +306 -0
- data/pgpool2/doc/tutorial-watchdog-ja.html +343 -0
- data/pgpool2/doc/tutorial-watchdog-zh_cn.html +301 -0
- data/pgpool2/doc/tutorial-zh_cn.html +537 -0
- data/pgpool2/doc/watchdog.png +0 -0
- data/pgpool2/doc/wd-en.html +236 -0
- data/pgpool2/doc/wd-en.jpg +0 -0
- data/pgpool2/doc/wd-ja.html +219 -0
- data/pgpool2/doc/wd-ja.jpg +0 -0
- data/pgpool2/doc/wd-zh_cn.html +201 -0
- data/pgpool2/doc/where_to_send_queries.odg +0 -0
- data/pgpool2/doc/where_to_send_queries.pdf +0 -0
- data/pgpool2/general.m4 +166 -0
- data/pgpool2/getopt_long.c +200 -0
- data/pgpool2/getopt_long.h +44 -0
- data/pgpool2/install-sh +251 -0
- data/pgpool2/ltmain.sh +8406 -0
- data/pgpool2/m4/libtool.m4 +7360 -0
- data/pgpool2/m4/ltoptions.m4 +368 -0
- data/pgpool2/m4/ltsugar.m4 +123 -0
- data/pgpool2/m4/ltversion.m4 +23 -0
- data/pgpool2/m4/lt~obsolete.m4 +92 -0
- data/pgpool2/main.c +2971 -0
- data/pgpool2/md5.c +444 -0
- data/pgpool2/md5.h +28 -0
- data/pgpool2/missing +360 -0
- data/pgpool2/mkinstalldirs +40 -0
- data/pgpool2/parser/Makefile.am +50 -0
- data/pgpool2/parser/Makefile.in +559 -0
- data/pgpool2/parser/copyfuncs.c +3310 -0
- data/pgpool2/parser/gram.c +39100 -0
- data/pgpool2/parser/gram.h +940 -0
- data/pgpool2/parser/gram.y +13408 -0
- data/pgpool2/parser/gramparse.h +74 -0
- data/pgpool2/parser/keywords.c +32 -0
- data/pgpool2/parser/keywords.h +39 -0
- data/pgpool2/parser/kwlist.h +425 -0
- data/pgpool2/parser/kwlookup.c +88 -0
- data/pgpool2/parser/list.c +1156 -0
- data/pgpool2/parser/makefuncs.c +518 -0
- data/pgpool2/parser/makefuncs.h +83 -0
- data/pgpool2/parser/memnodes.h +79 -0
- data/pgpool2/parser/nodes.c +29 -0
- data/pgpool2/parser/nodes.h +609 -0
- data/pgpool2/parser/outfuncs.c +5790 -0
- data/pgpool2/parser/parsenodes.h +2615 -0
- data/pgpool2/parser/parser.c +262 -0
- data/pgpool2/parser/parser.h +46 -0
- data/pgpool2/parser/pg_class.h +158 -0
- data/pgpool2/parser/pg_config_manual.h +273 -0
- data/pgpool2/parser/pg_list.h +352 -0
- data/pgpool2/parser/pg_trigger.h +147 -0
- data/pgpool2/parser/pg_wchar.h +492 -0
- data/pgpool2/parser/pool_memory.c +342 -0
- data/pgpool2/parser/pool_memory.h +77 -0
- data/pgpool2/parser/pool_parser.h +222 -0
- data/pgpool2/parser/pool_string.c +121 -0
- data/pgpool2/parser/pool_string.h +37 -0
- data/pgpool2/parser/primnodes.h +1280 -0
- data/pgpool2/parser/scan.c +4094 -0
- data/pgpool2/parser/scan.l +1451 -0
- data/pgpool2/parser/scanner.h +120 -0
- data/pgpool2/parser/scansup.c +221 -0
- data/pgpool2/parser/scansup.h +28 -0
- data/pgpool2/parser/snprintf.c +1102 -0
- data/pgpool2/parser/stringinfo.c +294 -0
- data/pgpool2/parser/stringinfo.h +178 -0
- data/pgpool2/parser/value.c +78 -0
- data/pgpool2/parser/value.h +62 -0
- data/pgpool2/parser/wchar.c +2048 -0
- data/pgpool2/pcp.conf.sample +28 -0
- data/pgpool2/pcp/Makefile.am +40 -0
- data/pgpool2/pcp/Makefile.in +771 -0
- data/pgpool2/pcp/libpcp_ext.h +250 -0
- data/pgpool2/pcp/md5.c +444 -0
- data/pgpool2/pcp/md5.h +28 -0
- data/pgpool2/pcp/pcp.c +1652 -0
- data/pgpool2/pcp/pcp.h +61 -0
- data/pgpool2/pcp/pcp_attach_node.c +172 -0
- data/pgpool2/pcp/pcp_detach_node.c +185 -0
- data/pgpool2/pcp/pcp_error.c +87 -0
- data/pgpool2/pcp/pcp_node_count.c +160 -0
- data/pgpool2/pcp/pcp_node_info.c +198 -0
- data/pgpool2/pcp/pcp_pool_status.c +166 -0
- data/pgpool2/pcp/pcp_proc_count.c +166 -0
- data/pgpool2/pcp/pcp_proc_info.c +261 -0
- data/pgpool2/pcp/pcp_promote_node.c +185 -0
- data/pgpool2/pcp/pcp_recovery_node.c +172 -0
- data/pgpool2/pcp/pcp_stop_pgpool.c +179 -0
- data/pgpool2/pcp/pcp_stream.c +385 -0
- data/pgpool2/pcp/pcp_stream.h +52 -0
- data/pgpool2/pcp/pcp_systemdb_info.c +194 -0
- data/pgpool2/pcp/pcp_watchdog_info.c +211 -0
- data/pgpool2/pcp_child.c +1493 -0
- data/pgpool2/pg_md5.c +305 -0
- data/pgpool2/pgpool.8.in +121 -0
- data/pgpool2/pgpool.conf +553 -0
- data/pgpool2/pgpool.conf.sample +666 -0
- data/pgpool2/pgpool.conf.sample-master-slave +665 -0
- data/pgpool2/pgpool.conf.sample-replication +664 -0
- data/pgpool2/pgpool.conf.sample-stream +664 -0
- data/pgpool2/pgpool.spec +264 -0
- data/pgpool2/pgpool_adm/TODO +7 -0
- data/pgpool2/pgpool_adm/pgpool_adm--1.0.sql +85 -0
- data/pgpool2/pgpool_adm/pgpool_adm.c +558 -0
- data/pgpool2/pgpool_adm/pgpool_adm.control +5 -0
- data/pgpool2/pgpool_adm/pgpool_adm.h +46 -0
- data/pgpool2/pgpool_adm/pgpool_adm.sql.in +85 -0
- data/pgpool2/pool.h +655 -0
- data/pgpool2/pool_auth.c +1390 -0
- data/pgpool2/pool_config.c +5007 -0
- data/pgpool2/pool_config.h +284 -0
- data/pgpool2/pool_config.l +3281 -0
- data/pgpool2/pool_config_md5.c +29 -0
- data/pgpool2/pool_connection_pool.c +812 -0
- data/pgpool2/pool_error.c +242 -0
- data/pgpool2/pool_globals.c +27 -0
- data/pgpool2/pool_hba.c +1723 -0
- data/pgpool2/pool_hba.conf.sample +67 -0
- data/pgpool2/pool_ip.c +567 -0
- data/pgpool2/pool_ip.h +65 -0
- data/pgpool2/pool_ipc.h +38 -0
- data/pgpool2/pool_lobj.c +242 -0
- data/pgpool2/pool_lobj.h +32 -0
- data/pgpool2/pool_memqcache.c +3818 -0
- data/pgpool2/pool_memqcache.h +268 -0
- data/pgpool2/pool_params.c +163 -0
- data/pgpool2/pool_passwd.c +249 -0
- data/pgpool2/pool_passwd.h +41 -0
- data/pgpool2/pool_path.c +193 -0
- data/pgpool2/pool_path.h +81 -0
- data/pgpool2/pool_process_context.c +247 -0
- data/pgpool2/pool_process_context.h +62 -0
- data/pgpool2/pool_process_query.c +5001 -0
- data/pgpool2/pool_process_reporting.c +1671 -0
- data/pgpool2/pool_process_reporting.h +44 -0
- data/pgpool2/pool_proto2.c +671 -0
- data/pgpool2/pool_proto_modules.c +3524 -0
- data/pgpool2/pool_proto_modules.h +185 -0
- data/pgpool2/pool_query_cache.c +1020 -0
- data/pgpool2/pool_query_context.c +1871 -0
- data/pgpool2/pool_query_context.h +105 -0
- data/pgpool2/pool_relcache.c +284 -0
- data/pgpool2/pool_relcache.h +78 -0
- data/pgpool2/pool_rewrite_outfuncs.c +9060 -0
- data/pgpool2/pool_rewrite_query.c +715 -0
- data/pgpool2/pool_rewrite_query.h +192 -0
- data/pgpool2/pool_select_walker.c +1150 -0
- data/pgpool2/pool_select_walker.h +68 -0
- data/pgpool2/pool_sema.c +161 -0
- data/pgpool2/pool_session_context.c +952 -0
- data/pgpool2/pool_session_context.h +203 -0
- data/pgpool2/pool_shmem.c +185 -0
- data/pgpool2/pool_signal.c +158 -0
- data/pgpool2/pool_signal.h +61 -0
- data/pgpool2/pool_ssl.c +339 -0
- data/pgpool2/pool_stream.c +962 -0
- data/pgpool2/pool_stream.h +61 -0
- data/pgpool2/pool_system.c +659 -0
- data/pgpool2/pool_timestamp.c +1215 -0
- data/pgpool2/pool_timestamp.h +38 -0
- data/pgpool2/pool_type.h +171 -0
- data/pgpool2/pool_worker_child.c +384 -0
- data/pgpool2/ps_status.c +404 -0
- data/pgpool2/recovery.c +435 -0
- data/pgpool2/redhat/pgpool.conf.sample.patch +52 -0
- data/pgpool2/redhat/pgpool.init +201 -0
- data/pgpool2/redhat/pgpool.sysconfig +7 -0
- data/pgpool2/redhat/rpm_installer/basebackup-replication.sh +53 -0
- data/pgpool2/redhat/rpm_installer/basebackup-stream.sh +55 -0
- data/pgpool2/redhat/rpm_installer/config_for_script +17 -0
- data/pgpool2/redhat/rpm_installer/failover.sh +64 -0
- data/pgpool2/redhat/rpm_installer/getsources.sh +141 -0
- data/pgpool2/redhat/rpm_installer/install.sh +1363 -0
- data/pgpool2/redhat/rpm_installer/pgpool_recovery_pitr +47 -0
- data/pgpool2/redhat/rpm_installer/pgpool_remote_start +15 -0
- data/pgpool2/redhat/rpm_installer/recovery.conf +4 -0
- data/pgpool2/redhat/rpm_installer/uninstall.sh +57 -0
- data/pgpool2/sample/dist_def_pgbench.sql +73 -0
- data/pgpool2/sample/pgpool.pam +3 -0
- data/pgpool2/sample/pgpool_recovery +20 -0
- data/pgpool2/sample/pgpool_recovery_pitr +19 -0
- data/pgpool2/sample/pgpool_remote_start +13 -0
- data/pgpool2/sample/replicate_def_pgbench.sql +18 -0
- data/pgpool2/sql/insert_lock.sql +15 -0
- data/pgpool2/sql/pgpool-recovery/pgpool-recovery.c +280 -0
- data/pgpool2/sql/pgpool-recovery/pgpool-recovery.sql.in +19 -0
- data/pgpool2/sql/pgpool-recovery/pgpool_recovery--1.0.sql +24 -0
- data/pgpool2/sql/pgpool-recovery/pgpool_recovery.control +5 -0
- data/pgpool2/sql/pgpool-recovery/uninstall_pgpool-recovery.sql +3 -0
- data/pgpool2/sql/pgpool-regclass/pgpool-regclass.c +206 -0
- data/pgpool2/sql/pgpool-regclass/pgpool-regclass.sql.in +4 -0
- data/pgpool2/sql/pgpool-regclass/pgpool_regclass--1.0.sql +7 -0
- data/pgpool2/sql/pgpool-regclass/pgpool_regclass.control +5 -0
- data/pgpool2/sql/pgpool-regclass/uninstall_pgpool-regclass.sql +1 -0
- data/pgpool2/sql/system_db.sql +38 -0
- data/pgpool2/strlcpy.c +85 -0
- data/pgpool2/test/C/test_extended.c +98 -0
- data/pgpool2/test/jdbc/.cvsignore +2 -0
- data/pgpool2/test/jdbc/AutoCommitTest.java +45 -0
- data/pgpool2/test/jdbc/BatchTest.java +55 -0
- data/pgpool2/test/jdbc/ColumnTest.java +60 -0
- data/pgpool2/test/jdbc/CreateTempTableTest.java +48 -0
- data/pgpool2/test/jdbc/InsertTest.java +34 -0
- data/pgpool2/test/jdbc/LockTest.java +36 -0
- data/pgpool2/test/jdbc/PgpoolTest.java +75 -0
- data/pgpool2/test/jdbc/README.euc_jp +73 -0
- data/pgpool2/test/jdbc/RunTest.java +83 -0
- data/pgpool2/test/jdbc/SelectTest.java +37 -0
- data/pgpool2/test/jdbc/UpdateTest.java +32 -0
- data/pgpool2/test/jdbc/expected/CreateTempTable +1 -0
- data/pgpool2/test/jdbc/expected/autocommit +10 -0
- data/pgpool2/test/jdbc/expected/batch +1 -0
- data/pgpool2/test/jdbc/expected/column +100 -0
- data/pgpool2/test/jdbc/expected/insert +1 -0
- data/pgpool2/test/jdbc/expected/lock +100 -0
- data/pgpool2/test/jdbc/expected/select +2 -0
- data/pgpool2/test/jdbc/expected/update +1 -0
- data/pgpool2/test/jdbc/pgpool.properties +7 -0
- data/pgpool2/test/jdbc/prepare.sql +54 -0
- data/pgpool2/test/jdbc/run.sh +6 -0
- data/pgpool2/test/parser/.cvsignore +6 -0
- data/pgpool2/test/parser/README +32 -0
- data/pgpool2/test/parser/expected/copy.out +17 -0
- data/pgpool2/test/parser/expected/create.out +64 -0
- data/pgpool2/test/parser/expected/cursor.out +37 -0
- data/pgpool2/test/parser/expected/delete.out +10 -0
- data/pgpool2/test/parser/expected/drop.out +12 -0
- data/pgpool2/test/parser/expected/insert.out +13 -0
- data/pgpool2/test/parser/expected/misc.out +28 -0
- data/pgpool2/test/parser/expected/prepare.out +4 -0
- data/pgpool2/test/parser/expected/privileges.out +31 -0
- data/pgpool2/test/parser/expected/scanner.out +30 -0
- data/pgpool2/test/parser/expected/select.out +89 -0
- data/pgpool2/test/parser/expected/transaction.out +38 -0
- data/pgpool2/test/parser/expected/update.out +11 -0
- data/pgpool2/test/parser/expected/v84.out +37 -0
- data/pgpool2/test/parser/expected/v90.out +25 -0
- data/pgpool2/test/parser/expected/var.out +22 -0
- data/pgpool2/test/parser/input/alter.sql +2 -0
- data/pgpool2/test/parser/input/copy.sql +17 -0
- data/pgpool2/test/parser/input/create.sql +64 -0
- data/pgpool2/test/parser/input/cursor.sql +37 -0
- data/pgpool2/test/parser/input/delete.sql +10 -0
- data/pgpool2/test/parser/input/drop.sql +12 -0
- data/pgpool2/test/parser/input/insert.sql +13 -0
- data/pgpool2/test/parser/input/misc.sql +28 -0
- data/pgpool2/test/parser/input/prepare.sql +4 -0
- data/pgpool2/test/parser/input/privileges.sql +31 -0
- data/pgpool2/test/parser/input/scanner.sql +34 -0
- data/pgpool2/test/parser/input/select.sql +89 -0
- data/pgpool2/test/parser/input/transaction.sql +38 -0
- data/pgpool2/test/parser/input/update.sql +11 -0
- data/pgpool2/test/parser/input/v84.sql +37 -0
- data/pgpool2/test/parser/input/v90.sql +38 -0
- data/pgpool2/test/parser/input/var.sql +22 -0
- data/pgpool2/test/parser/main.c +96 -0
- data/pgpool2/test/parser/parse_schedule +16 -0
- data/pgpool2/test/parser/pool.h +13 -0
- data/pgpool2/test/parser/run-test +62 -0
- data/pgpool2/test/pdo-test/README.euc_jp +58 -0
- data/pgpool2/test/pdo-test/SQLlist/test1.sql +3 -0
- data/pgpool2/test/pdo-test/SQLlist/test2.sql +3 -0
- data/pgpool2/test/pdo-test/collections.inc +11 -0
- data/pgpool2/test/pdo-test/def.inc +7 -0
- data/pgpool2/test/pdo-test/log.txt +0 -0
- data/pgpool2/test/pdo-test/mod/database.inc +36 -0
- data/pgpool2/test/pdo-test/mod/def.inc +0 -0
- data/pgpool2/test/pdo-test/mod/errorhandler.inc +27 -0
- data/pgpool2/test/pdo-test/pdotest.php +11 -0
- data/pgpool2/test/pdo-test/regsql.inc +56 -0
- data/pgpool2/test/pgpool_setup +898 -0
- data/pgpool2/test/regression/README +39 -0
- data/pgpool2/test/regression/clean.sh +21 -0
- data/pgpool2/test/regression/libs.sh +16 -0
- data/pgpool2/test/regression/regress.sh +166 -0
- data/pgpool2/test/regression/tests/001.load_balance/test.sh +128 -0
- data/pgpool2/test/regression/tests/002.native_replication/PgTester.java +47 -0
- data/pgpool2/test/regression/tests/002.native_replication/create.sql +6 -0
- data/pgpool2/test/regression/tests/002.native_replication/test.sh +71 -0
- data/pgpool2/test/regression/tests/003.failover/expected.r +6 -0
- data/pgpool2/test/regression/tests/003.failover/expected.s +6 -0
- data/pgpool2/test/regression/tests/003.failover/test.sh +45 -0
- data/pgpool2/test/regression/tests/004.watchdog/master.conf +12 -0
- data/pgpool2/test/regression/tests/004.watchdog/standby.conf +19 -0
- data/pgpool2/test/regression/tests/004.watchdog/test.sh +52 -0
- data/pgpool2/test/regression/tests/050.bug58/test.sh +50 -0
- data/pgpool2/test/regression/tests/051.bug60/bug.sql +12 -0
- data/pgpool2/test/regression/tests/051.bug60/database-clean.sql +6 -0
- data/pgpool2/test/regression/tests/051.bug60/database-setup.sql +28 -0
- data/pgpool2/test/regression/tests/051.bug60/test.sh +79 -0
- data/pgpool2/test/regression/tests/052.do_query/test.sh +44 -0
- data/pgpool2/test/regression/tests/053.insert_lock_hangs/test.sh +81 -0
- data/pgpool2/test/regression/tests/054.postgres_fdw/test.sh +67 -0
- data/pgpool2/test/regression/tests/055.backend_all_down/test.sh +52 -0
- data/pgpool2/test/regression/tests/056.bug63/jdbctest2.java +66 -0
- data/pgpool2/test/regression/tests/056.bug63/test.sh +47 -0
- data/pgpool2/test/regression/tests/057.bug61/test.sh +40 -0
- data/pgpool2/test/regression/tests/058.bug68/jdbctest3.java +45 -0
- data/pgpool2/test/regression/tests/058.bug68/test.sh +47 -0
- data/pgpool2/test/timestamp/expected/insert.out +16 -0
- data/pgpool2/test/timestamp/expected/misc.out +3 -0
- data/pgpool2/test/timestamp/expected/update.out +6 -0
- data/pgpool2/test/timestamp/input/insert.sql +16 -0
- data/pgpool2/test/timestamp/input/misc.sql +3 -0
- data/pgpool2/test/timestamp/input/update.sql +6 -0
- data/pgpool2/test/timestamp/main.c +129 -0
- data/pgpool2/test/timestamp/parse_schedule +3 -0
- data/pgpool2/test/timestamp/run-test +69 -0
- data/pgpool2/version.h +1 -0
- data/pgpool2/watchdog/Makefile.am +17 -0
- data/pgpool2/watchdog/Makefile.in +505 -0
- data/pgpool2/watchdog/test/stab.c +266 -0
- data/pgpool2/watchdog/test/test.c +85 -0
- data/pgpool2/watchdog/test/wd_child_t.c +87 -0
- data/pgpool2/watchdog/test/wd_lifecheck_t.c +87 -0
- data/pgpool2/watchdog/test/wd_packet_t.c +87 -0
- data/pgpool2/watchdog/test/wd_ping_t.c +20 -0
- data/pgpool2/watchdog/watchdog.c +408 -0
- data/pgpool2/watchdog/watchdog.h +209 -0
- data/pgpool2/watchdog/wd_child.c +444 -0
- data/pgpool2/watchdog/wd_ext.h +123 -0
- data/pgpool2/watchdog/wd_heartbeat.c +577 -0
- data/pgpool2/watchdog/wd_if.c +216 -0
- data/pgpool2/watchdog/wd_init.c +126 -0
- data/pgpool2/watchdog/wd_interlock.c +347 -0
- data/pgpool2/watchdog/wd_lifecheck.c +512 -0
- data/pgpool2/watchdog/wd_list.c +429 -0
- data/pgpool2/watchdog/wd_packet.c +1159 -0
- data/pgpool2/watchdog/wd_ping.c +330 -0
- data/pgpool2/ylwrap +223 -0
- data/pgsql/presto_client.py +346 -0
- data/pgsql/prestogres.py +156 -0
- data/pgsql/setup_functions.sql +21 -0
- data/pgsql/setup_language.sql +3 -0
- data/prestogres.gemspec +23 -0
- metadata +496 -0
@@ -0,0 +1,422 @@
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>pgpool-II $B%A%e!<%H%j%"%k(B</title>
|
5
|
+
<meta http-equiv="Content-Type" content="text/html; charset=iso-2022-jp" />
|
6
|
+
<link href="pgpool.css" rel="stylesheet" type="text/css" />
|
7
|
+
</head>
|
8
|
+
<body>
|
9
|
+
<h1>pgpool-II $B%A%e!<%H%j%"%k(B</h1>
|
10
|
+
<p>pgpool-II $B$N%A%e!<%H%j%"%k$K$h$&$3$=!#(B
|
11
|
+
$B$3$3$G$O!"(Bpgpool-II $B$N%$%s%9%H!<%k$+$i4pK\E*$J@_Dj!"%l%W%j%1!<%7%g%s$*$h$S%Q%i%l%k%/%(%j$N<B9T$r9T$&$^$G$N<j=g$K$D$$$F@bL@$7$^$9!#(B
|
12
|
+
$B$^$?!"(BPostgreSQL $B$N4pK\E*$JA`:n$K4X$9$k@bL@$O9T$$$^$;$s$N$G!"I,MW$G$"$l$P(B PostgreSQL $B$N%I%-%e%a%s%H$r;2>H$7$F$/$@$5$$!#(B</p>
|
13
|
+
<dl>
|
14
|
+
<dt><em>$BL\<!(B</em></dt>
|
15
|
+
<dt>1. <a href="#start">$B$5$";O$a$^$7$g$&(B</a></dt>
|
16
|
+
<dd>1.1. <a href="#install">pgpool-II $B$N%$%s%9%H!<%k(B</a></dd>
|
17
|
+
<dd>1.2. <a href="#config">$B@_Dj%U%!%$%k$N:n@.(B</a></dd>
|
18
|
+
<dd>1.3. <a href="#pcp-config">PCP $B%3%^%s%I$N@_Dj(B</a></dd>
|
19
|
+
<dd>1.4. <a href="#db-node">$B%G!<%?%Y!<%9%N!<%I$N=`Hw(B</a></dd>
|
20
|
+
<dd>1.5. <a href="#start-shutdown">pgpool-II $B$N5/F0$HDd;_(B</a></dd>
|
21
|
+
<dt>2. <a href="#replication">$B=i$a$F$N%l%W%j%1!<%7%g%s(B</a></dt>
|
22
|
+
<dd>2.1. <a href="#replication-config">$B%l%W%j%1!<%7%g%s$N@_Dj(B</a></dd>
|
23
|
+
<dd>2.2. <a href="#replication-check">$B%l%W%j%1!<%7%g%s$N3NG'(B</a></dd>
|
24
|
+
<dt>3. <a href="#parallel">$B%Q%i%l%k%/%(%j$r;H$C$F$_$h$&(B</a></dt>
|
25
|
+
<dd>3.1. <a href="#parallel-config">$B%Q%i%l%k%/%(%j$N@_Dj(B</a></dd>
|
26
|
+
<dd>3.2. <a href="#system-db">$B%7%9%F%`%G!<%?%Y!<%9$N:n@.(B</a></dd>
|
27
|
+
<dd>3.3. <a href="#dist-def">$BJ,;6%k!<%k$NDj5A(B</a></dd>
|
28
|
+
<dd>3.4. <a href="#replicate-def">$BJ#@=%k!<%k$N3NG'(B</a></dd>
|
29
|
+
<dd>3.5. <a href="#parallel-check">$B%Q%i%l%k%/%(%j$N3NG'(B</a></dd>
|
30
|
+
</dl>
|
31
|
+
<h2>1. <a name="start">$B$5$";O$a$^$7$g$&(B</a></h2>
|
32
|
+
<p>$B$3$3$G$O!"%l%W%j%1!<%7%g%s$*$h$S%Q%i%l%k%/%(%j$N<B9T$r9T$&$?$a$N=`Hw$H$7$F!"(Bpgpool-II $B$N%$%s%9%H!<%k$d@_Dj!"%G!<%?%Y!<%9%N!<%I$N=`Hw$K$D$$$F@bL@$7$^$9!#(B</p>
|
33
|
+
<h3>1.1. <a name="install">pgpool-II $B$N%$%s%9%H!<%k(B</a></h3>
|
34
|
+
<p>pgpool-II $B$r%$%s%9%H!<%k$9$k$K$O%=!<%9%3!<%I$rE83+$7$?%G%#%l%/%H%j$G0J2<$N$h$&$K%3%^%s%I$r<B9T$7$^$9!#(B</p>
|
35
|
+
<pre>$ ./configure
|
36
|
+
$ make
|
37
|
+
$ make install</pre>
|
38
|
+
<p><code>configure</code> $B%9%/%j%W%H$G$O(B pgpool-II $B$r%$%s%9%H!<%k$9$k4D6-$K9g$o$;$?@_Dj$,9T$o$l$^$9!#(B
|
39
|
+
$B$^$?!"(B<code>configure</code> $B%9%/%j%W%H$r<B9T$9$k:]$K%3%^%s%I%i%$%s0z?t$r;XDj$9$k$3$H$K$h$j!"(Bpgpool-II $B$N%$%s%9%H!<%k@h$NJQ99$J$I$r9T$&$3$H$,$G$-$^$9!#(B
|
40
|
+
$B%3%^%s%I%i%$%s0z?t$r;XDj$7$J$1$l$P!"(Bpgpool-II $B$O(B <code>/usr/local</code> $B%G%#%l%/%H%j0J2<$K%$%s%9%H!<%k$5$l$^$9!#(B</p>
|
41
|
+
<p><code>make</code> $B%3%^%s%I$r<B9T$9$k$H(B pgpool-II $B$N%=!<%9%3!<%I$,%3%s%Q%$%k$5$l!"(B<code>make install</code> $B%3%^%s%I$G$O<B:]$K%$%s%9%H!<%k$5$l$^$9!#(B
|
42
|
+
$B$J$*!"(B<code>make install</code> $B%3%^%s%I$r<B9T$9$k:]$K(B pgpool-II $B$r%$%s%9%H!<%k$9$k%G%#%l%/%H%j$X$N=q$-9~$_8"8B$,I,MW$G$9!#(B</p>
|
43
|
+
<p>$B$3$3$G$O!"(Bpgpool-II $B$r(B <code>/usr/local</code> $B%G%#%l%/%H%j0J2<$K%$%s%9%H!<%k$7$^$9!#(B</p>
|
44
|
+
<p><em>$BCm0U(B</em>: pgpool-II $B$N%=!<%9%3!<%I$r%3%s%Q%$%k$9$k$K$O(B PostgreSQL 7.4 $B0J9_$G<BAu$5$l$?(B libpq $B%i%$%V%i%j(B (3.0 $B%W%m%H%3%k(B) $B$,I,MW$G$9!#(B
|
45
|
+
<code>configure</code> $B%9%/%j%W%H$r<B9T$7$?:]$K0J2<$N%(%i!<%a%C%;!<%8$,I=<($5$l$?>l9g!"(Blibpq $B%i%$%V%i%j$,%$%s%9%H!<%k$5$l$F$$$J$$$+!"%$%s%9%H!<%k$5$l$F$$$F$b%W%m%H%3%k$N%P!<%8%g%s$,(B 3.0 $B$G$J$$2DG=@-$,$"$j$^$9!#(B</p>
|
46
|
+
<pre>configure: error: libpq is not installed or libpq is old</pre>
|
47
|
+
<p>$B$^$?!"%W%m%H%3%k$N%P!<%8%g%s$,(B 3.0 $B$N(B libpq $B%i%$%V%i%j$,%$%s%9%H!<%k$5$l$F$$$k$K$b78$o$i$:!">e5-$N%(%i!<%a%C%;!<%8$,I=<($5$l$k>l9g!"(B<code>configure</code> $B%9%/%j%W%H$r<B9T$7$?:]$K(B libpq $B%i%$%V%i%j$,G'<1$5$l$F$$$J$$2DG=@-$,$"$j$^$9!#(B</p>
|
48
|
+
<p><code>configure</code> $B%9%/%j%W%H$OI8=`$G$O(B <code>/usr/local/pgsql</code> $B%G%#%l%/%H%j0J2<$+$i%X%C%@%U%!%$%k$d(B libpq $B%i%$%V%i%j$r8!:w$7$^$9!#(B
|
49
|
+
PostgreSQL $B$N%$%s%9%H!<%k@h$,(B <code>/usr/local/pgsql</code> $B%G%#%l%/%H%j0J2<$G$J$1$l$P!"(B<code>configure</code> $B%9%/%j%W%H$r<B9T$9$k:]$K%3%^%s%I%i%$%s0z?t$H$7$F(B <code>--with-pgsql</code> $B$d(B <code>--with-pgsql-includedir</code>$B!"(B<code>--with-pgsql-libdir</code> $B%*%W%7%g%s$r;XDj$7$F$/$@$5$$!#(B</p>
|
50
|
+
<h3>1.2. <a name="config">$B@_Dj%U%!%$%k$N:n@.(B</a></h3>
|
51
|
+
<p>pgpool-II $B$K$D$$$F$N@_Dj$O(B <code>pgpool.conf</code> $B%U%!%$%k$K5-=R$7$^$9!#(B
|
52
|
+
<code>pgpool.conf</code> $B%U%!%$%k$N=q<0$O(B 1 $B9T$4$H$K%Q%i%a!<%?L>$HCM$r(B = $B$G6h@Z$C$?$b$N$G$9!#(B
|
53
|
+
pgpool-II $B$r%$%s%9%H!<%k$9$k$H%5%s%W%k$H$7$F(B <code>pgpool.conf.sample</code> $B%U%!%$%k$,:n@.$5$l$k$N$G!"$=$l$r(B <code>pgpool.conf</code> $B$H$$$&%U%!%$%kL>$K%3%T!<$7$F$+$iJT=8$9$k$H$$$$$G$7$g$&!#(B</p>
|
54
|
+
<pre>$ cp /usr/local/etc/pgpool.conf.sample /usr/local/etc/pgpool.conf</pre>
|
55
|
+
<p><code>pgpool.conf</code> $B%U%!%$%k$N=i4|@_Dj$G$O!"(Bpgpool-II $B$O(B pgpool-II $B$HF1$8%[%9%H$+$i$N%]!<%HHV9f(B 9999 $B$X$N@\B3$r<u$1IU$1$^$9!#(B
|
56
|
+
pgpool-II $B$H0[$J$k%[%9%H$+$i$N@\B3$r<u$1IU$1$k>l9g$O(B <code>listen_addresses</code> $B%Q%i%a!<%?$K(B * $B$r@_Dj$7$^$9!#(B</p>
|
57
|
+
<pre>listen_addresses = 'localhost'
|
58
|
+
port = 9999</pre>
|
59
|
+
<p>$B$3$3$G$O!"(B<code>pgpool.conf</code> $B%U%!%$%k$N=i4|@_Dj$r$=$N$^$^;HMQ$7$^$9!#(B</p>
|
60
|
+
<h3>1.3. <a name="pcp-config">PCP $B%3%^%s%I$N@_Dj(B</a></h3>
|
61
|
+
<p>pgpool-II $B$G$O(B PCP $B%3%^%s%I$H8F$P$l$k%$%s%?%U%'!<%9$rDL$7$F(B pgpool-II $B$NDd;_$d%G!<%?%Y!<%9%N!<%I$K4X$9$k>pJs$NI=<($r9T$$$^$9!#(B
|
62
|
+
PCP $B%3%^%s%I$r;HMQ$9$k$K$O%f!<%6G'>Z$,I,MW$K$J$k$N$G!"%f!<%6L>$H%Q%9%o!<%I$r(B <code>pcp.conf</code> $B%U%!%$%k$K@_Dj$7$^$9!#(B
|
63
|
+
<code>pcp.conf</code> $B%U%!%$%k$N=q<0$O0J2<$N$h$&$K(B 1 $B9T$4$H$K%f!<%6L>$H(B MD5 $B%O%C%7%e$KJQ49$5$l$?%Q%9%o!<%I$r(B : $B$G6h@Z$C$?$b$N$G$9!#(B</p>
|
64
|
+
<pre>postgres:e8a48653851e28c69d0506508fb27fc5</pre>
|
65
|
+
<p>pgpool-II $B$r%$%s%9%H!<%k$9$k$H%5%s%W%k$H$7$F(B <code>pcp.conf.sample</code> $B%U%!%$%k$,:n@.$5$l$k$N$G!"$=$l$r(B <code>pcp.conf</code> $B$H$$$&%U%!%$%kL>$K%3%T!<$7$F$+$iJT=8$9$k$H$$$$$G$7$g$&!#(B</p>
|
66
|
+
<pre>$ cp /usr/local/etc/pcp.conf.sample /usr/local/etc/pcp.conf</pre>
|
67
|
+
<p>$B$J$*!"%Q%9%o!<%I$r(B MD5 $B%O%C%7%e$KJQ49$9$k:]$K$O(B pgpool-II $B$H$H$b$K%$%s%9%H!<%k$5$l$k(B <code>pg_md5</code> $B%3%^%s%I$r;HMQ$7$^$9!#(B
|
68
|
+
<code>pg_md5</code> $B%3%^%s%I$O!"%3%^%s%I%i%$%s0z?t$H$7$F%Q%9%o!<%I$r;XDj$9$k$H!"$=$l$r(B MD5 $B%O%C%7%e$KJQ49$7$?$b$N$rI=<($7$^$9!#(B</p>
|
69
|
+
<p>$BNc$($P!"0J2<$N$h$&$K(B <code>pg_md5</code> $B%3%^%s%I$N%3%^%s%I%i%$%s0z?t$H$7$F(B postgres $B$r;XDj$7$F<B9T$9$k$H!"(Bpostgres $B$r(B MD5 $B%O%C%7%e$KJQ49$7$?$b$N$,I=<($5$l$^$9!#(B</p>
|
70
|
+
<pre>$ /usr/bin/pg_md5 postgres
|
71
|
+
e8a48653851e28c69d0506508fb27fc5</pre>
|
72
|
+
<p>$B$^$?!"(BPCP $B%3%^%s%I$O%M%C%H%o!<%/$rDL$7$F<B9T$5$l$k$N$G!"(Bpgpool-II $B$,(B PCP $B%3%^%s%I$r<u$1IU$1$k%]!<%HHV9f$r(B <code>pgpool.conf</code> $B%U%!%$%k$N(B <code>pcp_port</code> $B%Q%i%a!<%?$K@_Dj$7$^$9!#(B</p>
|
73
|
+
<p>$B$3$3$G$O!"(B<code>pcp_port</code> $B%Q%i%a!<%?$K:G=i$+$i@_Dj$5$l$F$$$k%]!<%HHV9f(B 9898 $B$r$=$N$^$^;HMQ$7$^$9!#(B</p>
|
74
|
+
<pre>pcp_port = 9898</pre>
|
75
|
+
<h3>1.4. <a name="db-node">$B%G!<%?%Y!<%9%N!<%I$N=`Hw(B</a></h3>
|
76
|
+
<p>$B%G!<%?%Y!<%9%N!<%I$H$7$F;HMQ$9$k%G!<%?%Y!<%9%5!<%P$r=`Hw$7$^$9!#(B
|
77
|
+
$B%G!<%?%Y!<%9%5!<%P$O!"(Bpgpool-II $B$HF1$8%[%9%H$G5/F0$7$F$b!"0[$J$k%[%9%H$G$"$C$F$b9=$$$^$;$s!#(B
|
78
|
+
$B$b$A$m$s!"(Bpgpool-II $B$HF1$8%[%9%H$G5/F0$9$k>l9g$O0[$J$k%]!<%HHV9f$r3d$j9g$F!"0[$J$k%[%9%H$G5/F0$9$k>l9g$O(B pgpool-II $B$,5/F0$9$k%[%9%H$+$i%G!<%?%Y!<%9%5!<%P$K@\B3$G$-$k$h$&$K@_Dj$9$kI,MW$,$"$j$^$9!#(B
|
79
|
+
pgpool-II $B$G$O%G!<%?%Y!<%9%5!<%P$4$H$K%l%W%j%1!<%7%g%s$r9T$&$N$G!"%A%e!<%H%j%"%k$N$?$a$N%G!<%?%Y!<%9%/%i%9%?$r:n@.$7$?$[$&$,$$$$$G$7$g$&!#(B</p>
|
80
|
+
<p>$B$3$3$G$O!"(B3 $BBf$N%G!<%?%Y!<%9%5!<%P$r(B pgpool-II $B$HF1$8%[%9%H$N0[$J$k%]!<%HHV9f(B 5432$B!"(B5433$B!"(B5434 $B$G5/F0$7$^$9!#(B
|
81
|
+
$B%G!<%?%Y!<%9%5!<%P$r%G!<%?%Y!<%9%N!<%I$H$7$F;HMQ$9$k$K$O!"(B<code>pgpool.conf</code> $B%U%!%$%k$K0J2<$N$h$&$K%Q%i%a!<%?$r@_Dj$7$^$9!#(B</p>
|
82
|
+
<pre>backend_hostname0 = 'localhost'
|
83
|
+
backend_port0 = 5432
|
84
|
+
backend_weight0 = 1
|
85
|
+
backend_hostname1 = 'localhost'
|
86
|
+
backend_port1 = 5433
|
87
|
+
backend_weight1 = 1
|
88
|
+
backend_hostname2 = 'localhost'
|
89
|
+
backend_port2 = 5434
|
90
|
+
backend_weight2 = 1</pre>
|
91
|
+
<p><code>backend_hostname</code>$B!"(B<code>backend_port</code>$B!"(B<code>backend_weight</code> $B%Q%i%a!<%?$K$O!"%G!<%?%Y!<%9%N!<%I$N%[%9%HL>!"%]!<%HHV9f!"Ii2YJ,;6$9$k:]$N=E$_IU$1$r@_Dj$7$^$9!#(B
|
92
|
+
$B%Q%i%a!<%?L>$N8e$m$K$O(B 0$B!"(B1$B!"(B2$B!"(B… $B$H$$$&$h$&$KJ#?t$N%G!<%?%Y!<%9%N!<%I$r6hJL$9$k$?$a$N?t;z$r;XDj$7$^$9!#(B
|
93
|
+
<code>backend_weight</code> $B%Q%i%a!<%?$O!"J#?t$N%G!<%?%Y!<%9%N!<%I$KLd$$9g$o$;$rIi2YJ,;6$9$k:]!"$I$N%G!<%?%Y!<%9%N!<%I$K$I$N$/$i$$$N3d9g$GLd$$9g$o$;$r9T$&$+$H$$$&$3$H$r@_Dj$9$k%Q%i%a!<%?$G$9!#(B
|
94
|
+
$B$3$3$G$O!"(B3 $BBf$N%G!<%?%Y!<%9%N!<%I$N=E$_IU$1$,$9$Y$F(B 1 $B$K@_Dj$7$F$"$k$N$G!"Ld$$9g$o$;$O(B 1 $BBP(B 1 $BBP(B 1 $B$N3d$j9g$$$GIi2YJ,;6$5$l$k$3$H$K$J$j$^$9!#(B</p>
|
95
|
+
<h3>1.5. <a name="start-shutdown">pgpool-II $B$N5/F0$HDd;_(B</a></h3>
|
96
|
+
<p>pgpool-II $B$r5/F0$9$k$K$O0J2<$N$h$&$K(B <code>pgpool</code> $B%3%^%s%I$r<B9T$7$^$9!#(B</p>
|
97
|
+
<pre>$ pgpool</pre>
|
98
|
+
<p>
|
99
|
+
$B$?$@$7!"$3$N$^$^$G$O(B <code>pgpool</code> $B%W%m%;%9$O@)8fC<Kv$r@Z$jN%(B
|
100
|
+
$B$9$?$a!"%m%0$,=PNO$5$l$J$/$J$j$^$9(B($B%(%i!<$OI8=`%(%i!<$K=PNO$5$l$^$9(B)$B!#(B
|
101
|
+
$B@)8fC<Kv$r@Z$jN%$5$J$$$G5/F0$9$k>l9g$O(B <code>-n</code> $B%*%W%7%g%s$r;XDj$7$^$9!#(B
|
102
|
+
</p>
|
103
|
+
|
104
|
+
<pre>
|
105
|
+
$ pgpool -n &
|
106
|
+
</pre>
|
107
|
+
|
108
|
+
<p>
|
109
|
+
$B%3%^%s%I$r<B9T$7$?C<Kv$K%m%0%a%C%;!<%8$,I=<($5$l$k$N$G!"0J2<$N$h$&$K%m%0%a%C%;!<%8$r%U%!%$%k$KJ]B8$9$k$h$&$K<B9T$9$k$3$H$r$*4+$a$7$^$9!#(B</p>
|
110
|
+
<pre>$ pgpool -n -d > /var/log/pgpool/pgpool.log 2>&1 &</pre>
|
111
|
+
<p><code>-d</code> $B%*%W%7%g%s$O%G%P%C%0%a%C%;!<%8$N=PNO$rM-8z$K$7$^$9!#(B</p>
|
112
|
+
<p>
|
113
|
+
$B>e5-$NNc$O%U%!%$%k$K%j%@%$%l%/%H$5$;$F$$$k$?$a!"%m%0$,DI2C$5$lB3$1$^$9!#(B
|
114
|
+
$B%m%0$r%m!<%F!<%H$5$;$?$$>l9g$O!"%m!<%F!<%H5!G=$r;}$C$?%3%^%s%I$K%m%0$r(B
|
115
|
+
$BEO$7$F$/$@$5$$!#(B
|
116
|
+
|
117
|
+
$B$?$H$($P!"(BApache2$B$KIUB0$9$k(Brotatelogs$B$r;H$&$N$G$"$l$P!"(B
|
118
|
+
|
119
|
+
<pre>
|
120
|
+
$ pgpool -n 2>&1 | /usr/local/apache2/bin/rotatelogs \
|
121
|
+
-l -f /var/log/pgpool/pgpool.log.%A 86400 &
|
122
|
+
</pre>
|
123
|
+
|
124
|
+
$B$H$9$l$PKhF|LkCf$N(B0$B;~$K%m%0$,%m!<%F!<%H$5$l!"(Bpgpool.log.Thursday $B$N$h$&$JL>A0$N%m%0%U%!%$%k$,KhF|:n@.$5$l$^$9!#(B
|
125
|
+
$B$?$@$7!"$9$G$KF1$8L>A0$N%U%!%$%k$,$"$k>l9g$K$O%m%0$,$=$N%U%!%$%k$KDI2C$5$l$F$7$^$&$N$G!"(Bcron$B$r;H$C$F8E$$%m%0%U%!%$%k$r>C5n$9$k@_Dj$rJ;$;$F9T$C$F$*$/J}$,NI$$$G$7$g$&!#(B
|
126
|
+
$BNc$r<($7$^$9!#(B
|
127
|
+
<pre>
|
128
|
+
55 23 * * * /usr/bin/find /var/log/pgpool -type f -mtime +5 -exec /bin/rm -f '{}' \;
|
129
|
+
</pre>
|
130
|
+
</p>
|
131
|
+
<p>
|
132
|
+
<em>$BCm0U(B</em>: Linux$B%G%#%9%H%j%S%e!<%7%g%s$K$h$C$F$O!"(Brotatelogs $B$O(B /usr/sbin/rotatelogs2 $B$N$h$&$JL>A0$G%$%s%9%H!<%k$5$l$F$$$k$+$bCN$l$^$;$s!#(B
|
133
|
+
-f $B%*%W%7%g%s$O(B rotatelogs $B$,5/F0$5$l$?D>8e$KD>$A$K%m%0%U%!%$%k$r:n$k%*%W%7%g%s$G!"(Bapache2 2.2.9 $B0J9_$G$N$_M-8z$G$9!#(B
|
134
|
+
</p>
|
135
|
+
|
136
|
+
<p>
|
137
|
+
<a href="http://www.cronolog.org/"><code>cronolog</code></a> $B$r;H$&>l9g$G$"$l$P!"0J2<$N$h$&$K%Q%$%W$G%m%0%a%C%;!<%8$rEO$7$F$/$@$5$$!#(B
|
138
|
+
|
139
|
+
<pre>
|
140
|
+
$ pgpool -n 2>&1 | /usr/sbin/cronolog \
|
141
|
+
--hardlink=/var/log/pgpool/pgpool.log \
|
142
|
+
'/var/log/pgpool/%Y-%m-%d-pgpool.log' &
|
143
|
+
</pre>
|
144
|
+
</p>
|
145
|
+
|
146
|
+
<p>pgpool-II $B$rDd;_$9$k$K$O0J2<$N$h$&$K(B <code>pgpool</code> $B%3%^%s%I$r<B9T$7$^$9!#(B</p>
|
147
|
+
<pre>$ pgpool stop</pre>
|
148
|
+
<p>pgpool-II $B$rDd;_$9$k:]$K%/%i%$%"%s%H$,@\B3$7$F$$$k>l9g!"$=$N@\B3$,@ZCG$5$l$k$^$GBT$C$F$+$iDd;_$7$^$9!#(B
|
149
|
+
$B%/%i%$%"%s%H$N@\B3$,@ZCG$5$l$k$^$GBT$?$:$KDd;_$9$k$K$O0J2<$N$h$&$K(B <code>pgpool</code> $B%3%^%s%I$r<B9T$7$^$9!#(B</p>
|
150
|
+
<pre>$ pgpool -m fast stop</pre>
|
151
|
+
<h2>2. <a name="replication">$B=i$a$F$N%l%W%j%1!<%7%g%s(B</a></h2>
|
152
|
+
<p>$B%l%W%j%1!<%7%g%s$G$OJ#?t$N%G!<%?%Y!<%9%N!<%I$KF1$8%G!<%?$rJ#@=$7$F3JG<$7$^$9!#(B</p>
|
153
|
+
<p>$B$3$3$G$O!"!V(B1. <a href="#start">$B$5$";O$a$^$7$g$&(B</a>$B!W$G=`Hw$7$?(B 3 $BBf$N%G!<%?%Y!<%9%N!<%I$r;HMQ$7!"(Bpgbench $B$,:n@.$9$k%G!<%?%Y!<%9$N%l%W%j%1!<%7%g%s$r9T$&$^$G$N<j=g$K$D$$$F@bL@$7$^$9!#(B</p>
|
154
|
+
<h3>2.1. <a name="replication-config">$B%l%W%j%1!<%7%g%s$N@_Dj(B</a></h3>
|
155
|
+
<p>$B%G!<%?%Y!<%9%N!<%I$N%l%W%j%1!<%7%g%s$rM-8z$K$9$k$K$O!"(B<code>pgpool.conf</code> $B%U%!%$%k$N(B <code>replication_mode</code> $B%Q%i%a!<%?$r(B true $B$K@_Dj$7$^$9!#(B</p>
|
156
|
+
<pre>replication_mode = true</pre>
|
157
|
+
<p>$B>e5-$N$h$&$K(B <code>replication_mode</code> $B%Q%i%a!<%?$r(B true $B$K@_Dj$9$k$3$H$K$h$j!"(Bpgpool-II $B$X$NLd$$9g$o$;$,$9$Y$F$N%G!<%?%Y!<%9%N!<%I$KBP$7$F<B9T$5$l!"F1$8%G!<%?$,J#@=$5$l$F3JG<$5$l$k$h$&$K$J$j$^$9!#(B
|
158
|
+
<p>$B$5$i$K!"(B<code>load_balance_mode</code> $B%Q%i%a!<%?$r(B true $B$K@_Dj$9$k$3$H$K$h$j!"(Bpgpool-II $B$KBP$9$k(B SELECT $BJ8$rJ#?t$N%G!<%?%Y!<%9%N!<%I$KBP$7$F?6$jJ,$1!"Ii2YJ,;6$r9T$&$3$H$,$G$-$^$9!#(B</p>
|
159
|
+
<pre>load_balance_mode = true</pre>
|
160
|
+
<p>$B$3$3$G$O!"(B<code>replication_mode</code>$B!"(B<code>load_balance_mode</code> $B%Q%i%a!<%?$r(B true $B$K@_Dj$7$^$9!#(B</p>
|
161
|
+
<h3>2.2. <a name="replication-check">$B%l%W%j%1!<%7%g%s$N3NG'(B</a></h3>
|
162
|
+
<p>$B%l%W%j%1!<%7%g%s$N@_Dj$r(B pgpool-II $B$KH?1G$5$;$k$K$O(B pgpool-II $B$r:F5/F0$9$kI,MW$,$"$j$^$9!#(B
|
163
|
+
pgpool-II $B$N:F5/F0$K$D$$$F$O!V(B1.5. <a href="#start-shutdown">pgpool-II $B$N5/F0$HDd;_(B</a>$B!W$r;2>H$7$F$/$@$5$$!#(B</p>
|
164
|
+
<p>$B%l%W%j%1!<%7%g%s$rM-8z$K$7$F(B pgpool-II $B$r5/F0$G$-$?$i!"<B:]$K(B pgbench $B$r;HMQ$7$F%l%W%j%1!<%7%g%s$,9T$o$l$F$$$k$3$H$r3NG'$7$^$7$g$&!#(B</p>
|
165
|
+
<p>$B$^$:!"(Bpgbench $B$,;HMQ$9$k%G!<%?%Y!<%9(B bench_replication $B$r:n@.$7$^$9!#(B
|
166
|
+
<code>createdb</code> $B%3%^%s%I$r(B pgpool-II $B$KBP$7$F<B9T$9$k$H!"$9$Y$F$N%G!<%?%Y!<%9%N!<%I$KBP$7$F%G!<%?%Y!<%9(B bench_replication $B$,:n@.$5$l$^$9!#(B</p>
|
167
|
+
<pre>$ createdb -p 9999 bench_replication</pre>
|
168
|
+
<p>$B$=$7$F!"(B<code>pgbench</code> $B%3%^%s%I$K(B <code>-i</code> $B%*%W%7%g%s$r;XDj$7$F<B9T$9$k$3$H$K$h$j!"%G!<%?%Y!<%9(B bench_replication $B$KBP$7$F(B pgbench $B$G;HMQ$9$k%F!<%V%k$r:n@.$7!"%G!<%?$r=i4|2=$7$^$9!#(B</p>
|
169
|
+
<pre>$ pgbench -i -p 9999 bench_replication</pre>
|
170
|
+
<p><code>pgbench</code> $B%3%^%s%I$K(B <code>-i</code> $B%*%W%7%g%s$r;XDj$7$F<B9T$7$?:]$K:n@.$5$l$k%F!<%V%k$H$=$l$>$l$N%F!<%V%k$N9T?t$O0J2<$N$H$*$j$G$9!#(B
|
171
|
+
$B$9$Y$F$N%G!<%?%Y!<%9%N!<%I$N%G!<%?%Y!<%9(B bench_replication $B$K0J2<$N9T?t$N%G!<%?$,3JG<$5$l$F$$$l$P!"@5>o$K%l%W%j%1!<%7%g%s$,9T$o$l$F$$$k$3$H$K$J$j$^$9!#(B</p>
|
172
|
+
|
173
|
+
<center>
|
174
|
+
<table border>
|
175
|
+
<tr>
|
176
|
+
<th>$B%F!<%V%kL>(B</th>
|
177
|
+
<th>$B9T?t(B</th>
|
178
|
+
</tr>
|
179
|
+
<tr>
|
180
|
+
<td>branches</td>
|
181
|
+
<td>1</td>
|
182
|
+
</tr>
|
183
|
+
<tr>
|
184
|
+
<td>tellers</td>
|
185
|
+
<td>10</td>
|
186
|
+
</tr>
|
187
|
+
<tr>
|
188
|
+
<td>accounts</td>
|
189
|
+
<td>100000</td>
|
190
|
+
</tr>
|
191
|
+
<tr>
|
192
|
+
<td>history</td>
|
193
|
+
<td>0</td>
|
194
|
+
</tr>
|
195
|
+
</table>
|
196
|
+
</center>
|
197
|
+
<p>$BNc$($P!"0J2<$N$h$&$K%3%^%s%I$r<B9T$9$k$H!"$9$Y$F$N%G!<%?%Y!<%9%N!<%I(B ($B%]!<%HHV9f(B 5432$B!"(B5433$B!"(B5434) $B$N%G!<%?%Y!<%9(B bench_replication $B$K4^$^$l$k%F!<%V%k(B branches$B!"(Btellers$B!"(Baccounts$B!"(Bhistory $B$N9T?t$,I=<($5$l$^$9!#(B</p>
|
198
|
+
<pre>$ for port in 5432 5433 5434; do
|
199
|
+
> echo $port
|
200
|
+
> for table_name in branches tellers accounts history; do
|
201
|
+
> echo $table_name
|
202
|
+
> psql -c "SELECT count(*) FROM $table_name" -p $port bench_replication
|
203
|
+
> done
|
204
|
+
> done
|
205
|
+
</pre>
|
206
|
+
<h2>3. <a name="parallel">$B%Q%i%l%k%/%(%j$r;H$C$F$_$h$&(B</a></h2>
|
207
|
+
<p>$B%Q%i%l%k%/%(%j$G$OJ#?t$N%G!<%?%Y!<%9%N!<%I$K0[$J$kHO0O$N%G!<%?$r3JG<$7$^$9!#$3$l$r%Q!<%F%#%7%g%K%s%0$H8F$S$^$9!#$^$?%Q!<%F%#%7%g%s%K%s%0$H6&$KJ#?t$N%G!<%?%Y!<%9%N!<%I$KF1$8%G!<%?$rJ#@=$9$k$3$H$b$G$-$^$9!#$D$^$j%Q!<%F%#%7%g%K%s%0$7$F$$$k%F!<%V%k$H%l%W%j%1!<%7%g%s$7$F$$$k%F!<%V%k$r6&B8$5$;$k$3$H$,$G$-$^$9!#(B</p>
|
208
|
+
<p>$B%Q%i%l%k%/%(%j$r;HMQ$9$k$K$O%7%9%F%`%G!<%?%Y!<%9$H8F$P$l$kFCJL$J%G!<%?%Y!<%9$,I,MW$G$9!#(B</p>
|
209
|
+
<p>$B%7%9%F%`%G!<%?%Y!<%9$G$O!"$I$N%G!<%?%Y!<%9%N!<%I$KBP$7$F$I$N%G!<%?$r3JG<$9$k$+$H$$$&J,;6%k!<%k$r3JG<$7$F$*$j!"$=$l$K$h$C$F%G!<%?$rJ#?t$N%G!<%?%Y!<%9%N!<%I$KJ,;6$5$;$^$9!#(B
|
210
|
+
$B$^$?!"%7%9%F%`%G!<%?%Y!<%9$O!"(Bdblink $B$r;HMQ$9$k$3$H$K$h$C$FJ#?t$N%G!<%?%Y!<%9%N!<%I$KLd$$9g$o$;$r?6$jJ,$1!"$=$l$>$l$N%G!<%?%Y!<%9%N!<%I$G<B9T$5$l$?7k2L$r(B 1 $B$D$K$^$H$a$^$9!#(B</p>
|
211
|
+
<p>$B$3$3$G$O!"!V(B1. <a href="#start">$B$5$";O$a$^$7$g$&(B</a>$B!W$G=`Hw$7$?(B 3 $BBf$N%G!<%?%Y!<%9%N!<%I$r;HMQ$7!"(Bpgbench $B$,:n@.$9$k%G!<%?%Y!<%9$KBP$7$F%Q%i%l%k%/%(%j$r<B9T$9$k$^$G$N<j=g$K$D$$$F@bL@$7$^$9!#(B</p>
|
212
|
+
<h3>3.1. <a name="parallel-config">$B%Q%i%l%k%/%(%j$N@_Dj(B</a></h3>
|
213
|
+
<p>$B%Q%i%l%k%/%(%j$rM-8z$K$9$k$K$O(B <code>pgpool.conf</code> $B%U%!%$%k$N(B <code>parallel_mode</code> $B%Q%i%a!<%?$r(B true $B$K@_Dj$7$^$9!#(B</p>
|
214
|
+
<pre>parallel_mode = true</pre>
|
215
|
+
<p>$B$?$@$7!">e5-$N$h$&$K(B <code>parallel_mode</code> $B%Q%i%a!<%?$r(B true $B$K@_Dj$7$?$@$1$G$O!"J#?t$N%G!<%?%Y!<%9%N!<%I$KBP$7$F%G!<%?$rJ,;6$G$-$^$;$s!#(B
|
216
|
+
$B$5$i$K!"%7%9%F%`%G!<%?%Y!<%9$r:n@.$7!"J,;6%k!<%k$NDj5A$HEPO?$r9T$&I,MW$,$"$j$^$9!#(B</p>
|
217
|
+
<p>$B$^$?!"(Bdblink $B$G$O%7%9%F%`%G!<%?%Y!<%9$+$i(B pgpool-II $B$X$N(B TCP/IP $B@\B3$,9T$o$l$k$?$a!"(B<code>listen_addresses</code> $B%Q%i%a!<%?$rE,@Z$K@_Dj$9$kI,MW$,$"$j$^$9!#(B</p>
|
218
|
+
<pre>listen_addresses = '*'</pre>
|
219
|
+
<p><em>$BCm0U(B</em>: $B%Q%i%l%k%/%(%j$H%l%W%j%1!<%7%g%s$rF1;~$KM-8z$K$9$k$3$H$,$G$-$^$9$,!"%Q!<%F%#%7%g%K%s%0$7$F$$$k%F!<%V%k$KBP$7$F$O!"%l%W%j%1!<%7%g%s$5$l$^$;$s!#(B
|
220
|
+
$B$^$?!"%Q%i%l%k%/%(%j$H%l%W%j%1!<%7%g%s$G$O%G!<%?%Y!<%9$K3JG<$5$l$k%G!<%?$N9=@.$,0[$J$k$?$a!"!V(B2. <a href="#replication">$B=i$a$F$N%l%W%j%1!<%7%g%s(B</a>$B!W$G:n@.$7$?%G!<%?%Y!<%9(B bench_replication $B$r$=$N$^$^;HMQ$9$k$3$H$O$G$-$^$;$s!#(B</p>
|
221
|
+
<pre>replication_mode = true
|
222
|
+
load_balance_mode = false</pre>
|
223
|
+
<p>$B$^$?$O!"(B</p>
|
224
|
+
<pre>replication_mode = false
|
225
|
+
load_balance_mode = true</pre>
|
226
|
+
<p>$B$3$3$G$O!"(B<code>parallel_mode</code> $B%Q%i%a!<%?$r(B true $B$K!"(B<code>listen_addresses</code> $B%Q%i%a!<%?$r(B * $B$K!"(B<code>replication_mode</code>$B!"(B<code>load_balance_mode</code> $B%Q%i%a!<%?$r(B false $B$K@_Dj$7$^$9!#(B</p>
|
227
|
+
<h3>3.2. <a name="system-db">$B%7%9%F%`%G!<%?%Y!<%9$N:n@.(B</a></h3>
|
228
|
+
<p>$B%7%9%F%`%G!<%?%Y!<%9$HDL>o$N%G!<%?%Y!<%9$K0c$$$O$"$j$^$;$s!#(B
|
229
|
+
$B$?$@$7!"%7%9%F%`%G!<%?%Y!<%9$K$O!"(Bdblink $B$N4X?t$,Dj5A$5$l$F$*$j!"J,;6%k!<%k$r3JG<$9$k%F!<%V%k(B dist_def $B$,Dj5A$5$l$F$$$kI,MW$,$"$j$^$9!#(B
|
230
|
+
$B$^$?!"%G!<%?%Y!<%9%N!<%I$N(B 1 $BBf$K%7%9%F%`%G!<%?%Y!<%9$r:n@.$9$k$3$H$b$G$-$^$9$7!"(Bpgpool-II$B$r%+%9%1!<%I@\B3$9$k$3$H$GIi2YJ,;6$9$k$3$H$b$G$-$^$9!#(B</p>
|
231
|
+
<p>$B$3$3$G$O!"0J2<$N(B <code>pgpool.conf</code> $B%U%!%$%k$N=i4|@_Dj$K=>$C$F%7%9%F%`%G!<%?%Y!<%9$r:n@.$7$^$9!#(B</p>
|
232
|
+
<pre>system_db_hostname = 'localhost'
|
233
|
+
system_db_port = 5432
|
234
|
+
system_db_dbname = 'pgpool'
|
235
|
+
system_db_schema = 'pgpool_catalog'
|
236
|
+
system_db_user = 'pgpool'
|
237
|
+
system_db_password = ''</pre>
|
238
|
+
<p><code>pgpool.conf</code> $B%U%!%$%k$N=i4|@_Dj$G$O!"%7%9%F%`%G!<%?%Y!<%9$O(B pgpool-II $B$HF1$8%[%9%H$N%]!<%HHV9f(B 5432 $B$G5/F0$9$k%G!<%?%Y!<%9%5!<%P!"$D$^$j!"(B1 $BBfL\$N%G!<%?%Y!<%9%N!<%I$K:n@.$9$k$3$H$K$J$j$^$9!#(B
|
239
|
+
$B$^$?!"%7%9%F%`%G!<%?%Y!<%9$N%G!<%?%Y!<%9L>$O(B pgpool $B$K!"%7%9%F%`%G!<%?%Y!<%9$K@\B3$9$k%f!<%6L>$b(B pgpool $B$K@_Dj$5$l$F$$$k$N$G!"(Bpgpool $B$H$$$&%f!<%6$r:n@.$7$F$+$i%f!<%6(B pgpool $B$r=jM-<T$H$7$F%G!<%?%Y!<%9(B pgpool $B$r:n@.$7$^$9!#(B
|
240
|
+
</p>
|
241
|
+
<pre>$ createuser -p 5432 pgpool
|
242
|
+
$ createdb -p 5432 -O pgpool pgpool</pre>
|
243
|
+
<h4><p>3.2.1. dblink $B$N%$%s%9%H!<%k(B</p></h4>
|
244
|
+
<p>$B%7%9%F%`%G!<%?%Y!<%9$H$7$F%G!<%?%Y!<%9(B pgpool $B$,:n@.$G$-$?$i!"(Bdblink $B$r%$%s%9%H!<%k$7$^$9!#(B
|
245
|
+
dblink $B$O(B PostgreSQL $B$N%=!<%9%3!<%I$N(B <code>contrib</code> $B%G%#%l%/%H%j$K4^$^$l$k%D!<%k$N(B 1 $B$D$G$9!#(B</p>
|
246
|
+
<p>dblink $B$r%$%s%9%H!<%k$9$k$K$O(B PostgreSQL $B$N%=!<%9%3!<%I$rE83+$7$?%G%#%l%/%H%j$G0J2<$N$h$&$K%3%^%s%I$r<B9T$7$^$9!#(B</p>
|
247
|
+
<pre>$ USE_PGXS=1 make -C contrib/dblink
|
248
|
+
$ USE_PGXS=1 make -C contrib/dblink install</pre>
|
249
|
+
<p>$B%G!<%?%Y!<%9(B pgpool $B$KBP$7$F(B dblink $B$N4X?t$rDj5A$7$^$9!#(B
|
250
|
+
PostgreSQL $B$N%$%s%9%H!<%k@h$,(B <code>/usr/local/pgsql</code> $B%G%#%l%/%H%j0J2<$G$"$l$P!"(B<code>/usr/local/pgsql/share/contrib</code> $B%G%#%l%/%H%j$K(B dblink $B$N4X?t$rDj5A$9$k$?$a$N(B <code>dblink.sql</code> $B%U%!%$%k$,B8:_$7$^$9!#(B
|
251
|
+
$B$=$l$r;HMQ$7$F0J2<$N$h$&$K(B <code>psql</code> $B%3%^%s%I$r<B9T$7$^$9!#(B</p>
|
252
|
+
<pre>$ psql -f /usr/local/pgsql/share/contrib/dblink.sql -p 5432 pgpool</pre>
|
253
|
+
<h4><p>3.2.2. $B%F!<%V%k(B dist_def $B$NDj5A(B</p></h4>
|
254
|
+
<p>$BJ,;6%k!<%k$r3JG<$9$k%F!<%V%k(B dist_def $B$r%7%9%F%`%G!<%?%Y!<%9(B pgpool $B$KDj5A$7$^$9!#(B
|
255
|
+
pgpool-II $B$r%$%s%9%H!<%k$9$k$H%F!<%V%k(B dist_def $B$r4^$a$F%7%9%F%`%G!<%?%Y!<%9$r:n@.$9$k$?$a$N(B <code>system_db.sql</code> $B%U%!%$%k$,:n@.$5$l$k$N$G!"$=$l$r;HMQ$7$F0J2<$N$h$&$K(B <code>psql</code> $B%3%^%s%I$r<B9T$7$^$9!#(B</p>
|
256
|
+
<pre>$ psql -f /usr/local/share/system_db.sql -p 5432 -U pgpool pgpool</pre>
|
257
|
+
<p><code>system_db.sql</code> $B%U%!%$%k$G$O!"%9%-!<%^(B pgpool_catalog $B$K%F!<%V%k(B dist_def $B$J$I$rDj5A$7$F$$$^$9!#(B
|
258
|
+
$B=>$C$F!"(B<code>pgpool.conf</code> $B%U%!%$%k$N(B <code>system_db_schema</code> $B%Q%i%a!<%?$G(B pgpool_catalog $B$G$J$$%9%-!<%^L>$r;XDj$7$F$$$k>l9g!"(B<code>system_db.sql</code> $B%U%!%$%k$rJT=8$7$F%9%-!<%^L>$rJQ99$9$kI,MW$,$"$j$^$9!#(B</p>
|
259
|
+
<p>$B%F!<%V%k(B dist_def $B$O0J2<$N$h$&$KDj5A$5$l$F$*$j!"%F!<%V%kL>$rJQ99$9$k$3$H$O$G$-$^$;$s!#(B</p>
|
260
|
+
<pre>CREATE TABLE pgpool_catalog.dist_def (
|
261
|
+
dbname text, -- $B%G!<%?%Y!<%9L>(B
|
262
|
+
schema_name text, -- $B%9%-!<%^L>(B
|
263
|
+
table_name text, -- $B%F!<%V%kL>(B
|
264
|
+
col_name text NOT NULL CHECK (col_name = ANY (col_list)), -- $BJ,;6%-!<NsL>(B
|
265
|
+
col_list text[] NOT NULL, -- $B%F!<%V%k$NNsL>(B
|
266
|
+
type_list text[] NOT NULL, -- $B%F!<%V%k$N%G!<%?7?L>(B
|
267
|
+
dist_def_func text NOT NULL, -- $BJ,;6%k!<%k4X?t(B
|
268
|
+
PRIMARY KEY (dbname, schema_name, table_name)
|
269
|
+
);</pre>
|
270
|
+
<p>$B%F!<%V%k(B dist_def $B$K3JG<$5$l$k%G!<%?$OBg$-$/J,$1$F0J2<$N(B 2 $B$D$G$9!#(B</p>
|
271
|
+
<ul>
|
272
|
+
<li>$BJ,;6%k!<%k(B (col_name$B!"(Bdist_def_func)</li>
|
273
|
+
<li>$B%F!<%V%k$N%a%?>pJs(B (dbname$B!"(Bschema_name$B!"(Btable_name$B!"(Bcol_list$B!"(Btype_list)</li>
|
274
|
+
</ul>
|
275
|
+
<p>$B$^$:!"J,;6%k!<%k$O$I$N%G!<%?$r$I$N%G!<%?%Y!<%9%N!<%I$K3JG<$9$k$+$H$$$&$3$H$r7hDj$9$k$?$a$N%G!<%?$G$9!#(B
|
276
|
+
col_name $BNs$K$O%F!<%V%k$N$I$NNs$NCM$K$h$C$F3JG<$9$k%G!<%?%Y!<%9%N!<%I$r7hDj$9$k$+$H$$$&$3$H$r;XDj$7$^$9!#(B
|
277
|
+
dist_def_func $BNs$K$O!"(Bcol_name $BNs$K;XDj$5$l$?Ns$NCM$r0z?t$H$7$F<u$1<h$j!"%G!<%?%Y!<%9%N!<%I$NHV9f$rJV$94X?t$r;XDj$7$^$9!#(B</p>
|
278
|
+
<p>$B%F!<%V%k$N%a%?>pJs$OLd$$9g$o$;$N=q$-49$($r9T$&:]$K;HMQ$5$l$k%G!<%?$G$9!#(B
|
279
|
+
$B%Q%i%l%k%/%(%j$G$O!"Ld$$9g$o$;$rJ#?t$N%G!<%?%Y!<%9%N!<%I$K?6$jJ,$1!"$=$l$>$l$N%G!<%?%Y!<%9%N!<%I$G<B9T$5$l$?7k2L$r(B 1 $B$D$K$^$H$a$k$?$a!"Ld$$9g$o$;$N=q$-49$($r9T$$$^$9!#(B</p>
|
280
|
+
|
281
|
+
|
282
|
+
<h4><p>3.2.3. $B%F!<%V%k(B replicate_def $B$NDj5A(B</p></h4>
|
283
|
+
<p>
|
284
|
+
$B0l$D$N(BSQL$BJ8$K%F!<%V%k$N7k9gEy$G(Bdist_def$B$KEPO?$7$?%F!<%V%k$H6&$K%l%W%j%1!<%7%g%s$r9T$&%F!<%V%k$r;XDj$9$k>l9g$K$O!"(B
|
285
|
+
$B%l%W%j%1!<%7%g%s$r9T$&%F!<%V%k$N>pJs(B($BJ#@=%k!<%k(B)$B$r$"$i$+$8$a!"(Breplicate_def $B$H$$$&%F!<%V%k$KEPO?$7$F$*$-$^$9!#(B
|
286
|
+
$B%F!<%V%k(B dist_def $B$NDj5A$N:]$K!"(Bsystem_db.sql$B%U%!%$%k$+$i:n@.$7$?>l9g$K$O!"$9$G$K(Breplicate_def$B%F!<%V%k$,:n@.$5$l$F$$$^$9!#(B
|
287
|
+
replicate_def$B%F!<%V%k$O0J2<$N$h$&$KDj5A$5$l$F$$$^$9!#(B
|
288
|
+
<pre>
|
289
|
+
CREATE TABLE pgpool_catalog.replicate_def(
|
290
|
+
dbname TEXT, -- $B%G!<%?%Y!<%9L>(B
|
291
|
+
schema_name TEXT, -- $B%9%-!<%^L>(B
|
292
|
+
table_name TEXT, -- $B%F!<%V%kL>(B
|
293
|
+
col_list TEXT[] NOT NULL, -- $B%F!<%V%k$NNsL>(B
|
294
|
+
type_list TEXT[] NOT NULL, -- $B%F!<%V%k$N%G!<%?7?L>(B
|
295
|
+
PRIMARY KEY (dbname,schema_name,table_name)
|
296
|
+
);
|
297
|
+
</pre>
|
298
|
+
</p>
|
299
|
+
<p>
|
300
|
+
$B%F!<%V%k(B replicate_def $B$K3JG<$5$l$k%G!<%?$O%F!<%V%k$N%a%?>pJs(B(dbname$B!"(Bschema_name$B!"(Btable_name$B!"(Bcol_list$B!"(Btype_list)$B$H$J$j$^$9!#(B
|
301
|
+
</p>
|
302
|
+
|
303
|
+
<p>
|
304
|
+
pgpool-ll $B$O!"%/%(%j$K;H$o$l$F$$$k!"$9$Y$F$N%F!<%V%k!"%+%i%`!"7?>pJs$r(Bdist_def$B$^$?$O!"(Breplicate_def$B%F!<%V%k$KEPO?$7$F$$$k>pJs(B
|
305
|
+
$B$rMQ$$$F!"%/%(%j$N2r@O$H%/%(%j$N=q$-49$($r9T$$$^$9!#$=$N$?$a(B replicate_def$B%F!<%V%k$K@5$7$$>pJs$rEPO?$7$F$*$+$J$$$H!"@5$7$$<B9T(B
|
306
|
+
$B7k2L$,F@$i$l$J$$2DG=@-$,$"$j$^$9!#(B
|
307
|
+
</p>
|
308
|
+
|
309
|
+
<h3>3.3. <a name="dist-def">$BJ,;6%k!<%k$NDj5A(B</a></h3>
|
310
|
+
<p>$BJ,;6%k!<%k$O$I$N%G!<%?$r$I$N%G!<%?%Y!<%9%N!<%I$K3JG<$9$k$+$H$$$&$3$H$r7hDj$9$k$b$N$G$9!#(B</p>
|
311
|
+
<p>$B$3$3$G$O!"%9%1!<%k%U%!%/%?!<(B 3 $B$r;XDj$7$F%G!<%?$r=i4|2=$7$?(B pgbench $B$N%F!<%V%k$r(B 3 $BBf$N%G!<%?%Y!<%9%N!<%I$K?6$jJ,$1$k$?$a$NJ,;6%k!<%k$rDj5A$7$^$9!#(B
|
312
|
+
$B$J$*!"%G!<%?%Y!<%9$O!V(B2. <a href="#replication">$B=i$a$F$N%l%W%j%1!<%7%g%s(B</a>$B!W$G;HMQ$7$?%G!<%?%Y!<%9(B bench_replication $B$H$OJL$K%G!<%?%Y!<%9(B bench_parallel $B$r:n@.$9$k$3$H$K$7$^$9!#(B</p>
|
313
|
+
<p>$B$J$*!"%=!<%9%3!<%I$N(B <code>sample</code> $B%G%#%l%/%H%j$K$O0J2<$N@bL@$G;HMQ$9$kJ,;6%k!<%k$,Dj5A$5$l$?%U%!%$%k(B <code>dist_def_pgbench.sql</code> $B$,=`Hw$5$l$F$$$^$9!#(B
|
314
|
+
$B$3$l$r;HMQ$7$FJ,;6%k!<%k$rDj5A$9$k$K$O%=!<%9%3!<%I$rE83+$7$?%G%#%l%/%H%j$G0J2<$N$h$&$K(B psql $B%3%^%s%I$r<B9T$7$^$9!#(B</p>
|
315
|
+
<pre>$ psql -f sample/dist_def_pgbench.sql -p 5432 pgpool</pre>
|
316
|
+
<p>$B$^$:!"J,;6%k!<%k$H%F!<%V%k$N%a%?>pJs$r%7%9%F%`%G!<%?%Y!<%9(B pgpool $B$N%F!<%V%k(B dist_def $B$K3JG<$7$^$9!#(B
|
317
|
+
$B$3$3$G$O(Baccounts$B%F!<%V%k$r3F%G!<%?%Y!<%9%N!<%I$KBP$7$F%G!<%?J,3d$r9T$$$^$9!#(B
|
318
|
+
$BJ,;6%-!<NsL>$O!"(Baccounts $B$K$D$$$F$O%W%i%$%^%j%-!<@)Ls$,;XDj$5$l$?Ns(B aid $B$K;XDj$7$^$9!#(B</p>
|
319
|
+
<pre>
|
320
|
+
INSERT INTO pgpool_catalog.dist_def VALUES (
|
321
|
+
'bench_parallel',
|
322
|
+
'public',
|
323
|
+
'accounts',
|
324
|
+
'aid',
|
325
|
+
ARRAY['aid', 'bid', 'abalance', 'filler'],
|
326
|
+
ARRAY['integer', 'integer', 'integer', 'character(84)'],
|
327
|
+
'pgpool_catalog.dist_def_accounts'
|
328
|
+
);
|
329
|
+
</pre>
|
330
|
+
<p>$B<!$K!"J,;6%k!<%k4X?t$r%F!<%V%k$4$H$K%7%9%F%`%G!<%?%Y!<%9(B pgpool $B$KDj5A$7$^$9!#(B
|
331
|
+
$BJ,;6%k!<%k4X?t$O!"I,$:$7$b%F!<%V%k$4$H$K:n@.$9$kI,MW$O$J$/!"FbIt4X?t$r;HMQ$9$k$3$H$b$G$-$^$9!#(B
|
332
|
+
$B$^$?!"J,;6%k!<%k4X?t$O(B SQL $B$G$J$/$H$b(B PL/pgSQL $B$d(B PL/Tcl $B$G:n@.$7$F$b9=$$$^$;$s!#(B</p>
|
333
|
+
<p>$B%9%1!<%k%U%!%/%?!<(B 3 $B$r;XDj$7$F%G!<%?$r=i4|2=$7$?>l9g!"(Baccounts $B%F!<%V%k$N(B aid $BNs$NCM$O(B 1 $B$+$i(B 300000 $B$^$G$K$J$k$N$G!"$3$l$i$NCM$r$b$H$K(B 3 $BBf$N%G!<%?%Y!<%9%N!<%I$KBP$7$F%G!<%?$,6QEy$KJ,;6$5$l$k$h$&$K4X?t$rDj5A$7$^$9!#(B</p>
|
334
|
+
<p>$B$3$3$G$O!"0z?t$H$7$F<u$1<h$C$?CM$+$i(B WHEN $B<0$K$h$C$F(B 0 $B$+$i(B 2 $B$^$G$N%G!<%?%Y!<%9%N!<%I$NHV9f$rJV$9C1=c$J(B SQL $B4X?t$rDj5A$9$k$3$H$K$7$^$9!#(B</p>
|
335
|
+
<pre>
|
336
|
+
CREATE OR REPLACE FUNCTION pgpool_catalog.dist_def_accounts(anyelement)
|
337
|
+
RETURNS integer AS $$
|
338
|
+
SELECT CASE WHEN $1 > 0 AND $1 <= 100000 THEN 0
|
339
|
+
WHEN $1 > 100000 AND $1 <= 200000 THEN 1
|
340
|
+
ELSE 2
|
341
|
+
END;
|
342
|
+
$$ LANGUAGE sql;
|
343
|
+
</pre>
|
344
|
+
|
345
|
+
<h3>3.4 <a name="replicate-def">$BJ#@=%k!<%k$NDj5A(B</a></h3>
|
346
|
+
<p>$BJ#@=%k!<%k$O$I$N%F!<%V%k$,%l%W%j%1!<%7%g%s$5$l$F$$$k$+$I$&$+$r7hDj$9$k$b$N$G$9!#(B</p>
|
347
|
+
<p>$B$3$3$G$O!"(Bpgbench$B$G:n@.$5$l$k!!(Bbranches $B%F!<%V%k$H(B tellers $B$rEPO?$7$F$*$-$^$9!#$3$l$K$h$j!"(Baccounts$B%F!<%V%k!"(Bbranches$B%F!<%V%k$H(Btellers$B%F!<%V%k$r(B
|
348
|
+
$B;H$C$?Ld$$9g$o$;$,2DG=$H$J$j$^$9!#(B
|
349
|
+
<pre>
|
350
|
+
INSERT INTO pgpool_catalog.replicate_def VALUES (
|
351
|
+
'bench_parallel',
|
352
|
+
'public',
|
353
|
+
'branches',
|
354
|
+
ARRAY['bid', 'bbalance', 'filler'],
|
355
|
+
ARRAY['integer', 'integer', 'character(88)']
|
356
|
+
);
|
357
|
+
|
358
|
+
INSERT INTO pgpool_catalog.replicate_def VALUES (
|
359
|
+
'bench_parallel',
|
360
|
+
'public',
|
361
|
+
'tellers',
|
362
|
+
ARRAY['tid', 'bid', 'tbalance', 'filler'],
|
363
|
+
ARRAY['integer', 'integer', 'integer', 'character(84)']
|
364
|
+
);
|
365
|
+
</pre>
|
366
|
+
<p>$B$J$*!"%=!<%9%3!<%I$N(B <code>sample</code> $B%G%#%l%/%H%j$K$O>e5-$N@bL@$G;HMQ$9$kJ#@=%k!<%k$,Dj5A$5$l$?%U%!%$%k(B <code>replicate_def_pgbench.sql</code> $B$,=`Hw$5$l$F$$$^$9!#(B
|
367
|
+
$B$3$l$r;HMQ$7$FJ,;6%k!<%k$rDj5A$9$k$K$O%=!<%9%3!<%I$rE83+$7$?%G%#%l%/%H%j$G0J2<$N$h$&$K(B psql $B%3%^%s%I$r<B9T$7$^$9!#(B</p>
|
368
|
+
<pre>
|
369
|
+
$ psql -f sample/replicate_def_pgbench.sql -p 5432 pgpool
|
370
|
+
</pre>
|
371
|
+
|
372
|
+
|
373
|
+
<h3>3.5. <a name="parallel-check">$B%Q%i%l%k%/%(%j$N3NG'(B</a></h3>
|
374
|
+
<p>$B%Q%i%l%k%/%(%j$N@_Dj$r(B pgpool-II $B$KH?1G$5$;$k$K$O(B pgpool-II $B$r:F5/F0$9$kI,MW$,$"$j$^$9!#$J$*!"%F!<%V%k(B dist_def$B!"(Breplicate_def $B$r99?7$7$?>l9g$b(B pgpool-II $B$N:F5/F0$,I,MW$G$9!#(B
|
375
|
+
pgpool-II $B$N:F5/F0$K$D$$$F$O!V(B1.5. <a href="#start-shutdown">pgpool-II $B$N5/F0$HDd;_(B</a>$B!W$r;2>H$7$F$/$@$5$$!#(B</p>
|
376
|
+
<p>$B%Q%i%l%k%/%(%j$rM-8z$K$7$F(B pgpool-II $B$r5/F0$G$-$?$i!"<B:]$K(B pgbench $B$r;HMQ$7$F%Q%i%l%k%/%(%j$,<B9T$5$l$k$3$H$r3NG'$7$^$7$g$&!#(B</p>
|
377
|
+
<p>$B$^$:!"(Bpgbench $B$,;HMQ$9$k%G!<%?%Y!<%9(B bench_parallel $B$r:n@.$7$^$9!#(B
|
378
|
+
<code>createdb</code> $B%3%^%s%I$r(B pgpool-II $B$KBP$7$F<B9T$9$k$H!"$9$Y$F$N%G!<%?%Y!<%9%N!<%I$KBP$7$F%G!<%?%Y!<%9(B bench_parallel $B$,:n@.$5$l$^$9!#(B</p>
|
379
|
+
<pre>$ createdb -p 9999 bench_parallel</pre>
|
380
|
+
<p>$B$=$7$F!"0J2<$N$h$&$K%9%1!<%k%U%!%/%?!<(B 3 $B$r;XDj$7$F(B pgbench $B$G;HMQ$9$k%F!<%V%k$r:n@.$7!"%G!<%?$r=i4|2=$7$^$9!#(B</p>
|
381
|
+
<pre>$ pgbench -i -p 9999 -s 3 bench_parallel</pre>
|
382
|
+
<p>$B%9%1!<%k%U%!%/%?!<(B 3 $B$r;XDj$7$F%G!<%?$r=i4|2=$7$?(B pgbench $B$N%F!<%V%k$H$=$l$>$l$N9T?t$O0J2<$N$H$*$j$G$9!#(B
|
383
|
+
$B%G!<%?$r=i4|2=$9$k$3$H$K$h$C$F3JG<$5$l$k%G!<%?$O!"%F!<%V%k(B dist_def $B$KEPO?$5$l$F$$$k%F!<%V%k$KBP$7$F$OJ,;6%k!<%k$K=>$C$F(B 3 $BBf$N%G!<%?%Y!<%9%N!<%I$KJ,;6$5$l$^$9!#(B</p>
|
384
|
+
<center>
|
385
|
+
<table border="1">
|
386
|
+
<tr>
|
387
|
+
<th>$B%F!<%V%kL>(B</th>
|
388
|
+
<th>$B9T?t(B</th>
|
389
|
+
</tr>
|
390
|
+
<tr>
|
391
|
+
<td>branches</td>
|
392
|
+
<td>3</td>
|
393
|
+
</tr>
|
394
|
+
<tr>
|
395
|
+
<td>tellers</td>
|
396
|
+
<td>30</td>
|
397
|
+
</tr>
|
398
|
+
<tr>
|
399
|
+
<td>accounts</td>
|
400
|
+
<td>300000</td>
|
401
|
+
</tr>
|
402
|
+
<tr>
|
403
|
+
<td>history</td>
|
404
|
+
<td>0</td>
|
405
|
+
</tr>
|
406
|
+
</table>
|
407
|
+
</center>
|
408
|
+
<p>$B%G!<%?$,(B 3 $BBf$N%G!<%?%Y!<%9%N!<%I$KJ,;6$5$l$F$$$k$3$H$O!"(Bpgpool-II $B$KBP$7$FLd$$9g$o$;$r<B9T$7$?7k2L$H%G!<%?%Y!<%9%N!<%I$KD>@\Ld$$9g$o$;$r<B9T$7$?7k2L$rHf3S$9$l$P3NG'$G$-$^$9!#(B
|
409
|
+
$BNc$($P!"0J2<$N$h$&$K%3%^%s%I$r<B9T$9$k$H!"$9$Y$F$N%G!<%?%Y!<%9%N!<%I(B ($B%]!<%HHV9f(B 5432$B!"(B5433$B!"(B5434$B!"(B9999) $B$N%G!<%?%Y!<%9(B bench_parallel $B$N%F!<%V%k(B accounts $B$N:G>.CM!":GBgCM$,I=<($5$l$^$9!#(B</p>
|
410
|
+
<pre>$ for port in 5432 5433 5434 9999; do
|
411
|
+
> echo $port
|
412
|
+
> psql -c "SELECT min(aid), max(aid) FROM accounts" -p $port bench_parallel
|
413
|
+
> done
|
414
|
+
</pre>
|
415
|
+
<div class="copyright">
|
416
|
+
<hr>
|
417
|
+
<copyright>
|
418
|
+
Copyright © 2003 – 2013 pgpool Global Development Group
|
419
|
+
</copyright>
|
420
|
+
</div>
|
421
|
+
</body>
|
422
|
+
</html>
|
@@ -0,0 +1,325 @@
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
2
|
+
<html><head>
|
3
|
+
<title>pgpool-II Tutorial [ On Memory Query Cache ]</title>
|
4
|
+
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
5
|
+
<link href="pgpool.css" rel="stylesheet" type="text/css">
|
6
|
+
</head>
|
7
|
+
<body bgcolor="#ffffff">
|
8
|
+
|
9
|
+
|
10
|
+
<div id="top" class="header_text">pgpool-II Tutrial [ On Memory Query Cache ]</div>
|
11
|
+
|
12
|
+
<div id="menu">
|
13
|
+
<div id="navcontainer">
|
14
|
+
<ul id="navlist">
|
15
|
+
<li><a href="#thisis">About this document</a></li>
|
16
|
+
<li><a href="#basic">On memory query cache</a>
|
17
|
+
<ul>
|
18
|
+
<li><a href="#memqcache_config">Config pgpool.conf</a></li>
|
19
|
+
<li><a href="#basic_start">Start pgpool</a></li>
|
20
|
+
<li><a href="#basic_try">Try query cache</a></li>
|
21
|
+
</ul>
|
22
|
+
</li>
|
23
|
+
<li><a href="start#more">More</a>
|
24
|
+
<ul>
|
25
|
+
<li><a href="#invalidation">Auto invalidation</a></li>
|
26
|
+
<li><a href="#white_and_black_list">White list and black list</a></li>
|
27
|
+
<li><a href="#cache_or_not">Other</a></li>
|
28
|
+
</ul>
|
29
|
+
</li>
|
30
|
+
</ul>
|
31
|
+
</div>
|
32
|
+
|
33
|
+
<div class="header_small" align="center">
|
34
|
+
[<a href="tutrial-memqcache-ja.html">Japanese page</a>]
|
35
|
+
</div>
|
36
|
+
</div>
|
37
|
+
|
38
|
+
<div id="manual">
|
39
|
+
|
40
|
+
<!-- ================================================================================ -->
|
41
|
+
|
42
|
+
<h1 id="thisis">About this document</h1>
|
43
|
+
|
44
|
+
<p>In this Tutrial, I explain a simple way to try "On memory query cache" with shared memory.</p>
|
45
|
+
<p>What you need is a Linux box in which PostgreSQL and pgpool-II are installed.
|
46
|
+
You can use on memory query cache with pgpool in any mode: replication mode, master/slave mode and raw mode.</p>
|
47
|
+
|
48
|
+
<p class="top_link"><a href="#Top">back to top</a></p>
|
49
|
+
|
50
|
+
<!-- ================================================================================ -->
|
51
|
+
|
52
|
+
<h1 id="basic">On memory query cache</h1>
|
53
|
+
|
54
|
+
<h2 id="memqcache_config">Configuring pgpool.conf</h2>
|
55
|
+
|
56
|
+
<h3>Basic parameters</h3>
|
57
|
+
|
58
|
+
<p>Set "memory_cache_enabled" on to enable the functionality of on memory query cache.</p>
|
59
|
+
<pre># If on, use the memory cache functionality, off by default
|
60
|
+
memory_cache_enabled = <b>on</b>
|
61
|
+
</pre>
|
62
|
+
|
63
|
+
<p>Pgpool creates "OID map" files which indicates that each cache are for which database and table.
|
64
|
+
Specify the directory for it as you like.</p>
|
65
|
+
<pre># Temporary work directory to record table oids
|
66
|
+
memqcache_oiddir = '/var/log/pgpool/oiddir'
|
67
|
+
</pre>
|
68
|
+
|
69
|
+
<h3 id="config_shmem">About shared mamory</h3>
|
70
|
+
|
71
|
+
<p>The parameter "memqcache_method" is the choice of the cache storage, and it defaults to "shmem".</p>
|
72
|
+
<pre># Cache storage method. either 'shmem'(shared memory) or 'memcached'. 'shmem' by default
|
73
|
+
memqcache_method = '<b>shmem</b>'
|
74
|
+
</pre>
|
75
|
+
|
76
|
+
<h3>About log</h3>
|
77
|
+
<p>The parameter "log_per_node_statement" helps you to know in which backend node a query is executed.
|
78
|
+
Set this parameter on.</p>
|
79
|
+
<pre>log_per_node_statement = on
|
80
|
+
# Log all statements
|
81
|
+
# with node and backend informations
|
82
|
+
</pre>
|
83
|
+
|
84
|
+
<h2 id="basic_start">Starting pgpool</h2>
|
85
|
+
|
86
|
+
<p>Start pgpool-II with "-n" (which means not-daemon mode) and redirect log messages into pgpool.log.</p>
|
87
|
+
<pre>$ {installed_dir}/bin/pgpool -n -f {installed_dir}/etc/pgpool.conf > pgpool.log 2>&1
|
88
|
+
</pre>
|
89
|
+
|
90
|
+
<p>Create a database and a table.</p>
|
91
|
+
<pre>$ createdb -p 9999 test
|
92
|
+
|
93
|
+
$ psql -p 9999 test
|
94
|
+
test=> CREATE TABLE table_cache_ok (a INT);
|
95
|
+
CREATE TABLE
|
96
|
+
|
97
|
+
test=> INSERT INTO table_cache_ok VALUES (1), (2), (3);
|
98
|
+
INSERT 0 3
|
99
|
+
|
100
|
+
test=> SELECT * FROM table_cache_ok ORDER BY a;
|
101
|
+
a
|
102
|
+
---
|
103
|
+
1
|
104
|
+
2
|
105
|
+
3
|
106
|
+
(3 rows)
|
107
|
+
</pre>
|
108
|
+
|
109
|
+
<!-- -------------------------------------------------------------------------------- -->
|
110
|
+
|
111
|
+
<h2 id="basic_try">Trying out query cache</h2>
|
112
|
+
|
113
|
+
<p>Execute a SELECT.</p>
|
114
|
+
<pre>test=> SELECT * FROM table_cache_ok WHERE a = 1;
|
115
|
+
a
|
116
|
+
---
|
117
|
+
1
|
118
|
+
(1 row)
|
119
|
+
</pre>
|
120
|
+
|
121
|
+
<p>The output of log_per_node_statement shows that the SELECT is executed exactly.</p>
|
122
|
+
<pre>LOG: DB node id: 0 backend pid: 11203 statement: SELECT * FROM table_cache_ok WHERE a = 1;
|
123
|
+
</pre>
|
124
|
+
|
125
|
+
<p>Execute the same SELECT.</p>
|
126
|
+
<pre>test=> SELECT * FROM table_cache_ok WHERE a = 1;
|
127
|
+
a
|
128
|
+
---
|
129
|
+
1
|
130
|
+
(1 row)
|
131
|
+
</pre>
|
132
|
+
|
133
|
+
<p>This time the log message shows that the result of SELECT is from caches.</p>
|
134
|
+
<pre>LOG: <b>query result fetched from cache.</b> statement: SELECT * FROM table_cache_ok WHERE a = 1;
|
135
|
+
</pre>
|
136
|
+
|
137
|
+
<p class="top_link"><a href="#Top">back to top</a></p>
|
138
|
+
|
139
|
+
<!-- ================================================================================ -->
|
140
|
+
|
141
|
+
<h1 id="more">More fun with query cache</h1>
|
142
|
+
|
143
|
+
<h2 id="invalidation">Auto invalidation</h2>
|
144
|
+
|
145
|
+
<h3 id="invalidation_when_update">When a table is updated</h3>
|
146
|
+
<p>When a table is updated, the cached results of SELECT from the table can be outdated.
|
147
|
+
Pgpool discards all the cache of that table automatically by default.</p>
|
148
|
+
|
149
|
+
<h4 id="invalidation_config">Configuration</h4>
|
150
|
+
<p>Specify the action by "memqcache_auto_cache_invalidation". It's set "on" by default.</p>
|
151
|
+
<pre># If on, invalidation of query cache is triggered by corresponding
|
152
|
+
# DDL/DML/DCL(and memqcache_expire). If off, it is only triggered
|
153
|
+
# by memqcache_expire. on by default.
|
154
|
+
memqcache_auto_cache_invalidation = on
|
155
|
+
</pre>
|
156
|
+
|
157
|
+
<p>Restart pgpool after changing the parameter's value.</p>
|
158
|
+
|
159
|
+
<h4 id="invalidation_try">Trying the cache invalidation</h4>
|
160
|
+
<p>Confirm that you can get the result of a SELECT from cache.</p>
|
161
|
+
<pre>test=> SELECT * FROM table_cache_ok WHERE a = 1;
|
162
|
+
LOG: <b>query result fetched from cache.</b> statement: SELECT * FROM table_cache_ok WHERE a = 1;
|
163
|
+
</pre>
|
164
|
+
|
165
|
+
<p>Execute INSERT INTO the table.</p>
|
166
|
+
<pre>test=> INSERT INTO table_cache_ok VALUES (5);
|
167
|
+
INSERT 0 1
|
168
|
+
</pre>
|
169
|
+
|
170
|
+
<p>Execute the same SELECT, and the SELECT is executed exactly.</p>
|
171
|
+
<pre>test=> SELECT * FROM table_cache_ok WHERE a = 1;
|
172
|
+
LOG: DB node id: 0 backend pid: 11203 statement: SELECT * FROM table_cache_ok WHERE a = 1;
|
173
|
+
</pre>
|
174
|
+
|
175
|
+
<h3 id="expire">Cache expiration</h3>
|
176
|
+
<p>Pgpool discards caches older than the specified expiration period.</p>
|
177
|
+
|
178
|
+
<h4 id="expire_config">Configuration</h4>
|
179
|
+
<p>Specify the expiration period by "memqcache_expire".
|
180
|
+
Default is 0 seconds, but set 5 seconds to confirm for trial this time.</p>
|
181
|
+
<pre># Memory cache entry life time specified in seconds.
|
182
|
+
# 0 means infinite life time. 0 by default.
|
183
|
+
memqcache_expire = 5
|
184
|
+
</pre>
|
185
|
+
|
186
|
+
<p>Restart pgpool after changing the parameter's value.</p>
|
187
|
+
|
188
|
+
<h4 id="expire_try">Try</h4>
|
189
|
+
|
190
|
+
<p>Confirm that you can get the result of a SELECT from cache.</p>
|
191
|
+
<pre>test=> SELECT * FROM table_cache_ok WHERE a = 1;
|
192
|
+
LOG: <b>query result fetched from cache.</b> statement: SELECT * FROM table_cache_ok WHERE a = 1;
|
193
|
+
</pre>
|
194
|
+
|
195
|
+
<p>Wait in 5 seconds...</p>
|
196
|
+
|
197
|
+
<p>Execute the same SELECT, and the SELECT is executed exactly.</p>
|
198
|
+
<pre>test=> SELECT * FROM table_cache_ok WHERE a = 1;
|
199
|
+
LOG: DB node id: 0 backend pid: 11203 statement: SELECT * FROM table_cache_ok WHERE a = 1;
|
200
|
+
</pre>
|
201
|
+
|
202
|
+
<!-- -------------------------------------------------------------------------------- -->
|
203
|
+
|
204
|
+
<h2 id="white_and_black_list">White list and black list</h2>
|
205
|
+
<h3 id="whitelist">Cache the result of some tables only</h3>
|
206
|
+
|
207
|
+
<h4 id="whitelist_config">Configuration</h4>
|
208
|
+
<p>If you want to cache the result of only some tabeles, specify the tables by "white_memqcache_table_list".</p>
|
209
|
+
<p>You can use regular expression (to which added automatically ^ and $).</p>
|
210
|
+
<pre>white_memqcache_table_list = '.*_cache_ok'
|
211
|
+
# Comma separated list of table names to memcache
|
212
|
+
# that don't write to database
|
213
|
+
# Regexp are accepted
|
214
|
+
</pre>
|
215
|
+
|
216
|
+
<p>Reload pgpool after changing the parameter's value.</p>
|
217
|
+
<pre>$ {installed_dir}/bin/pgpool reload
|
218
|
+
</pre>
|
219
|
+
|
220
|
+
<h4 id="whitelist_try">Try</h4>
|
221
|
+
<p>Create a table not to cache.</p>
|
222
|
+
<pre>$ psql -p 9999 test
|
223
|
+
test=> CREATE TABLE table_cache_ng (a INT);
|
224
|
+
CREATE TABLE
|
225
|
+
|
226
|
+
test=> INSERT INTO table_cache_ng VALUES (1), (2), (3);
|
227
|
+
INSERT 0 3
|
228
|
+
</pre>
|
229
|
+
|
230
|
+
<p>Confirm if the SELECT FROM a table in white_memqcache_table_list is cached.</p>
|
231
|
+
<pre>test=> SELECT * FROM table_cache_ok WHERE a = 1;
|
232
|
+
LOG: DB node id: 0 backend pid: 11203 statement: SELECT oid FROM pg_database WHERE datname = 'test'
|
233
|
+
|
234
|
+
test=> SELECT * FROM table_cache_ok WHERE a = 1;
|
235
|
+
LOG: <b>query result fetched from cache.</b> statement: SELECT * FROM table_cache_ok WHERE a = 1;
|
236
|
+
</pre>
|
237
|
+
|
238
|
+
<p>Confirm if the SELECT FROM a table NOT in white_memqcache_table_list is NOT cached.</p>
|
239
|
+
<pre>test=> SELECT * FROM table_cache_ng WHERE a = 1;
|
240
|
+
LOG: DB node id: 0 backend pid: 11203 statement: SELECT * FROM table_cache_ok WHERE a = 1;
|
241
|
+
|
242
|
+
test=> SELECT * FROM table_cache_ng WHERE a = 1;
|
243
|
+
LOG: DB node id: 0 backend pid: 11203 statement: SELECT * FROM table_cache_ok WHERE a = 1;
|
244
|
+
</pre>
|
245
|
+
|
246
|
+
<h3 id="blacklist">Not cache the result of some tables</h3>
|
247
|
+
<h4 id="blacklist_config">Config</h4>
|
248
|
+
<p>If you don't want to cache the result of some tabeles, specify the tables by "black_memqcache_table_list".</p>
|
249
|
+
<p>You can use regular expression (to which added automatically ^ and $).</p>
|
250
|
+
<pre>black_memqcache_table_list = '.*_cache_ng'
|
251
|
+
# Comma separated list of table names not to memcache
|
252
|
+
# that don't write to database
|
253
|
+
# Regexp are accepted
|
254
|
+
</pre>
|
255
|
+
|
256
|
+
<p>Reload pgpool after changing the parameter's value.</p>
|
257
|
+
<pre>$ {installed_dir}/bin/pgpool reload
|
258
|
+
</pre>
|
259
|
+
|
260
|
+
<h4 id="blacklist_try">Try</h4>
|
261
|
+
<p>Confirm if the SELECT FROM a table in black_memqcache_table_list is NOT cached.</p>
|
262
|
+
<pre>test=> SELECT * FROM table_cache_ng WHERE a = 1;
|
263
|
+
LOG: DB node id: 0 backend pid: 11203 statement: SELECT * FROM table_cache_ok WHERE a = 1;
|
264
|
+
|
265
|
+
test=> SELECT * FROM table_cache_ng WHERE a = 1;
|
266
|
+
LOG: DB node id: 0 backend pid: 11203 statement: SELECT * FROM table_cache_ok WHERE a = 1;
|
267
|
+
</pre>
|
268
|
+
|
269
|
+
<p>Confirm if the SELECT FROM a table NOT in black_memqcache_table_list is cached.</p>
|
270
|
+
<pre>test=> SELECT * FROM table_cache_ok WHERE a = 1;
|
271
|
+
LOG: DB node id: 0 backend pid: 11203 statement: SELECT oid FROM pg_database WHERE datname = 'test'
|
272
|
+
|
273
|
+
test=> SELECT * FROM table_cache_ok WHERE a = 1;
|
274
|
+
LOG: <b>query result fetched from cache.</b> statement: SELECT * FROM table_cache_ok WHERE a = 1;
|
275
|
+
</pre>
|
276
|
+
|
277
|
+
<!-- -------------------------------------------------------------------------------- -->
|
278
|
+
|
279
|
+
<h2 id="cache_or_not">What else?</h2>
|
280
|
+
|
281
|
+
<h3 id="maxcacge">Too big results</h3>
|
282
|
+
<p>The size of each SELECT result is limited by "memqcache_maxcache".</p>
|
283
|
+
<pre># Maximum SELECT result size in bytes.
|
284
|
+
# Must be smaller than memqcache_cache_block_size. Defaults to 400KB.
|
285
|
+
memqcache_maxcache = 409600
|
286
|
+
</pre>
|
287
|
+
|
288
|
+
<p>If a result is bigger than memqcache_maxcache, the log message tells us that.
|
289
|
+
This is an example when memqcache_maxcache is set 1024 byte and SELECTed table is bigger than 10 MB.</p>
|
290
|
+
<pre>LOG: DB node id: 0 backend pid: 17749 statement: SELECT * FROM pgbench_accounts ;
|
291
|
+
LOG: pool_add_temp_query_cache: <b>data size exceeds memqcache_maxcache</b>.
|
292
|
+
current:983 requested:110 memq_maxcache:1024
|
293
|
+
</pre>
|
294
|
+
|
295
|
+
<h3 id="no_query_cache">Specify each query not to cache</h3>
|
296
|
+
<p>If white list and black list are not enough for you,
|
297
|
+
put the text "/* NO QUERY CACHE */" at the head of the queries.</p>
|
298
|
+
|
299
|
+
<pre>LOG: statement: SELECT * FROM table_cache_ok WHERE a = 1;
|
300
|
+
LOG: query result fetched from cache. statement: SELECT * FROM table_cache_ok WHERE a = 1;
|
301
|
+
|
302
|
+
LOG: statement: /* NO QUERY CACHE */ SELECT * FROM table_cache_ok WHERE a = 1;
|
303
|
+
LOG: DB node id: 0 backend pid: 18070 statement: /* NO QUERY CACHE */ SELECT * FROM table_cache_ok WHERE a = 1;
|
304
|
+
LOG: statement: /* NO QUERY CACHE */ SELECT * FROM table_cache_ok WHERE a = 1;
|
305
|
+
LOG: DB node id: 0 backend pid: 18070 statement: /* NO QUERY CACHE */ SELECT * FROM table_cache_ok WHERE a = 1;
|
306
|
+
</pre>
|
307
|
+
|
308
|
+
<p>This way requires to change your program of course.</p>
|
309
|
+
|
310
|
+
<p class="top_link"><a href="#Top">back to top</a></p>
|
311
|
+
|
312
|
+
<!-- ================================================================================ -->
|
313
|
+
|
314
|
+
</div>
|
315
|
+
|
316
|
+
<div class="copyright" style="clear: both">
|
317
|
+
<hr>
|
318
|
+
<copyright>
|
319
|
+
Copyright © 2003 – 2013 pgpool Global Development Group
|
320
|
+
</copyright>
|
321
|
+
</div>
|
322
|
+
|
323
|
+
|
324
|
+
|
325
|
+
</body></html>
|