PostgreSQL技术大讲堂 - 第34讲:调优工具pgBagder部署

PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注CUUG PG技术大讲堂。
第34讲:调优工具pgBagder部署
第34讲:11月18日(周六)19:30-20:30,往期文档及视频,联系CUUG
内容1 : 日志分析器pgBadger简介
内容2 : pgBadger部署
内容3 : 如何产生类似于AWR报告
内容4 : 基于:一小时、一天、一周、一月的报告
内容5 : 如何分析pgBadger
第34讲:调优工具pgBagder部署
pgBadger简介
pgBadger是一个PostgreSQL日志分析器,它是为提高速度而构建的,具有来自PostgreSQL日志文件的完整报告。它是一个小型的Perl脚本,性能优于任何其他PostgreSQL日志分析器。
pgBadger可以自动检测日志文件格式(syslog、stderr、csvlog或jsonlog)。它被设计用来解析巨大的日志文件和压缩文件。支持的压缩格式有gzip、bzip2、lz4、xz、zip和zstd。
还可以使用命令行选项将pgBadger限制为仅报告错误或删除报告的任何部分。
pgBadger支持在postgresql.conf文件中通过log_line_prefix 自定义的任何格式,只要它至少指定%t和%p模式。
pgBadger允许通过使用指定CPU数量的-j选项并行处理单个日志文件或多个文件。
如果要保存系统性能,也可以使用log_duration 替代log_min_duration_statement来仅报告持续时间和查询数。
pgBadger特性
· pgBadger报告有关SQL查询的所有信息:
总体统计数据。
等待最频繁的查询。
等待时间最长的查询。
生成最多临时文件的查询。
生成最大临时文件的查询。
最慢的查询。
占用时间最多的查询。
最频繁的查询。
最常见的错误。
查询时间直方图。
会话时间柱状图。
参与热门查询的用户。
顶级查询中涉及的应用程序。
产生最多取消的查询。
查询大部分被取消。
最耗时的准备/绑定查询。
· 还提供分为五分钟的小时图表
SQL查询统计信息。
临时文件统计。
检查点统计。
自动真空和自动分析统计数据。
取消的查询。
错误事件(死机、致命、错误和警告)。
错误类分布。
· 一些关于分布的饼图:
锁定统计信息。
按类型查询(选择/插入/更新/删除)。
每个数据库/应用程序的查询类型分布。
每个数据库/用户/客户端/应用程序的会话数。
每个数据库/用户/客户端/应用程序的连接数。
根据表格自动真空和自动分析。
每个用户的查询数和每个用户的总持续时间。
所有图表都是可缩放的,可以保存为PNG图像。报告的SQL查询将自动突出显示和美化。
· 可以解析PgBouncer日志文件并创建以下报告
请求吞吐量
字节I/O吞吐量
查询平均持续时间
同时举行的会议
会话时间柱状图
每个数据库的会话数
每个用户的会话数
每个主机的会话数
已建立的联系
每个数据库的连接数
每个用户的连接数
每个主机的连接数
使用最多的保留池
最常见错误/事件
pgBadger报告模式
· pgBadger报告模式
一小时一个报告
每天一个报告
每周一个累积报告的增量报告
每月一个报告
多个进程处理一个日志
多个进程处理多个日志
pgBadger部署
· 官方下载地址
https://github.com/darold/pgbadger/releases
· 编译与安装(root用户)
1、解压后进入该安装目录
# unzip pgbadger-master.zip
# cd pgbadger-master
2、编译并安装:
# perl Makefile.PL
# make && make install
3、默认安装目录:
/usr/local/bin/pgbadger
postgresql.conf配置
logging_collector = on
log_directory = 'pg_log‘
log_checkpoints = on
log_connections = on
log_disconnections = on
log_lock_waits = on
log_temp_files = 0
log_autovacuum_min_duration = 0
log_rotation_size=10240
--例如,对于“stderr”日志格式,日志行前缀必须至少为:
log_line_prefix = '%t [%p]: '
--日志行前缀可以添加用户、数据库名称、应用程序名称和客户端ip地址,如下所示:
log_line_prefix = '%t [%p]: user=%u,db=%d,app=%a,client=%h '
--或者对于syslog日志文件格式:
log_line_prefix = 'user=%u,db=%d,app=%a,client=%h '
--日志消息支持英文,不支持中文:
lc_messages='en_US.UTF-8'
lc_messages='C‘
--记录的日志语句
假如:log_statement=all
则:不会使用(log_min_duration_statement)记录任何内容
所以:log_min_duration_statement=0 #记录所有的统计信息包含实际的查询字符串
警告:不要同时启用log_min_duration_statement、log_duration and log_statement ,这将导致错误的计数器值。注意,这也会大大增加日志的大小。log_min_duration_statement应始终首选。
如何产生报告
当有许多小的日志文件和许多CPU时,一次将一个内核专用于一个日志文件会更快。要启用此行为,必须改用-J N选项。对于每个10MB的200个日志文件,-J选项的使用开始变得非常有效,有8个内核。使用此方法,您将确保不会丢失报表中的任何查询。
一个在服务器上完成的基准测试,有8个CPU和9.5GB的单个文件。
Option | 1 CPU | 2 CPU | 4 CPU | 8 CPU
--------+---------+-------+-------+------
-j | 1h41m18 | 50m25 | 25m39 | 15m58
-J | 1h41m18 | 54m28 | 41m16 | 34m45
200个日志文件,每个10MB,总共2GB,结果略有不同:
Option | 1 CPU | 2 CPU | 4 CPU | 8 CPU
--------+-------+-------+-------+------
-j | 20m15 | 9m56 | 5m20 | 4m20
-J | 20m15 | 9m49 | 5m00 | 2m40
--产生一个小时的日志报告:
$ pgbadger -q /usr/local/pg12.2/data/pg_log/postgresql-2020-06-19_00*.log \
-o /home/postgres/www/pg_reports/day-06-19-00.html
--产生每日和每周的日志报告:
$ pgbadger -I -q /usr/local/pg12.2/data/pg_log/* \
-O /home/postgres/www/pg_reports/ \
-f stderr
在这种模式下,pgBadger将在输出目录中创建一个自动增量文件。这意味着可以在每周旋转的日志文件上每天以这种模式运行pgBadger,并且它不会对日志条目计数两次,可以使用crontab进行定时运行。
--重建报告:
pgbadger -X -I -O /home/postgres/www/pg_reports/ --rebuild
此时在reports目录下产生创建一个目录,里面包含js文件,同时在另外一个目录下创建一个目录week-25,存放index文件。
它还将更新所有资源文件(JS和CSS)。如果报表是使用此选项生成的,请使用-E或--explode。
--默认情况下,增量模式下的pgBadger只计算每日和每周报告。如果需要每月累积报告,则必须使用单独的命令指定要生成的报告。例如,为2019年8月编制一份报告:
pgbadger --month-report 2919-08 /path/to/incremantal/reports/
JSON FORMAT
JSON格式有利于与其他语言共享数据,这使得pgBadger结果很容易集成到其他监控工具(如Cacti或Graphite)中。
报告界面一

报告界面二

CUUG PostgreSQL技术大讲堂系列公开课,往期视频及文档,请联系CUUG客服。
相关文章:
PostgreSQL技术大讲堂 - 第34讲:调优工具pgBagder部署
PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注CUUG PG技术大讲堂。 第34讲&#…...
《Python日志新宠——Loguru,轻松记录,笑对Bug!》
嘿,程序媛和程序猿们!👩💻👨💻 你们是不是也曾为日志处理这个“小事”而头疼?别着急,今天我给你们介绍一个简直比拥抱泰迪熊还要温暖的Python库——Loguru!这货不仅强…...
NET8 ORM 使用AOT SqlSugar
.NET AOT8 基本上能够免强使用了, SqlSugar ORM也支持了CRUD 能在AOT下运行了 Nuget安装 SqlSugarCore 具体代码 StaticConfig.EnableAot true;//启用AOT 程序启动执行一次就好了//用SqlSugarClient每次都new,不要用单例模式 var db new SqlSugarClient(new ConnectionC…...
CCRC认证是什么?
什么是CCRC认证? 信息安全服务资质,是信息安全服务机构提供安全服务的一种资格,包括法律地位、资源状况、管理水平、技术能力等方面的要求。 信息安全服务资质(CCRC)是依据国家法律法规、国家标准、行业标准和技术规范…...
linux内核面试题(2)
整理了一些网上的linux驱动岗位相关面试题,如果错误,欢迎指正。 工作队列是运行在进程上下文,还是中断上下文?它的回调函数是否允许睡眠? 工作队列是运行在进程上下文的。工作队列的回调函数是允许睡眠的,…...
YOLOV5----修改损失函数-ShuffleAttention
主要修改yolo.py、yolov5s.yaml及添加ShuffleAttention.py 一、ShuffleAttention.py import numpy as np import torch from torch import nn from torch.nn import init from torch.nn.parameter import Parameterclass ShuffleAttention(nn.Module):def...
Kafka(四)消费者消费消息
文章目录 如何确保不重复消费消息?消费者业务逻辑重试消费者提交自定义反序列化类消费者参数配置及其说明重要的参数session.time.ms和heartbeat.interval.ms和group.instance.id增加消费者的吞吐量消费者消费的超时时间和poll()方法的关系 消费者消费逻辑启动消费者…...
Python uiautomation获取微信内容!聊天记录、聊天列表、全都可获取
Python uiautomation 是一个用于自动化 GUI 测试和操作的库,它可以模拟用户操作来执行各种任务。 通过这个库,可以使用Python脚本模拟人工点击,人工操作界面。本文使用 Python uiautomation 进行微信电脑版的操作。 以下是本次实验的版本号。…...
Java通过Lettuce访问Redis主从,哨兵,集群
操作 首先需要maven导入依赖 <dependency><groupId>io.lettuce</groupId><artifactId>lettuce-core</artifactId><version>6.3.0.RELEASE</version> </dependency> 测试连接 public class LettuceDemo {public static voi…...
嵌入式数据库Sqlite
本文主要是介绍如何再Ubuntu下使用sqlite数据库,并且嵌入式QT环境下使用C语言来构建一个sqlite数据库,使用sqlite browser进行数据库的可视化。 1、安装sqlite 在ubuntu系统中的安装需要先下载一个安装包,SQLite Download Page 安装命令&a…...
计算机网络:网络层ARP协议
在实现IP通信时使用了两个地址:IP地址(网络层地址)和MAC地址(数据链路层地址) 问题:已知一个机器(主机或路由器)的IP地址,如何找到相应的MAC地址? 为了解决…...
集成环信IM时常见问题及解决——包括消息、群组、推送
一、消息 环信是不支持空会话的,在插入一个会话,一定要给这个会话再插入一条消息; 发送透传消息也就是cmd消息时,value的em_开头的字段为环信内部消息字段,如果使用会出现收不到消息回调的情况; 如果发送…...
Selenium自动化测试框架
一.Selenium概述 1.1 什么是框架? 框架(framework)是一个框子——指其约束性,也是一个架子——指其支撑性。是一个基本概念上的 结构用于去解决或者处理复杂的问题。 框架是整个或部分系统的可重用设计,表现为一组抽象构件及…...
C#实现观察者模式
观察者模式是一种软件设计模式,当一个对象的状态发生变化时,其所有依赖者都会自动得到通知。 观察者模式也被称为“发布-订阅”模式,它定义了对象之间的一对多的依赖性,当一个对象状态改变时,所有依赖于它的对象都会得…...
什么是持续部署
管理软件开发和部署有 3 种常见的方法:持续集成、持续交付,然后是持续部署。尽管它们经常被混淆,但它们是明显不同的。 正如您将在本文后面看到的,它们相互融合,并补充彼此的风格。但这篇文章并不是关于他们三个。今天…...
【Python】Loguru模块更简洁的日志记录库
Loguru: 更优雅的日志记录解决方案! loguru 是一个Python 简易且强大的第三方日志记录库,该库旨在通过添加一系列有用的功能来解决标准记录器的注意事项,从而减少 Python 日志记录的痛苦。 使用自带自带的 logging 模块的话,则需要…...
智慧环保:科技驱动下的环境保护新篇章
智慧环保:科技驱动下的环境保护新篇章 环境保护已经成为当今社会的重要议题,而科技的飞速发展为我们开启了智慧环保的新篇章。在这篇文章中,我们将介绍智慧环保所带来的机会和创新,以及科技在环境保护中的重要作用。 智慧环保的理…...
CTF-PWN环境搭建手册
工欲善其事必先利其器,作为一名CTF的pwn手,一定要有自己的专用解题环境。本文将详细记录kali下的pwn解题环境的安装过程,B站也会配备配套视频。 目录 安装前的准备工作 虚拟机环境编辑 VM版本安装教程 1. 下载Kali的VM虚拟机文件 2. 新…...
Nginx安装配置与SSL证书安装部署
一、Nginx Nginx是一款高性能的开源Web服务器和反向代理服务器,被广泛用于构建现代化的Web应用和提供静态内容。 nginx官网 这里下载nginx-1.24.0-zip Nginx是一款高性能的开源Web服务器和反向代理服务器,被广泛用于构建现代化的Web应用和提供静态内…...
高性能面试八股文之编译流程程序调度
1. C的编译流程 C语言程序的编译过程通常包括预处理(Preprocessing)、编译(Compilation)、汇编(Assembly)、链接(Linking)四个主要阶段。下面是这些阶段的详细说明: 1.…...
Go Module 依赖冲突调试方法
Go Module 依赖冲突调试方法 在Go语言开发中,依赖管理是一个关键环节。随着项目规模的扩大,依赖的第三方库越来越多,版本冲突问题也愈发常见。Go Module作为官方推荐的依赖管理工具,虽然简化了依赖管理流程,但在多级依…...
Qwen3.5-2B入门指南:如何将本地7860服务映射为公网可访问API接口
Qwen3.5-2B入门指南:如何将本地7860服务映射为公网可访问API接口 1. 引言 Qwen3.5-2B是阿里云推出的轻量化多模态基础模型,属于Qwen3.5系列的小参数版本(20亿参数)。这个模型主打低功耗、低门槛部署,特别适合在端侧和…...
当知识有了‘关系网‘:LightRAG如何让大模型‘秒懂‘你的文档?
想象一下,你有一座藏书万卷的图书馆,但你找书的方式只有一种——记住每本书某个页面的关键词,然后靠"猜"来定位。 这,就是传统RAG系统的尴尬处境。 今天要介绍的这个开源项目LightRAG,被顶会EMNLP 2025接收…...
Qwen3.5-2B图文对话实战:上传实验数据图→自动识别坐标轴+趋势分析+结论建议
Qwen3.5-2B图文对话实战:上传实验数据图→自动识别坐标轴趋势分析结论建议 1. 引言:当AI遇见科研数据分析 作为一名科研工作者,你是否经常遇到这样的场景:实验室刚跑出一组数据,你迫不及待想分析趋势,却发…...
Ray Optics:面向未来的光学仿真平台——从零开始的光学建模实践
Ray Optics:面向未来的光学仿真平台——从零开始的光学建模实践 【免费下载链接】ray-optics A web app for creating and simulating 2D geometric optical scenes, with a gallery of (interactive) demos. 项目地址: https://gitcode.com/gh_mirrors/ra/ray-op…...
Phi-4-mini-reasoning部署教程:Nginx反向代理+Basic Auth安全加固
Phi-4-mini-reasoning部署教程:Nginx反向代理Basic Auth安全加固 1. 项目介绍 Phi-4-mini-reasoning是一款由微软开源的轻量级AI模型,专注于数学推理、逻辑推导和多步解题等强逻辑任务。这个3.8B参数的模型虽然体积小巧,但在推理能力上表现…...
【ZGC性能黄金阈值手册】:基于127个线上集群实测数据,定义堆大小/线程数/触发频率最优配比
第一章:ZGC性能黄金阈值的定义与行业意义ZGC(Z Garbage Collector)作为JDK 11引入的低延迟垃圾收集器,其核心设计目标是将GC暂停时间稳定控制在10毫秒以内,且不随堆大小线性增长。而“ZGC性能黄金阈值”并非官方术语&a…...
益象创新与数谷智能,轻量化 AI 定制方案设计谁更优?
在企业数字化转型的下半场,人工智能(AI)的应用正从“大算力、大模型”的盲目崇拜,转向“轻量化、高适配”的务实落地上。对于中小型企业或大型企业的特定业务部门而言,动辄百万级的算力投入并不现实,一套能…...
I2C总线协议实战:从零开始用Verilog实现一个I2C主设备(附完整代码)
I2C总线协议实战:从零开始用Verilog实现一个I2C主设备(附完整代码) 在嵌入式系统和FPGA开发中,I2C总线因其简单的两线制结构和灵活的多主设备支持,成为最常用的串行通信协议之一。本文将带您从零开始,用Ver…...
救命!电路板维修高频故障排查口诀,背会秒上手,修板快准稳
修板半天没头绪?工控伺服板一修就慌?测遍元件还烧板?其实电路板故障排查不用死磕,一套好记的速记口诀,能帮你少走弯路、少赔成本,新手能快速上手,老手直接拉高效率,刷到这篇干货&…...
