当前位置: 首页 > article >正文

别再让PostgreSQL连接数爆了!手把手教你用pgBouncer 1.24.1给数据库‘减负’(附日志自动清理脚本)

PostgreSQL连接池实战用pgBouncer 1.24.1破解高并发瓶颈当你的应用用户量突破十万级大关时是否经常在凌晨被too many connections的告警惊醒这就像高峰期的地铁站每个乘客客户端连接都试图挤进有限的闸机数据库连接最终导致系统瘫痪。今天我们不只教你安装pgBouncer这个智能检票系统更要带你掌握三种流量调度策略让数据库连接从混乱无序到高效运转。1. 连接池的本质与模式选择连接池不是简单的连接复用工具而是数据库流量的智能调度中心。理解三种工作模式的差异就像选择不同的交通管制方案**会话模式Session Pooling**相当于给每位乘客发放VIP通行证从进站到出站全程独占通道。这种模式最接近原生连接行为适合以下场景使用临时表或会话级变量的应用需要SET语句配置会话参数的场景连接持有时间较长的OLAP查询系统# 典型配置示例 pool_mode session server_lifetime 3600 # 连接最大存活时间(秒)**事务模式Transaction Pooling**则像地铁的进出站闸机只在事务处理期间分配连接。这是我们最推荐的生产环境配置但要注意禁止使用PREPARE语句不能使用LISTEN/NOTIFY避免使用游标(CURSOR)# 事务模式优化配置 pool_mode transaction server_idle_timeout 60 # 空闲连接回收时间 query_timeout 300 # 单查询超时设置**语句模式Statement Pooling**则是极端情况下的选择相当于要求所有乘客必须即停即走自动提交模式。这种模式常见于PL/Proxy分片集群只读分析型负载无事务要求的简单查询警告语句模式会导致多语句事务中的中间结果丢失必须确保应用已开启autocommit2. 生产级部署实战2.1 智能编译安装现代Linux发行版推荐使用系统包管理器安装依赖避免潜在的ABI兼容问题# Ubuntu/Debian sudo apt install -y libevent-dev libssl-dev libsystemd-dev # RHEL/CentOS sudo yum install -y libevent-devel openssl-devel systemd-devel编译时启用TLS支持为未来安全连接预留空间./configure --prefix/usr/local \ --with-systemd \ --with-openssl \ --enable-tls make sudo make install2.2 安全加固配置默认配置存在安全隐患建议进行以下调整[databases] # 使用别名隐藏真实数据库信息 app_prod host127.0.0.1 port5432 dbnameproduction [pgbouncer] # 限制监听范围 listen_addr 192.168.1.100 listen_port 6432 # 认证强化 auth_type scram-sha-256 auth_file /etc/pgbouncer/userlist.txt # 连接限制 max_client_conn 1000 default_pool_size 60 reserve_pool_size 15密码文件建议使用pgBouncer自带的加密工具生成# 生成SCRAM加密密码 pgbouncer -Md5-postgres 你的密码 /etc/pgbouncer/userlist.txt2.3 系统集成技巧现代Linux系统推荐使用systemd管理服务以下是增强版服务配置[Unit] DescriptionpgBouncer connection pooler Afternetwork.target postgresql.service [Service] Userpostgres Grouppostgres ExecStart/usr/local/bin/pgbouncer -d /etc/pgbouncer/pgbouncer.ini ExecReload/bin/kill -HUP $MAINPID Restartalways LimitNOFILE65536 [Install] WantedBymulti-user.target关键参数说明LimitNOFILE解决too many open files错误Afterpostgresql.service确保数据库就绪后启动Restartalways异常退出自动恢复3. 高级调优策略3.1 连接池容量计算连接池不是越大越好参考以下公式计算合理值理想连接数 (核心数 * 2) 有效磁盘数不同业务类型的建议配置业务类型pool_sizereserve_pool超时设置Web事务处理50-10010-20%query_timeout30s报表分析20-305-10%query_timeout1h批量处理10-202-5server_lifetime10m3.2 智能路由配置通过pgBouncer实现读写分离[databases] # 写节点 primary hostpg1.example.com port5432 dbnameapp # 读节点副本 replica1 hostpg2.example.com port5432 dbnameapp replica2 hostpg3.example.com port5432 dbnameapp # 读负载均衡组 replicas hostpg2.example.com,pg3.example.com port5432 dbnameapp load_balance13.3 实时监控方案集成Prometheus监控的关键配置[pgbouncer] stats_period 60 admin_users monitor # Prometheus exporter配置 [exporter] listen_addr 127.0.0.1 listen_port 9127常用监控指标pgbouncer_pools_client_active活跃客户端连接数pgbouncer_pools_server_active后端数据库连接数pgbouncer_requests_total查询请求速率4. 故障排查手册4.1 连接泄漏检测通过以下SQL识别可疑连接SELECT datname, usename, state, count(*) FROM pg_stat_activity WHERE backend_type client backend GROUP BY 1,2,3 ORDER BY 4 DESC;常见泄漏模式大量idle in transaction状态同一用户异常多的连接特定数据库连接数持续增长4.2 性能瓶颈分析慢查询日志配置[pgbouncer] log_connections 1 log_disconnections 1 log_pooler_errors 1 log_stats 60 syslog 1关键日志事件解析LOG: C-0x1a2b3c4d: app/user[192.168.1.1]:6432 login attempt: dbapp_prod useruser LOG: S-0x5e6f7a8b: app/user[127.0.0.1]:5432 closing because: client close request (age30s)4.3 自动恢复机制使用systemd的自动重启策略[Service] Restarton-failure RestartSec5s StartLimitInterval60s StartLimitBurst3配套监控脚本示例#!/bin/bash if ! pgrep -x pgbouncer /dev/null; then systemctl restart pgbouncer echo $(date): pgbouncer restarted /var/log/pgbouncer/watchdog.log fi在三个月前的生产环境迁移中我们通过transaction模式将连接数从直接连接时的1500降至稳定在200左右同时查询吞吐量提升了40%。最意外的是原本周期性出现的连接超时错误完全消失这验证了连接池不只是连接复用工具更是数据库稳定性的守护者。

