搜尋
首頁資料庫mysql教程PostgreSQL数据库连接池PgBouncer的搭建

最近有些项目我们是采用PostgreSQL进行后端数据库,由于要对客户端的连接使用类型和连接数进行控制,因此我们采用PgBouncer来进行

最近有些项目我们是采用PostgreSQL进行后端数据库,由于要对客户端的连接使用类型和连接数进行控制,因此我们采用PgBouncer来进行实施。

PgBouncer相关的基本文档pgsqldb中文站已经有不少文档,这里我就不再作过多的说明,我将集中对其中的几个要点和我实践中遇到的问题和大家分享一下。
OK,肺话也不多少,开始正题吧;D

PgBouncer介绍
什么是PgBouncer?
PgBouncer是一个轻量级的数据库连接池。download

PgBouncer的作用
PgBouncer可以在后端数据库和前端应用间建立连接的桥梁,由PgBouncer去处理和后端数据库的连接关系。
对客户端连接进行限制,预防过多或者恶意的连接请求。
PgBouncer的特点
内存消耗低(默认为2k/连接),因为Bouncer不需要每次都接受完整的数据包
可以把不同的数据库连接到一个机器上,而对客户端保持透明
支持在线的重新配置而无须重启
仅支持V3协议,因此后端版本须>=7.4
开始使用PgBouncer
基本ini文件配置(假设我们创建了新的ini文件/usr/local/pgsql/conf/pgbouncer.ini)
1. 添加目标数据库的连接字符串,这个表示PgBouncer将会在哪些后端数据库中建立连接,比如:

template1 = host=127.0.0.1 port=5432 dbname=template1
2. 设定PgBouncer的监听端口, port=5555,默认为6000

3. 创建用户列表文件并添加用户信息,此用户为允许客户端使用的连接用户名,比如:
A. @www.linuxidc.com:[~]$ echo "user" "password" > /usr/local/pgsql/user.txt
B. 在ini设定:auth_file = /usr/local/pgsql/user.txt
4. 创建admin用户,在配置中添加:admin_users = user,用户可以使用此用户名连接pgbouncer并查看运行状况等,
注意:此用户必须为user.txt文件中已经存在的用户。

启动并测试连接/查看运行状况
1. 启动:pgbouncer -d pgbouncer.ini
2. 测试连接:psql -h 127.0.0.1 -p 6000 -U user template1
3. 通过admin用户连接pgbouncer查看配置:
psql -h 127.0.0.1 -p 6000 -U user pgbouncer
pgbouncer=# show config;
3. 通过admin用户连接pgbouncer查看运行情况:

pgbouncer=# show stats;
pgbouncer=# show lists;
pgbouncer=# show pools;
pgbouncer=# show databases;
#其余运行参数可以通过如下命令查看
pgbouncer=# show help;
4. 参数修改:如果修改了ini文件中相关参数,需要通过命令告知bouncer重新读取配置内容:

pgbouncer=# reload;
 PgBouncer连接类型
会话池连接:即以一个session为生命期,当客户端断开的时候,才断开并释放连接回连接池
事务连接:服务器连接只是在一个事务的过程里赋予客户端的
语句连接:在每个查询结束之后,服务器的连接都会立即放回连接池。在这种模式下将不允许多语句的事务。否则,会给出如下提示,,比如
test=# begin;
 ERROR:  Long transactions not allowed
  server closed the connection unexpectedly
  This probably means the server terminated abnormally
  before or while processing the request.
 The connection to the server was lost. Attempting reset: Succeeded.
客户端连接方式
这里我简单说明一下客户端不同连接方式时服务器端的处理方式,以perl中为例:
$dbh = DBI -> connect('dbi:Pg:dbname=test;host=127.0.0.1;port=6000', 'postgres', ' ' ) or die $DBI::errstr;
客户端为AutoCommit时,transaction类型 = statements类型
pool类型为transaction类型,如果客户端不为AutoCommit时,必须显示Commit,否则连接不释放
pool类型为statements类型时,连接不支持长语句,因此客户端必须AutoCommit,否则依然会报错
AutoCommit配置为:

