pgpool 连接池使用文档
简述
pgpool 连接池采用进程模型,每个业务的连接,都会连接到pgpool的其中一个进程。
[CitusDB中国]站主,PostgreSQL粉丝,现从事Citus研发工作
愿Citus在中国发展的越来越好
专注于Citus/PostgreSQL技术分享
pgpool 连接池采用进程模型,每个业务的连接,都会连接到pgpool的其中一个进程。
[CitusDB中国]站主,PostgreSQL粉丝,现从事Citus研发工作
愿Citus在中国发展的越来越好
9.3 版本修复了这个问题,新增如下参数进行控制
citus.max_shared_pool_size(int)
允许连接到每一个worker节点的连接数量,默认 0
0:自动设置。即不会出现超过最大连接数错误的。
-1: 禁用该功能
其他:设置为该值
自动设置时,会将协调器节点的max_connections作为连接数的参考指标,因此协调器与worker的内存和最大连接数不一致的时候,自动设置的功能便不适合。
[CitusDB中国]站主,PostgreSQL粉丝,现从事Citus研发工作
愿Citus在中国发展的越来越好
test=# select master_remove_node('localhost', '1602');
ERROR: you cannot remove the primary node of a node group which has shard placements
test=# select * from pg_dist_node;
nodeid | groupid | nodename | nodeport | noderack | hasmetadata | isactive | noderole | nodecluster | metadatasynced | shouldhaveshards
--------+---------+-----------+----------+----------+-------------+----------+----------+-------------+----------------+------------------
1 | 1 | localhost | 1601 | default | f | t | primary | default | f | t
2 | 2 | localhost | 1602 | default | f | t | primary | default | f | t
(2 rows)
test=# delete from pg_dist_placement where groupid = 2;
-- 这个地方在删除前,也可以把pg_dist_placement备份一下
-- pg_dist_shard 最好也删除一下,要不全表扫描的时候也会报错
test=# select master_remove_node('localhost', '1602');
master_remove_node
--------------------
(1 row)
[CitusDB中国]站主,PostgreSQL粉丝,现从事Citus研发工作
愿Citus在中国发展的越来越好
[CitusDB中国]站主,PostgreSQL粉丝,现从事Citus研发工作
愿Citus在中国发展的越来越好
容灾可以选择同步或是异步模式。同步模式下无丢失数据风险,会损失一点点性能。异步模式下,会少量丢失数据,不会损失性能。
通常的方案(同步/异步模式均可):
[CitusDB中国]站主,PostgreSQL粉丝,现从事Citus研发工作
愿Citus在中国发展的越来越好
最近家里有些事情,才开始进行更新
CLUSTER [VERBOSE] table_name [ USING index_name ]
CLUSTER [VERBOSE]
根据索引的信息,编排表的物理存储顺序。操作是一次性的,意味着当操作结束后,新产生的数据,不会进行编排,当表依据索引进行编排后,PostgreSQL会记录该索引,当执行 CLUSTER table_name 时,会自动引用先前的索引。当 CLUSTER 不加任何参数时,会对该数据库下该用户的所有表(编排过的表)进行编排,若是超级用户,则会对所有表进行编排。此操作不能在事务中使用。操作过程中会加 ACCESS EXCLUSIVE 锁。
当随机只读取一条记录时,表的物理存储顺序是不重要的。如果你访问很多数据并通过索引分组,或是根据索引键进行范围查询,或是一个索引有多条记录,重编排数据会很有用,因为当根据索引读取表的第一条数据时,其他所需数据也存在于改page中,这节省了磁盘和内存的使用,从而提高性能。
该 CLUSTER 会根据统计信息等内容选择索引扫描或顺序扫描对表数据进行重排序。
当根据索引进行扫描,会对表数据和索引数据进行临时copy处理,因此磁盘需要table size+index size的空间进行临时数据存储。
当进行顺序扫描时,会产生排序的临时文件,因此需要 table size * 2 + index size的空间进行临时数据存储,当然可以使用 enable_sort 禁止使用次方法。
test=# create table aa(id int primary key);
CREATE TABLE
test=# select relname,relfilenode from pg_class where relname ~ 'aa';
relname | relfilenode
---------+-------------
aa | 33007
aa_pkey | 33010
(2 rows)
test=# cluster aa using aa_pkey ;
CLUSTER
test=# select relname,relfilenode from pg_class where relname ~ 'aa';
relname | relfilenode
---------+-------------
aa | 33012
aa_pkey | 33015
(2 rows)
-- relfilenode发生了改变
[CitusDB中国]站主,PostgreSQL粉丝,现从事Citus研发工作
愿Citus在中国发展的越来越好
9.x 版本新增加不少内容,而这些内容在手册和CHANGELOG中并为体现,我比较倾向按点进行总结,后续会进行一些内容的更新.
[CitusDB中国]站主,PostgreSQL粉丝,现从事Citus研发工作
愿Citus在中国发展的越来越好
通常来讲,我们仅需要两个仓库便可以
https://github.com/citusdata/citus
citus的代码在这个仓库。
https://github.com/citusdata/tools
代码编写后,需要执行citus_indent以使代码风格更加优美
代码下载后:
1. 安装uncrustify库(大于0.68版本)
2. make
3. sudo make install
4. man citus_indent查看帮助手册
citus_indent --diff 可以直接格式化 git add 的文件, git diff --cached 可以查看格式化后的文件
该–diff 指令需在ciuts代码的根目录使用,在下属子目录,例如src/xx会失败
uncrustify src/lzzhang.c -c /usr/local/etc/citustools/citus-style.cfg
在github仓库,点击眼镜图标(watch),便可以收到相关邮件。
点击fork按钮,将代码fork到自己的github空间
点击自己空间代码主页的New pull request按钮就提交到了Citus的Pull Requests中
大的公司的项目,通常都需要签署这个。
1. PR里会有一个连接点击进去认证就可以
2. 点击认证后会提示24小时之内会收到邮件,这个是手工的,可能需要等待几天的时间
3. 收到认真邮件,按邮件步骤完成
4. 等待citus认真通过,这个也是手工的,可能也要等待几天
5. 微软CLA认真,这个只需要点击一次就可以。
国内的邮箱有的时候不太方便,比如给pg发邮件的时候,是收不到回复的,用gmail会好一些。
[CitusDB中国]站主,PostgreSQL粉丝,现从事Citus研发工作
愿Citus在中国发展的越来越好