当您在使用大规模的设施工作,可能有时候,您必须处理许多并发打开的连接。没有人会使用十台服务器来为两个并发用户提供服务--在许多情况下,这根本没有意义。大量的设施通常会处理成百上千的并发连接。引入连接池,例如pgbouncer,会有助于挤出您的系统的更多的性能。

通常创建成千上万个连接可以说是一笔相当的开销,因为每次一个连接到PostgreSQL的连接被创建需要调用fork()。如果一个连接仅使用较短的时间,这可是昂贵的事。这是需要使用pgbouncer的时候。基本上,pgbouncer不是一个复制相关的工具—但是,我们已经决定把它列入本书,因为它经常和复制联合使用来使它更有效地工作。

在本章中,我们将深入地学习pgbouncer,看看 它是如何被安装的,怎样加速您的设施。这并不意味着pgbouncer的一个全面的指导,不能替代官方文档。

本章将讲述如下主题:

• pgbouncer的目的

•连接池的基本概念

•安装pgbouncer

•配置和管理pgbouncer

•性能调优

•使pgbouncer与Java一起工作

8.1 理解pgbouncer的基本概念

如前所述,pgbouncer的基本思想是节省连接相关的成本。当用户创建一个新的数据库连接,通常意味着用掉几百KB内存。这由20Kb左右的共享内存组成,这些内存由提供连接服务的进程自己使用。尽管内存消耗本身可能不是问题,但是,实际连接的创建过程较为耗时。耗时意味着什么呢?如果您创建一个连接并使用它,您可能不会注意到PostgreSQL需要分配出来一个连接的时间。但是,让我们考虑一下,一个典型的网站做什么。它打开一个连接,发出几个简单的语句,断开连接—即便创建一个连接不能被注意到,和所有剩下的工作相比它仍然是相当大量的工作。查找几个手机号码或者其它琐碎的信息花费多久?因此,在一个连接的生命周期中一个连接做的工作越少,实际创建连接的时间就变得越重要。

pgbouncer通过把它自己置于实际数据库服务器与频繁使用的应用程序之间来解决这个问题。对于应用程序来说,pgbouncer看起来像一个PostgreSQL服务器。在pgbouncer内部会保存保存一组开放的连接,并把它们集中起来。无论应用什么时候请求一个连接,pgbouncer将给请求一个池化的连接。从某种程度上说,它的行为像一个代理。

这里的主要要点是:pgbouncer可以快速地给应用提供一个连接,因为真正的数据库连接已经在幕后存在了。另外可以观察到非常低的内存占用。用户报告一个占用空间为每个连接占用2KB。这使得pgbouncer成为一个理想的大连接池。