{'AutoCommit' => 0}
连接参数配置及客户端状态
max_client_conn
这个为允许客户端连接的最大数目
你可以通过show clients进行查看,当客户段连接大于此设置时,客户端会得到类似如下信息:
psql: ERROR:  no more connections allowed
default_pool_size
这个为当前连接池中允许的最大处理连接
比如default_pool_size=3,如果在连接池没有空余连接的情况下,如果已经连接的客户端尝试通过PgBouncer向后端执行查询请求,
则客户端会一直处理等待状态,当有空余的连接释放时,比如其他的客户端断开连接时,PgBouncer才会把此请求放如连接池中,
向后端提出服务请求,后端收到请求后,才执行请求返回结果,比如
template1=# select * from test;
 --no result
以上测试都是基于 pgbouncer version 1.1.1 + psql (PostgreSQL) 8.3.3

linux

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
將用戶添加到MySQL:完整的教程將用戶添加到MySQL:完整的教程May 12, 2025 am 12:14 AM

掌握添加MySQL用戶的方法對於數據庫管理員和開發者至關重要,因為它確保數據庫的安全性和訪問控制。 1)使用CREATEUSER命令創建新用戶,2)通過GRANT命令分配權限,3)使用FLUSHPRIVILEGES確保權限生效,4)定期審計和清理用戶賬戶以維護性能和安全。

掌握mySQL字符串數據類型:varchar vs.文本與char掌握mySQL字符串數據類型:varchar vs.文本與charMay 12, 2025 am 12:12 AM

chosecharforfixed-lengthdata,varcharforvariable-lengthdata,andtextforlargetextfield.1)chariseffity forconsistent-lengthdatalikecodes.2)varcharsuitsvariable-lengthdatalikenames,ballancingflexibilitibility andperformance.3)

MySQL:字符串數據類型和索引:最佳實踐MySQL:字符串數據類型和索引:最佳實踐May 12, 2025 am 12:11 AM

在MySQL中處理字符串數據類型和索引的最佳實踐包括:1)選擇合適的字符串類型,如CHAR用於固定長度,VARCHAR用於可變長度,TEXT用於大文本;2)謹慎索引,避免過度索引,針對常用查詢創建索引;3)使用前綴索引和全文索引優化長字符串搜索;4)定期監控和優化索引,保持索引小巧高效。通過這些方法,可以在讀取和寫入性能之間取得平衡,提升數據庫效率。

mysql:如何遠程添加用戶mysql:如何遠程添加用戶May 12, 2025 am 12:10 AM

ToaddauserremotelytoMySQL,followthesesteps:1)ConnecttoMySQLasroot,2)Createanewuserwithremoteaccess,3)Grantnecessaryprivileges,and4)Flushprivileges.BecautiousofsecurityrisksbylimitingprivilegesandaccesstospecificIPs,ensuringstrongpasswords,andmonitori

MySQL字符串數據類型的最終指南:有效的數據存儲MySQL字符串數據類型的最終指南:有效的數據存儲May 12, 2025 am 12:05 AM

tostorestringsefliceflicyInmySql,ChooSetherightDataTypeBasedyOrneOrneEds:1)USEcharforFixed-LengthStstringStringStringSlikeCountryCodes.2)UseVarcharforvariable-lengtthslikenames.3)USETEXTCONTENT.3)

mysql blob vs.文本:為大對象選擇正確的數據類型mysql blob vs.文本:為大對象選擇正確的數據類型May 11, 2025 am 12:13 AM

選擇MySQL的BLOB和TEXT數據類型時,BLOB適合存儲二進制數據,TEXT適合存儲文本數據。 1)BLOB適用於圖片、音頻等二進制數據,2)TEXT適用於文章、評論等文本數據,選擇時需考慮數據性質和性能優化。

MySQL:我應該將root用戶用於產品嗎?MySQL:我應該將root用戶用於產品嗎?May 11, 2025 am 12:11 AM

No,youshouldnotusetherootuserinMySQLforyourproduct.Instead,createspecificuserswithlimitedprivilegestoenhancesecurityandperformance:1)Createanewuserwithastrongpassword,2)Grantonlynecessarypermissionstothisuser,3)Regularlyreviewandupdateuserpermissions

MySQL字符串數據類型說明了:選擇適合您數據的合適類型MySQL字符串數據類型說明了:選擇適合您數據的合適類型May 11, 2025 am 12:10 AM

mySqlStringDatatAtatPessHouldBechoseBasedondatActarActeristicsAndusecases:1)USEcharforFixed lengthStstringStringStringSlikeCountryCodes.2)usevarcharforvariable-lengtthslikeLikenames.3)usebarnionororvarinyorvarinyorvarybinarydatalgebenedaTalgeextocrabextrapon.4)

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能