prestogres 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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>
|