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. react-native 集成极光推送jpush-react-native时的小问题

    android的一个报错 ... set canOverrideExistingModule=true 解决: 问题是在/android/app/src/java/.../MainApplicatio ...

  2. iOS 开发中常见的崩溃错误

    1.duplicate symbols for architecture armv7   1.首先排查是否有名字重复的文件:   2.检查是否在#import头文件的时候,不小心把.h写成了.m. 2 ...

  3. JAVA自学笔记19

    JAVA自学笔记19 1.集合总结 Collection(单列集合) List(有序可重复) ArrayList:底层数据结构是数组 ,查询快,增删慢.线程不安全,效率高 Vector:底层数据结构是 ...

  4. openstack之Neutron网络模式vlan,gre,vxlan详解

    第一:neutron openvswitch + vlan虚拟网络 一:基础知识 vlan基础知识 1.vlan介绍 1.1:首先说下lan,LAN 表示 Local Area Network,本地局 ...

  5. pygame-KidsCanCode系列jumpy-part13-改进跳跃

    这节研究下跳跃如何做得更自然,先看看之前的跳跃有什么问题,我们把settings.py里的初始化参数调整下: # starting platform # PLATFORM_LIST = [(5, HE ...

  6. C# 坐标系

    C#坐标系 一.概述 从数学角度讲,Point是一个二维矢量,包含两个公共整型属性,属性用大写X和Y(c#中公共属性一般约定以大写字母开头).当坐标不是整数值是float时,用PointF代替Poin ...

  7. aspx页面使用ajax遇到try catch中使用Response.End()报错

    1.使用Ajax接收数据,在返回Response.Write()后应该调用Response.End()才能将数据写入到调用的页面,才能被jQuery的回调函数获取到返回的JSON数据 2.在try-- ...

  8. Dubbo接口压测

    在每年的双十一大促之前,除了全链路压测,还需要各个业务方对自己业务提供的核心接口进行单接口压测,以评判系统的稳定性和承压能力. 一.准备工作 环境准备:确保应用性能环境(perf)正常可用 压测接口梳 ...

  9. [jvm][面试]JVM 调优总结

    https://blog.csdn.net/wfh6732/article/details/57422967 堆大小设置JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-b ...

  10. [转]PID控制算法原理

    PID控制算法是工业界使用极其广泛的一个负反馈算法,相信这个算法在做系统软件时也有用武之处,这里摘录了知乎上的一篇文章,后面学习更多后自己总结一篇 以下为原文: PID控制应该算是应用非常广泛的控制算 ...