1.pgbouncer 的介绍

  pgbouncer是一个针对PostgreSQL数据库的轻量级连接池,任何目标应用都可以把 pgbouncer 当作一个 PostgreSQL/Greenplum 服务器来连接,然后pgbouncer 会处理与服务器连接,或者是重用已存在的连接。pgbouncer 的目标是降低因为新建到 PostgreSQL/Greenplum 的连接而导致的性能损失。

  pgbouncer目前支持三种连接池模型。分别是session, transaction和statment三个级别。

  • session. 会话级链接。只有与当客户端的会话结束时,pgbouncer才会收回已分配的链接
  • transaction 事务级连接。当事务完成后,pgbouncer会回收已分配的链接。也就是说客户端只是在事务中才能独占此链接,非事务的对数据库的请求是没有独享的链接的。
  • statement 语句级链接。任何对数据库的请求完成后,pgbouncer都会回收链接。此种模式下,客户端不能使用事务,否则会造成数据的不一致。

2.pgbouncer配置

  由于pgbouncer是基于libevent开发的;所以需要先安装libevent的开发包:libevent下载地址

cd libevent-2.0.-stable
./configure --prefix=/opt/libevent
make
make install

pgbouncer下载地址

cd pgbouncer-1.5.
./configure --prefix=/opt/pgbouncer --with-libevent=/opt/libevent
make
make install
chown -R gpadmin:gpadmin /opt/pgbouncer

  配置环境变量:本实验数据库对象是greenplum;

export LD_LIBRARY_PATH=/opt/libevent/lib:$LD_LIBRARY_PATH
export PGB_HOME=/opt/pgbouncer
export PATH=$PGB_HOME/bin:$PATH

  创建一个PgBouncer配置文件pgbouncer.ini

vi /opt/pgbouncer/config/pgbouncer.ini
[databases]
db_lottu = host=localhost port= dbname=lottu user=lottu [pgbouncer]
listen_port =
listen_addr = *
auth_type = md5
auth_file = /opt/pgbouncer/userlist.txt
logfile = /opt/pgbouncer/pgbouncer.log
pidfile = /opt/pgbouncer/pgbouncer.pid
admin_users = lottu
pool_mode = Transaction
max_client_conn =

  创建一个认证文件。该文件的名称必须匹配pgbouncer.ini文件中的 auth_file参数;这里是/opt/pgbouncer/userlist.txt

vi /opt/pgbouncer/userlist.txt
"lottu" "××××××"

  配置服务器重置查询;当一个连接被返回给连接池时,它必须被重置为刚创建的连接的状态。在把一个连接返回给连接池之前,PgBouncer通过发出一个查询来实现这种重置。PostgreSQL 8.3及其后的版本有一个用于此种目的的DISCARD ALL命令,它标准PgBouncer发布的默认重置查询。Greenplum数据库不支持DISCARD ALL。需要配置参数server_reset_query

server_reset_query = RESET ALL; SET SESSION AUTHORIZATION DEFAULT;

  Greenplum数据库 4.7.0及其后版本包括的PgBouncer修改版中的默认服务器重置查询。尽管它与PgBouncer原生的不同,它也能确保连接池对于Greenplum数据库用户透明并且客户端应用不需要为了使用连接池而被修改。配置好了; RELOAD命令重载它

pgbouncer=# RELOAD;

3.启动pgbouncer

pgbouncer -d /opt/pgbouncer/config/pgbouncer.ini

  连接pgbouncer

psql -p  db_lottu lottu
Password for user lottu:
psql (8.2.)
Type "help" for help.

4.管理pgbouncer

  pgbouncer有一个管理控制台,可以登录到pgbouncer虚拟数据库来访问它。该控制台接受类SQL命令,这些命令允许用户监控、重新配置和管理pgbouncer。

  用 psql登录到pgbouncer虚拟数据库

psql -p  pgbouncer lottu

  要看可用的命令,可运行show help命令

pgbouncer=# show help;
NOTICE: Console usage
DETAIL:
SHOW HELP|CONFIG|DATABASES|POOLS|CLIENTS|SERVERS|VERSION
SHOW STATS|FDS|SOCKETS|ACTIVE_SOCKETS|LISTS|MEM
SHOW DNS_HOSTS|DNS_ZONES
SET key = arg
RELOAD
PAUSE [<db>]
RESUME [<db>]
KILL <db>
SUSPEND
SHUTDOWN
SHOW

  如果用户对pgbouncer.ini文件做了修改,用户可以用 RELOAD命令重载它:

pgbouncer=# RELOAD;

