博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
pgpool-II的性能缺陷
阅读量:6879 次
发布时间:2019-06-27

本文共 915 字,大约阅读时间需要 3 分钟。

pgpool-II在运行在 replication mode的时候,性能低下。

经过分析,发现无解:这是由pgpool-II的执行方式决定的。

pgpool-II 刚开始运行的时候,就会开很多子进程,缺省值128。
但是,每当客户端来一个请求,就会有一个子进程全权负责,别的子进程不插手。

而在replication mode,该子进程需要和多个DB节点打交道:

比如把客户端的SQL文,发送给每一个DB节点。
在给各个节点发送SQL文的时候,如果想要效率高,要么开子进程或线程来并行。要么采用某种非阻塞方式向各个节点发请求。

然而,pgpool-II的开发者,采用了效率最为低下的做法:顺次执行。就是说对第一个DB节点发SQL文,待第一个DB节点运行此SQL文结束,再向第二个DB节点发SQL文。

此种做法,如果运行在业务不繁忙的系统里尚可,在繁忙的系统里,那就是致命的缺陷。

验证如下:先在各个DB节点,作如下的函数:

CREATE FUNCTION loopforid()RETURNS INTEGER LANGUAGE plpgsql AS $$  DECLARE     ret INTEGER;  BEGIN     PERFORM pg_sleep(30);     ret:=100;          RETURN ret;  END; $$;

然后,在pgpool-II中执行类似:update a8 set id=(select loopforid() ) where id=10; 的操作。

再来看pgpool-II的log,可以看到:

在DB1 节点执行完毕后,又过了大约30秒,才开始在DB2节点执行。所以说,它是串行的。

因此,当后台DB节点增加的时候,通过pgpool-II的replication mode来运行的程序,其insert/update/delete性能将随着节点数目的增加而成比例下降。

本文转自健哥的数据花园博客园博客,原文链接:http://www.cnblogs.com/gaojian/archive/2012/08/08/2627868.html,如需转载请自行联系原作者

你可能感兴趣的文章
HDOJ 3784
查看>>
html5 开发android
查看>>
文件管理File类
查看>>
【Javascript Demo】遮罩层和百度地图弹出层简单实现
查看>>
Android Intent的几种用法全面总结
查看>>
RF+Selenium2Library+Sikuli集成环境搭建
查看>>
如何使用观测者模式实现监控和推送
查看>>
win7下虚拟机安装mac 转载自 http://itbbs.pconline.com.cn/50602805.html
查看>>
移动平均
查看>>
asp.net上传文件超过了最大请求长度[转]
查看>>
从零开始编写自己的C#框架(13)——T4模板在逻辑层中的应用(二)
查看>>
[LeetCode] 3Sum Closest
查看>>
TTL电平与RS232电平的区别
查看>>
【SPMF开源数据挖掘平台入门】MaxSP算法使用说明
查看>>
linux shell 命令
查看>>
android 如何使用jar替换java代码编译
查看>>
python通过protobuf实现rpc
查看>>
Java RMI(远程方法调用) 实例与分析 (转)
查看>>
交换机基础
查看>>
架构师速成6.18-初中书单资料推荐
查看>>