当您在使用大规模的设施工作,可能有时候,您必须处理许多并发打开的连接。没有人会使用十台服务器来为两个并发用户提供服务--在许多情况下,这根本没有意义。大量的设施通常会处理成百上千的并发连接。引入连接池,例如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. 基于sparksql调用shell脚本运行SQL

    [Author]: kwu 基于sparksql调用shell脚本运行SQL,sparksql提供了类似hive中的 -e  , -f ,-i的选项 1.定时调用脚本 #!/bin/sh # uplo ...

  2. hdoj 2222 Keywords Search 【AC自己主动机 入门题】 【求目标串中出现了几个模式串】

    Keywords Search Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others ...

  3. js算法:分治法-棋盘覆盖

    在一个 2^k * 2^k 个方格组成的棋盘中,若恰有一个方格与其他方格不同.则称该方格为一特殊方格,称该棋盘为一特殊棋盘.显然特殊方格在棋盘上出现的位置有 4^k 种情形.因而对不论什么 k> ...

  4. bzoj2748: [HAOI2012]音量调节(背包)

    2748: [HAOI2012]音量调节 题目:传送门 题解: sb省选题..呵呵一眼背包: f[i][j]表示第i时刻能否为音量j 代码: #include<cstdio> #inclu ...

  5. webpack的像素转vw loader插件

    这是一款针对webpack的像素转vw单位的loader插件. 笔者公司中,h5 rem的开发方案目前已经渐渐开始转向vw方案,因此本工具应运而生. 目前所制作的h5,大部分设计稿分辨率都是750的宽 ...

  6. SpringBoot(三) SpringBoot中的日志配置

    SLF4J Spring Boot在所有内部日志中使用Commons Logging,但是默认配置也提供了对常用日志的支持,如:Java Util Logging,Log4J, Log4J2和Logb ...

  7. Mysql数据库批量添加数据

    1.目的: 用于向Mysql表中批量插入数据 2.过程: 3.语句 #删除已有存储过程 DROP PROCEDURE if exists insertdata; #设定命令行出现//后再执行语句 de ...

  8. Oracle查询当前用户下的所有表及sqlplus 设置 列宽

    如果oracle服务器中装有多个数据库实例,则在用户名处输入:用户名/密码@数据库名称.如果数据库服务器不在本机上,还需要加上数据库服务器的地址:用户名/密码@IP地址/数据库名称. [oracle@ ...

  9. 【原创】rman备份出现ORA-19625

    [oracle@sunny stage]$ rman target / Recovery Manager: Release 10.2.0.1.0 - Production on Sun Mar 18 ...

  10. ZBrush中Z球(ZSphere和ZSphereⅡ)

    ZSphere可以让用户使用干净的拓扑结构快速建立一个基础网格,然后将其塑造成任何形状.ZSphere的强大在于它非常简单,用户可以从一个单一的ZSphere开始,然后轻松地在其上面增加新的ZSphe ...