PostgreSQL Replication之第八章 与pgbouncer一起工作(1)的更多相关文章

  1. PostgreSQL Replication之第八章 与pgbouncer一起工作(5)

    8.5 维护 pgbouncer 除了我们在本章已经说明的,pgbouncer有一个很好的能够执行基本管理和监控任务的交互式管理界面. 它是如何工作的呢?pgbouncer提供给您一个虚假的称为pgb ...

  2. PostgreSQL Replication之第八章 与pgbouncer一起工作(4)

    8.4 提升性能 从一开始考虑pgbouncer的时候,性能就是一个关键的因素.为了确保高性能,有些问题必须认真对待.首先,确保参与您设置的所有节点相互之间的距离较近.这对于降低网络往返时间有很多的帮 ...

  3. PostgreSQL Replication之第八章 与pgbouncer一起工作(3)

    8.3 配置您的第一个pgbouncer设置 一旦我们已经完成了pbouncer的编译与安装,我们可以容易地启动它.要做到这一点,我们已经在一个本地实例(p0和p1) 建立了两个数据库.在本例中,执行 ...

  4. PostgreSQL Replication之第八章 与pgbouncer一起工作(2)

    8.2 安装pgbouncer 在我们深入细节之前,我们将看看如何安装pgbouncer.正如PostgreSQL一样,您可以采取两种途径.您可以安装二进制包或者直接从源代码编译.在我们的例子中,我们 ...

  5. PostgreSQL Replication之第九章 与pgpool一起工作(1)

    在前面的章节中,我们已经能够深入地理解了pgbouncer,同时也学会了如何使用它来尽可能地优化复制设置.在本章我们将了解一个经常被称作与pgbouncer相对应的工具.尽管pgpool的思想与pgb ...

  6. PostgreSQL Replication之第九章 与pgpool一起工作(7)

    9.7 处理故障转移和高可用 可以使用pgpool来解决的一些明显的问题是高可用性和故障转移.一般来讲,有使用pgpool或者不使用pgpool可以用来处理这些问题的各种方法. 9.7.1 使用Pos ...

  7. PostgreSQL Replication之第九章 与pgpool一起工作(6)

    9.6 运行pgpool和流复制 pgpool也可以和除了语句级别的复制之外的流复制一起使用.一个完美的方案是使用PostgreSQL的板载复制和仅仅使用pgpool的负载均衡与连接池. 实际上,这样 ...

  8. PostgreSQL Replication之第九章 与pgpool一起工作(4)

    9.4 设置复制和负载均衡 要配置pgpool,我们可以简单地使用一个包含一种典型的配置信息的已经存在的样本文件,将它拷贝到我们的配置目录并修改之: $ cp /usr/local/etc/pgpoo ...

  9. PostgreSQL Replication之第九章 与pgpool一起工作(3)

    9.3 理解pgpool的架构 一旦我们安装了pgpool,是时候来讨论软件架构了.从一个用户的角度看,pgpool就像一个 正常的数据库服务器,您可以想连接任何其他服务器一样连接到它: pgpool ...

随机推荐

  1. the process android.process.acore has stopped或the process com.phone。。。。

    模拟器一启动 The process android.process.acore has stopped unexpectedly 今天不知道怎么回事,模拟器一启动就狂报错, 模拟器已经重新安装过了, ...

  2. artTemplate的使用

    引言 腾讯的前端模板引擎,不逊于doT.js 1.引入 <script type="text/javascript" src="../plugin/artTempl ...

  3. HTML5与CSS3权威指南之CSS3学习记录

    title: HTML5与CSS3权威指南之CSS3学习记录 toc: true date: 2018-10-14 00:06:09 学习资料--<HTML5与CSS3权威指南>(第3版) ...

  4. POJ 3269 中位数

    题意: 思路: 这道题坑也不少.. 你准备好脑洞了么? 首先 要认真审题 题目中有说:"没有两头牛的吃草位置是相邻的" 这句话让我们省了很多的事儿 (Discuss里有的大神就入了 ...

  5. POJ 2184 DP

    思路: f[j]表示当ts的和为j的时候tf的最大值. 这时候要分情况讨论: (我把状态平移了101000) 若ts[i]>=0倒序循环 否则正序 (防止ts被用了多次) f[101000]=0 ...

  6. Java事件处理机制2

    实现一个小程序,怎样让小球受到键盘的控制,上下左右移动,如图: public class Demo3 extends JFrame{ MyPanel mp=null; public static vo ...

  7. 联想lenovo 家用电脑安装win7 无法引导问题(新电脑安装系统时提示File:\Boot\BCD错误解决方案)

    安装方式 : 1.进入 PE 2.用 EasyimageX 恢复 GHO镜像 3.重启后出现  原因: 主要 是安装win7 时,格式 化选择为GUID模式. 处理: win7 以后,格式华时选择MB ...

  8. ORACLE查询优化之is null和is not null优化

    最近工作的时候遇到了比较大的数据查询,自己的sql在数据量小的时候没问题,在数据量达到300W的时候特别慢,只有自己优化sql了,以前没有优化过,所以记录下来自己的优化过程,本次是关于is null和 ...

  9. 抓取豆瓣的电影排行榜TOP100

    #!/usr/bin/env python # -*- coding:utf-8 -*- """ 一个简单的Python爬虫, 用于抓取豆瓣电影Top前100的电影的名称 ...

  10. 2015 Multi-University Training Contest 2 Buildings

    Buildings Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total ...