使用PgBouncer连接池的更多相关文章

  1. hasura graphql-engine集成pgbouncer 连接池工具

    pgbouncer 是一个轻量的pg 连接池工具,我们可以和hasura graphql-engine集成起来,进行连接的一些优化 环境准备 docker-compose 文件 version: '3 ...

  2. postgres高可用学习篇二:通过pgbouncer连接池工具来管理postgres连接

    安装pgbouncer yum install libevent -y yum install libevent-devel -y wget http://www.pgbouncer.org/down ...

  3. 连接SQLServer时,因启用连接池导致孤立事务的原因分析和解决办法

    本文出处:http://www.cnblogs.com/wy123/p/6110349.html 之前遇到过这么一种情况: 连接数据库的部分Session会出现不定时的阻塞,这种阻塞时长时短,有时候持 ...

  4. C3p0连接池配置

    在Java开发中,使用JDBC操作数据库的四个步骤如下:   ①加载数据库驱动程序(Class.forName("数据库驱动类");)   ②连接数据库(Connection co ...

  5. Java第三方数据库连接池库-DBCP-C3P0-Tomcat内置连接池

    连接池原理 数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”.预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去.我们可以通过设定连接池 ...

  6. common-pool2 学习:thrift连接池的另一种实现

    对象池是一种很实用的技术,经典的例子就是数据库连接池.去年曾经从零开始写过一个thrift客户端连接池.如果不想重造轮子,可以直接在apache开源项目commons-pool的基础上开发. 步骤: ...

  7. druid连接池获取不到连接的一种情况

    数据源一开始配置: jdbc.initialSize=1jdbc.minIdle=1jdbc.maxActive=5 程序运行一段时间后,执行查询抛如下异常: exception=org.mybati ...

  8. C3P0连接池配置和实现详解

    一.配置 <c3p0-config> <default-config> <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数.Default: 3 --> ...

  9. hibernate+mysql的连接池配置

    1:连接池的必知概念    首先,我们还是老套的讲讲连接池的基本概念,概念理解清楚了,我们也知道后面是怎么回事了. 以前我们程序连接数据库的时候,每一次连接数据库都要一个连接,用完后再释放.如果频繁的 ...

随机推荐

  1. python控制流

    1. if...elif...else: 语法: if 判断条件: 语句... elif 判断条件: 语句... else: 语句... #elif语句可以有0个或多个 2. while和for循环: ...

  2. 关于js函数对象的理解

    js中函数和对象的关系: 什么是对象?根据W3C上面的解释JS中所有事物都是对象,对象是拥有属性和方法的数据,由此可以看出除了基 本值类型不是对象(number.string.Boolean.Unde ...

  3. JS_高阶函数(filter)

    //2017/7/18 //高阶函数:filter. //filter也是一个常用的操作,它用于把Array的某些元素过滤掉,然后返回剩下的元素.和map()类似,Array的filter()也接收一 ...

  4. GMA Round 1 新年祝福

    传送门 新年祝福 15个人聚集在一起,新年到来,他们每个人写下了一句新年祝福.大家把祝福收集起来,然后重新分回去.如果一个人拿到了自己写的祝福,他就会觉得很没有意思,因为得不到别人的祝福.要避免这种尴 ...

  5. sqlserver数据库出现可疑错误修复方法

    一.主数据库出现可疑修复方法: 第一种方法: 当数据库发生这种操作故障时,可以按如下操作步骤可处理此要领,打开数据库里的Sql查询编辑器窗口,运行以下的命令: ?修改数据库为紧急模式 ALTER DA ...

  6. 咏南APP(手机)开发框架

    咏南APP(手机)开发框架 有意者可向咏南索取DEMO. 基于DELPHI官方的FIREMONKEY类库构建,不使用任何三方控件. 原生手机框架,支持各种手机硬件操作. 主界面 聊天 照相并分享 短信 ...

  7. Lua游戏开发之时区问题

    目前大部分游戏都采用了Lua语言进行功能开发,在进行多语种发行的时候就会遇到时区显示的问题.以韩国版本为例,场景如下: 1.服务器处于固定的位置,比如放在首尔机房: 2.玩家所处的位置不确定,可能在韩 ...

  8. python3 cookie

    最近再次学习python,本来就是一个菜鸟,我按照 Python CGI编程 发现读cookie 读取不了,后来发现它这种写的方式也不怎么靠谱. Python中Cookie模块(python3中为ht ...

  9. androidstudio全局搜索快捷键Ctrl+Shift+F失效的解决办法

    与输入法设置冲突!!修改了就可以了.用的搜狗输入法,它的此快捷键也为简繁体替换.修改成其他的即可 null

  10. PDF.js 分片下载的介绍2:分片下载demo

    上一个章节,简要说了以下分片下载的几个特性.今天主要用示例说明一下pdf.js分片下载. 服务器环境: php7.2 nginx 1.14 ubuntu 18.04测试浏览器:谷歌浏览器 70.0.3 ...