相关文章:

别再让PostgreSQL连接数爆了!手把手教你用pgBouncer 1.24.1给数据库‘减负’(附日志自动清理脚本)

PostgreSQL连接池实战:用pgBouncer 1.24.1破解高并发瓶颈 当你的应用用户量突破十万级大关时,是否经常在凌晨被"too many connections"的告警惊醒?这就像高峰期的地铁站,每个乘客(客户端连接)都…...

Palot:轻量级自动化工具,提升开发与运维效率

1. 项目概述与核心价值最近在折腾个人服务器和自动化流程时,发现了一个挺有意思的项目,叫palot。这个项目在 GitHub 上由ItsWendell维护,乍一看名字可能有点摸不着头脑,但深入了解后,你会发现它是一个非常贴合当下开发…...

手机变身AI工作站:用Termux在安卓上跑通ChatGLM-6B模型(保姆级避坑指南)

手机变身AI工作站:用Termux在安卓上跑通ChatGLM-6B模型(保姆级避坑指南) 你是否想过,口袋里那台闲置的安卓手机,也能变身成为运行大语言模型的AI工作站?本文将带你用Termux这把"瑞士军刀"&#x…...

iTVBoxFast二开版深度体验:从用户视角看会员系统、积分商城与多线路切换到底好不好用

iTVBoxFast二开版深度体验:会员系统、积分商城与多线路切换实战评测 1. 产品定位与核心功能解析 iTVBoxFast作为TVBox生态中的二次开发版本,在保留原有开源框架优势的基础上,针对商业化运营需求进行了深度定制。从终端用户视角来看&#xff0…...

给车机开发者的CarPlay有线连接避坑指南:从USB枚举到NCM激活的完整流程解析

给车机开发者的CarPlay有线连接避坑指南:从USB枚举到NCM激活的完整流程解析 CarPlay作为苹果生态在车载场景的重要延伸,其有线连接方案在稳定性与延迟表现上仍具不可替代性。但实际开发中,从USB协议栈配置到NCM网络通道建立的全链路&#xff…...

Allwinner A523处理器解析:跨界SoC的性能与应用

1. Allwinner A523处理器深度解析:一款面向平板与嵌入式设备的全能型SoC Allwinner A523这颗八核Cortex-A55处理器最近在嵌入式圈子里引发了广泛讨论。作为深耕ARM架构开发多年的工程师,我认为这款SoC的定位非常巧妙——它既延续了全志在平板电脑市场的传…...

SRCT模型:随机共振耦合阈值原理与应用解析

1. SRCT模型基础解析 SRCT(Stochastic Resonance Coupled Threshold)模型是近年来非线性动力学领域的重要研究方向,它通过引入随机激励与阈值耦合机制,为复杂系统的临界行为分析提供了新的数学工具。我在研究电网稳定性问题时首次…...

ENVI Classic 裁剪避坑指南:别再让.shp文件只裁出个矩形框了!

