pgpool-II使用指南-并发查询(一)(簡體)
更新:2007-
對映章節:
本文翻译自源代码包中的“pgpool-II Tutorial”文档
正如我们前边提到的,复制系统把每一个查询转发到每个数据库节点,而这些节点都保存有全部数据。而并发查询(Parallel query)则是根据预定义的规则将特定范围的数据分布到各个节点。
为了能够启用pgpool-II的并发查询功能,必须设置另外一个叫做“System Database”的数据库(我们称之为SystemDB)。SystemDB保存决定数据如何在各节点中保存的用户定义规则,另一个用途是合并使用数据库链(dblink)从数据库节点返回的结果。
设置并发查询
将pgpool.conf文件中的parallel_mode参数设置为true开启数据库复制功能:
parallel_mode = true
这样并不能自动开始并发查询,pgpool-II还需要SystemDB以及分布规则来知道如何在各节点中分布数据。
另外,SystemDB使用数据库链连接pgpool-II,因此,需要设置listen_addresses参数好让pgpool-II接受这些连接请求:
listen_addresses = '*'
注意:并发查询和复制是不能共存的,使用并发查询功能时,replication_mode必须设置为false。此外,并发查询和复制采用不同的格式储存数据,这样前边我们创建的“bench_replication”数据库无法被重用(reuse)。
replication_mode = false
load_balance_mode = false
在本节中,parallel_mode设置为true、listen_addresses设置为'*'、replication_mode和load_balance_mode设置为false。
配置SystemDB
SystemDB仅仅是另一个安装有数据库链的数据库,数据表“dist_def”被用来保存数据分布规则。可以在单独的电脑中放置SystemDB,也可以与数据库节点之一共存。
我们将在5432端口的节点上创建SystemDB,下边是SystemDB的参数设置列表:
system_db_hostname = 'localhost'
system_db_port = 5432
system_db_dbname = 'pgpool'
system_db_schema = 'pgpool_catalog'
system_db_user = 'pgpool'
system_db_password = ''
事实上,这是pgpool.conf中的缺省设置。
然后创建叫做“pgpool”的用户,再创建所有者为“pgpool”的数据库“pgpool”:
$ createuser -p 5432 pgpool
$ createdb -p 5432 -O pgpool pgpool
安装数据链
接下来,必须将数据库链安装到“pgpool”数据库,它是包含在PostgreSQL源代码contrib目录下的工具之一。
执行如下命令安装数据库链:
$ USE_PGXS=1 make -C contrib/dblink
$ USE_PGXS=1 make -C contrib/dblink install
安装完毕以后,在“pgpool”数据库中定义数据库链函数。如果PostgreSQL安装在/usr/local/pgsql,dblink.sql(函数定义文件)会被放置在/usr/local/pgsql/share/contrib中,运行如下命令创建函数:
$ psql -f /usr/local/pgsql/share/contrib/dblink.sql -p 5432 pgpool
定义dist_def数据表
再接下来,定义数据库表“dist_def”存放数据分布规则。安装pgpool-II时,system_db.sql文件放置在/usr/local/share/system_db.sql(这里我们使用缺省安装路径),它包括了一些包括“dist_def”在内的特殊用途数据表,执行下边的命令创建dist_def数据表:
$ psql -f /usr/local/share/system_db.sql -p 5432 -U pgpool pgpool
在system_db.sql文件里,dist_def被创建在叫做pgpool_catalog的schema中,如果参数system_db_schema设置为其他的schema,需要相应的修改system_db.sql。
下边是dist_def的定义语句:
CREATE TABLE pgpool_catalog.dist_def (
dbname text, -- database name
schema_name text, -- schema name
table_name text, -- table name
col_name text NOT NULL CHECK (col_name = ANY (col_list)), -- distribution key-column
col_list text[] NOT NULL, -- list of column names
type_list text[] NOT NULL, -- list of column types
dist_def_func text NOT NULL, -- distribution function name
PRIMARY KEY (dbname, schema_name, table_name)
);
dist_def中的每一行数据分为两个部分:
- 数据分布规则(col_name、dist_def_func)
- 数据表的meta-information(dbname、schema_name、table_name, col_list、type_list)
meta-information用来重写查询,并发查询必须重写查询以便能够将个节点返回的结果合并为一个结果。
延伸閱讀(Link):
pgpool官方英文网站
pgpool-II官方英文网站
沒有留言:
張貼留言