PostgreSQL Replication之第八章 与pgbouncer一起工作(1)
当您在使用大规模的设施工作,可能有时候,您必须处理许多并发打开的连接。没有人会使用十台服务器来为两个并发用户提供服务--在许多情况下,这根本没有意义。大量的设施通常会处理成百上千的并发连接。引入连接池,例如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)的更多相关文章
- PostgreSQL Replication之第八章 与pgbouncer一起工作(5)
8.5 维护 pgbouncer 除了我们在本章已经说明的,pgbouncer有一个很好的能够执行基本管理和监控任务的交互式管理界面. 它是如何工作的呢?pgbouncer提供给您一个虚假的称为pgb ...
- PostgreSQL Replication之第八章 与pgbouncer一起工作(4)
8.4 提升性能 从一开始考虑pgbouncer的时候,性能就是一个关键的因素.为了确保高性能,有些问题必须认真对待.首先,确保参与您设置的所有节点相互之间的距离较近.这对于降低网络往返时间有很多的帮 ...
- PostgreSQL Replication之第八章 与pgbouncer一起工作(3)
8.3 配置您的第一个pgbouncer设置 一旦我们已经完成了pbouncer的编译与安装,我们可以容易地启动它.要做到这一点,我们已经在一个本地实例(p0和p1) 建立了两个数据库.在本例中,执行 ...
- PostgreSQL Replication之第八章 与pgbouncer一起工作(2)
8.2 安装pgbouncer 在我们深入细节之前,我们将看看如何安装pgbouncer.正如PostgreSQL一样,您可以采取两种途径.您可以安装二进制包或者直接从源代码编译.在我们的例子中,我们 ...
- PostgreSQL Replication之第九章 与pgpool一起工作(1)
在前面的章节中,我们已经能够深入地理解了pgbouncer,同时也学会了如何使用它来尽可能地优化复制设置.在本章我们将了解一个经常被称作与pgbouncer相对应的工具.尽管pgpool的思想与pgb ...
- PostgreSQL Replication之第九章 与pgpool一起工作(7)
9.7 处理故障转移和高可用 可以使用pgpool来解决的一些明显的问题是高可用性和故障转移.一般来讲,有使用pgpool或者不使用pgpool可以用来处理这些问题的各种方法. 9.7.1 使用Pos ...
- PostgreSQL Replication之第九章 与pgpool一起工作(6)
9.6 运行pgpool和流复制 pgpool也可以和除了语句级别的复制之外的流复制一起使用.一个完美的方案是使用PostgreSQL的板载复制和仅仅使用pgpool的负载均衡与连接池. 实际上,这样 ...
- PostgreSQL Replication之第九章 与pgpool一起工作(4)
9.4 设置复制和负载均衡 要配置pgpool,我们可以简单地使用一个包含一种典型的配置信息的已经存在的样本文件,将它拷贝到我们的配置目录并修改之: $ cp /usr/local/etc/pgpoo ...
- PostgreSQL Replication之第九章 与pgpool一起工作(3)
9.3 理解pgpool的架构 一旦我们安装了pgpool,是时候来讨论软件架构了.从一个用户的角度看,pgpool就像一个 正常的数据库服务器,您可以想连接任何其他服务器一样连接到它: pgpool ...
随机推荐
- web前端project师知识汇总
分类: Web开发应用 一.何为Web前端project师? 前端project师,也叫Web前端开发project师.他是随着web发展.细分出来的行业.Web前端开发proj ...
- 棋盘覆盖问题python3实现
在2^k*2^k个方格组成的棋盘中,有一个方格被占用,用下图的4种L型骨牌覆盖全部棋盘上的其余全部方格,不能重叠. 代码例如以下: def chess(tr,tc,pr,pc,size): globa ...
- Android上方便地开发的C程序
假设你基于没有一个专门的开发板练手.那你的Android手机也能够开发大多数C应用程序.安装好后编译C的编译器. 本文仅仅写一个Hello World的执行过程. 长处是:不须要eclipse,不须要 ...
- 时间处理工具类TimeUtil
转自:https://cnblogs.com/ityouknow/p/5662753.html 功能 Date与String之间的互相转换,以及一些特殊格式的时间字符串处理 代码 /** * 类名:T ...
- MYSQL binlog 日志内容查看
记录mysql数据库真正执行更改的所有操作(DML语句),不包含那些没有修改任何数据的语句,不会记录select和show这样的语句. 二进制日志的作用: 1. 可以完成主从复制的功能 2. 进行恢复 ...
- 从零开始编写一个vue插件
title: 从零开始编写一个vue插件 toc: true date: 2018-12-17 10:54:29 categories: Web tags: vue mathjax 写毕设的时候需要一 ...
- 模仿百度首页“元宵节汤圆”动图(js的定时任务:setInterval)
模仿百度首页“元宵节汤圆”动图:(js的定时任务:setInterval) 原理:需要一张切图,通过不断定位使得图片就像一帧一帧的图片在播放从而形成了动画 效果图: 切图地址: https://ss1 ...
- 固定执行计划-使用coe_xfr_sql_profile
一.历史执行计划固定 历史的执行计划找到一个合理的执行计划进行绑定 1. 存在多个执行计划的语句,按照索引是比较合适的,FULL SCAN不合适 select * from scott.emp whe ...
- python 3.x 学习笔记7 ( 模块 (修))
1.定义:模块:用来从逻辑上组织python代码(变量.函数.类.逻辑:实现一个功能),本质就是.py结尾的python文件包:用来从逻辑上组织模块的,本质就是一个目录(必须带有一个__init__. ...
- ActiveMQ学习笔记(15)----Message Dispatch高级特性(一)
1. Message Cursors 1.1 概述 ActiveMQ发送持久化消息的典型的厝里方式是:当消息的消费者准备就绪时,消息发送系统把存储的消息按批次发送给消费者,在发送完一个批次的消息后,指 ...