ENVI Classic影像裁剪进阶指南:突破矩形框限制的实战技巧 引言 当你第一次使用ENVI Classic进行影像裁剪时,是否遇到过这样的困惑:明明已经导入了精细的.shp矢量边界文件,最终输出的结果却仍然是一个粗糙的矩形框?这种…...

QT开发实战:用QFileDialog搞定.dat文件解析与导出(附完整源码)

QT实战:从零构建.dat文件解析工具(QFileDialog深度应用) 在桌面应用开发中,文件操作是最基础也最频繁的需求之一。想象一下这样的场景:你手头有一批来自硬件设备的.dat格式原始数据文件,需要快速查看每个字…...

MCEL:提升量化神经网络容错性的边界优化方法

1. 量化神经网络容错性挑战与MCEL解决方案在边缘计算和物联网设备爆炸式增长的今天,量化神经网络(QNN)因其高效的计算特性和低内存占用,已成为嵌入式AI系统的首选方案。然而,这些设备常采用近似计算技术和低功耗内存,不可避免地会…...

告别格式工厂!用Python脚本一键批量转换微信silk语音为mp3(附源码)

用Python脚本一键批量转换微信silk语音为mp3 微信语音消息默认采用silk格式存储,这种专有编码在跨平台播放时常常遇到兼容性问题。传统解决方案依赖图形界面工具如格式工厂,不仅操作繁琐,批量处理时更是效率低下。本文将介绍如何用Python脚本…...

合成数据生成器:从原理到实践,破解数据瓶颈的工程指南

1. 项目概述:当数据成为瓶颈,我们如何“无中生有”?在数据驱动的时代,无论是训练一个精准的机器学习模型,还是测试一个复杂的业务系统,我们常常会撞上一个令人头疼的“数据墙”。真实数据要么获取成本高昂、…...

从蓝图到C++:拆解UE5多人TPS项目中关卡蓝图与插件通信的完整流程

从蓝图到C:拆解UE5多人TPS项目中关卡蓝图与插件通信的完整流程 当你在UE5中拖拽蓝图节点时,是否思考过这些彩色线条背后隐藏的C魔法?本文将带你穿透蓝图可视化脚本的表象,直击多人TPS项目中关卡蓝图与插件通信的底层实现机制。不同…...

Geodesic:容器化DevOps工具箱,彻底解决环境不一致难题

1. 项目概述 如果你在团队里搞过基础设施即代码,肯定遇到过这种场景:新来的同事花了两天时间配环境,结果因为本地装的 Terraform 版本和 CI/CD 流水线里的差了 0.1.0,一个 plan 跑出来的结果天差地别;或者你本地的 …...

别再只调ePWM了!用TMS320F28374S的CLB X-BAR和ePWM X-BAR玩点高级的

解锁TMS320F28374S的X-BAR潜能:硬件级逻辑控制的进阶实践 在嵌入式控制系统的设计中,实时性和可靠性往往是工程师们最关注的性能指标。当您已经熟练掌握了TMS320F28374S的基础外设配置,如ePWM模块的常规使用和GPIO操作,是否曾思考…...

md-emoji-mcp:让Markdown文档变生动的表情包注入工具

1. 项目概述:一个让技术文档“活”起来的表情包注入器作为一名长期与技术文档打交道的开发者,我深知一个痛点:我们写的技术文章、项目说明,往往因为过于严谨和“干巴巴”而显得枯燥。读者在阅读长篇的配置说明或原理阐述时&#x…...

开发者技能提升计划:从算法到系统设计的全栈能力构建

1. 项目概述:一个面向开发者的“复仇者”技能提升计划最近在GitHub上看到一个挺有意思的项目,叫ProSkillsMD/avenger-initiative。光看名字,一股“复仇者联盟”的既视感扑面而来,让人好奇这葫芦里到底卖的什么药。点进去一看&…...

闪存缓存技术Nemo:优化微对象写入放大与内存效率

1. 闪存缓存技术面临的挑战与Nemo的创新价值在当今数据中心和云计算环境中,闪存缓存技术已经成为提升存储系统性能的关键组件。SSD凭借其优异的性价比(每GB成本仅为DRAM的1/10-1/20)和持续提升的性能(最新PCIe 5.0 SSD顺序读写已达…...

Node.js 实现 Xcursor 到 PNG 转换:解锁 Linux 光标资源的跨平台应用

1. 项目概述:从Xcursor到PNG的转换之旅 在Linux桌面环境中,鼠标光标主题通常以 .xcursor 或 .cursor 文件格式存在。这是一种专为光标设计的、支持多尺寸和多帧动画的二进制格式。然而,当你需要将这些光标用于网页设计、游戏开发、文档插…...

告别表格,用神经网络玩转策略梯度:从REINFORCE算法到PyTorch实战

从表格到神经网络:策略梯度实战与REINFORCE算法深度解析 在强化学习的演进历程中,策略表示方式经历了从离散表格到连续函数的关键跨越。传统表格法在面对高维状态空间时捉襟见肘,而神经网络等函数近似器的引入,不仅解决了维度灾难…...

从游戏UI到图像裁剪:深入剖析QRect在Qt项目中的高级应用与性能优化

从游戏UI到图像裁剪:深入剖析QRect在Qt项目中的高级应用与性能优化 在Qt生态系统中,QRect这个看似简单的矩形处理类,实际上承载着图形界面开发中80%的空间计算任务。从游戏开发中的精灵碰撞到图像编辑软件的选区操作,QRect的高效运…...

避坑指南:Ansys Icepak仿真结果异常(高温、不收敛、数据丢失)的5个常见原因与排查方法

Ansys Icepak热仿真异常排查实战:从物理原理到软件操作的深度解析 引言:当仿真结果偏离物理常识时 第一次看到Icepak仿真结果中出现3000℃的芯片温度时,我盯着屏幕愣了三分钟——这显然违背了基本的物理规律。这种"超现实"的仿真结…...

AI工具资源导航:从分类到实战,高效构建技术栈

1. 项目概述:一个AI工具集合的诞生与价值在AI技术浪潮席卷全球的当下,无论是开发者、研究者还是普通的内容创作者,都面临着同一个问题:如何高效地找到并利用那些真正好用的AI工具?每天都有新的模型、新的应用、新的API…...

GitHub Copilot真能替代程序员吗?我让它和资深工程师结对编程了一周,结果有点意外

GitHub Copilot与资深工程师的七日对决:一场关于AI编程的深度实验 实验缘起:当AI助手遇上十年经验开发者 去年冬天,我决定做一个大胆的尝试——让我的十年Java开发经验与GitHub Copilot来一场为期七天的结对编程马拉松。这不是简单的工具评测…...

告别‘rm -rf’惨案!Termux新手必知的10个文件操作安全习惯与恢复技巧

Termux文件操作安全指南:10个让Android终端更可靠的习惯 在Android设备上使用Termux探索Linux命令的乐趣时,文件操作安全往往是最容易被忽视的一课。许多新手在兴奋地输入rm -rf命令后,才意识到这个看似简单的操作可能带来无法挽回的数据损失…...

告别手动复制粘贴!用EasyExcel的模板填充功能,5分钟搞定Java报表生成

5分钟极速报表革命:EasyExcel模板填充实战指南 每次月底赶制财务报表时,你是否还在重复着复制粘贴的机械操作?当业务部门临时要求调整数据看板格式时,你是否需要重新编写大量POI代码?Java开发者与Excel的爱恨情仇&…...

量子计算基准测试:Metriq平台解析与实践指南

1. 量子计算基准测试的现状与挑战量子计算正从实验室走向实际应用,但如何客观评估不同量子处理器的性能成为业界难题。当前量子基准测试领域存在三大痛点:首先,测试工具高度碎片化。各大硬件厂商(如IBM、Google、Rigetti&#xff…...

StageVAR:自回归模型分阶段加速框架解析

1. 项目背景与核心价值在计算机视觉领域,自回归模型(Autoregressive Models)因其出色的序列建模能力,已成为图像生成、视频预测等任务的主流选择。但这类模型存在一个致命痛点——推理速度慢。传统自回归模型需要逐像素或逐块生成…...

避坑指南:鸿蒙HarmonyOS List列表开发中你可能会遇到的5个‘坑’及解决方案

鸿蒙HarmonyOS List开发实战:5个高频问题排查与性能优化指南 在鸿蒙应用开发中,List组件作为高频使用的界面元素,承载着数据展示的核心功能。许多开发者在初步掌握基础用法后,往往会在复杂场景中遭遇意料之外的"陷阱"。…...

别再踩坑了!从Nacos 1.4.5升级到2.2.2,我遇到的‘Unknown column’和Tomcat启动失败都解决了

Nacos 1.4.5到2.2.2升级实战:避坑指南与深度解析 最近在将生产环境的Nacos从1.4.5升级到2.2.2版本时,遇到了几个典型的"坑"。这些问题的解决方案在官方文档中并不明显,需要结合版本变更和实际环境进行分析。本文将分享两个最棘手的…...