性能分析工具
性能分析工具
此页面侧重于收集外部PostgreSQL 数据的工具,以便更多地了解整个系统、PostgreSQL 对系统资源的使用情况、可能成为 PostgreSQL 性能瓶颈的事物等。
大多数情况下,PostgreSQL 内部提供的工具将足以满足您的需求。您工具箱中最重要的工具是 SQL EXPLAIN
命令及其 EXPLAIN ANALYZE
替代方案。pg_catalog.pg_stat_activity
和 pg_catalog.pg_locks
视图也很重要。
您可以在维基的性能和类别中找到很多关于调整 PostgreSQL 和系统的建议,以及在PostgreSQL 手册中找到。如果您无计可施,请查看SlowQueryQuestions。
用于 I/O、CPU 和内存使用情况调查的系统级工具
像 `ps`(使用 `wchan` 格式说明符)、`vmstat`、`top`、`iotop`、`blktrace` + `blkparse`、`btrace`、`sar`、alt-sysrq-t 等等这样的工具可以帮助您更多地了解您的系统正在做什么以及哪些地方发生了延迟。
在受支持的系统(目前是 Solaris 和 FreeBSD)上,`dtrace` 也是一个强大的工具。PostgreSQL 具有 DTrace 挂钩,允许您调查其内部工作原理和性能,以及它运行的操作系统的性能。
Windows 用户需要查看 Process Monitor、Process Explorer 和 FileMon,它们来自 SysInternals 套件。
Unix/Linux 工具
ps
"wchan" 选项对于查看处于 'D' 状态(在内核系统调用中不可中断睡眠)的进程实际正在做什么非常有用。例如
ps -e -o pid,ppid,wchan:60,cmd | grep post
您需要深入研究内核源代码、使用 Google 或自己弄清楚 wchan
字段中显示的值的含义。
vmstat
vmstat
可以为您提供有关系统范围内的 CPU、磁盘和内存活动的实用概述信息。当它连续更新时,它最有用,例如
vmstat 1
或
vmstat 60
(数字以秒为单位)。
输出如下所示
$ vmstat 1 procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu---- r b swpd free buff cache si so bi bo in cs us sy id wa 0 0 4144 242088 707752 2307192 0 0 0 26 71 73 2 1 97 1 0 0 4144 242080 707752 2307220 0 0 0 0 944 1917 2 1 97 0 0 0 4144 241956 707752 2307220 0 0 0 64 772 1579 1 1 98 0
top
与 vmstat 类似,它为您提供一些系统概述信息,但对磁盘信息没有那么有用。它非常可配置。
不要被 "used" 和 "free" 内存值所迷惑。实际使用的真实内存实际上是(大约)"used" 中的值减去 "buffers" 中的值,因为 "buffers" 包括内核的磁盘缓存。内核将使用大多数空闲内存作为磁盘缓存,但会在需要将其他内容放入内存时缩小该缓存。毕竟,真正的空闲内存是浪费的内存,对您毫无用处。
free
显示系统范围内的空闲和已用内存。
$ free -m total used free shared buffers cached Mem: 3960 3726 234 0 721 2252 -/+ buffers/cache: 752 3208 Swap: 2070 4 2066
"-"+ buffers/cache" 旁边的 "free" 值是您通常应该考虑的系统中 "真实" 空闲内存量。"-m" 标志要求以兆字节为单位显示值。
sar
进程统计。请查看手册页。
gdb
为什么调试器在性能分析工具中列出?
因为有时,将调试器附加到后端、定期中断后端以获取回溯,然后尝试弄清楚它究竟在做什么,是跟踪问题的一种有用方法。
Wireshark、tshark 和 tcpdump
这些工具用于监控和分析网络接口上的流量。如果您无法弄清楚是什么让您的网络接口保持繁忙,它们可能有助于您找出正在传输/接收的数据。
pktstat
一个类似于 top 的网络接口实用程序。不幸的是,它不显示进程 ID 或名称,但您可以根据源和目标端口信息找出它们。对于跟踪一个用流量淹没接口的后端来说非常方便。
仅限 Linux 的工具
atop
Atop 是一款用于 Linux 的全屏 ASCII 性能监控器,它能够报告所有进程的活动(即使进程在间隔期间已完成)、系统和进程活动的每日日志记录,以便进行长期分析,使用颜色突出显示过载的系统资源等等。它定期显示与 CPU、内存、交换空间、磁盘(包括 LVM)和网络层相关的系统级活动,并且对于每个进程(和线程)它会显示例如 CPU 利用率、内存增长、磁盘利用率、优先级、用户名、状态和退出代码。
iostat
提供有关系统中块设备的 I/O 活动和负载的摘要信息。它不提供有关哪些进程负责负载的信息,但会在实时生成简短易读的输出。与 vmstat 类似,它在连续模式下使用起来最有用,例如 "iostat 1"。
请查看手册页了解详细信息。
blktrace、blkparse 和 btrace
这些是用于获取有关给定块设备上活动的非常底层信息的工具,哪些进程导致了该活动,以及它们在做什么。它生成大量信息,但可以进行一定程度的过滤。解释它需要一些思考,但在 "到底是什么在猛烈地敲打我的磁盘" 的时刻非常有用。
由于 bgwriter 和 wal writer 的存在,通常很难看到 PostgreSQL 后端用什么让磁盘保持繁忙写入。它仍然适合跟踪繁重的读取负载,并找出哪个后端(以及通过 pg_catalog.pg_stat_activity
的查询)负责。
输出如下所示
9,1 0 246 11.339004193 1383 U N [postgres] 0 9,1 0 247 11.340029833 1383 A R 118356256 + 96 <- (252,3) 34469792 9,1 0 248 11.340030339 1383 Q R 118356256 + 96 [postgres] 9,1 0 249 11.340054022 1383 A R 118356352 + 128 <- (252,3) 34469888 9,1 0 250 11.340054341 1383 Q R 118356352 + 128 [postgres] 9,1 0 251 11.340062014 1383 A R 118356480 + 32 <- (252,3) 34470016 9,1 0 252 11.340062367 1383 Q R 118356480 + 32 [postgres]
... 以及在最后提供了一个方便的摘要。
strace
strace
是一个有用的工具,可以附加到进程并报告该进程执行的所有系统调用,包括这些系统调用的参数。它非常适合弄清楚进程打开了哪些文件,或者它是否在等待某些东西等等。
要进行有用的解释,需要一些 C 编程知识以及对 POSIX API 的了解。
(请注意,其他系统具有类似的工具,但名称不同 - 例如,一些 BSD 系统具有 truss
)。
oprofile
可能对一般用户没有用,但如果您在 Pg 中或 Pg 使用的库中有一些东西运行得异常缓慢,而您不知道为什么,那么这是一个方便的工具。
alt-sysrq-t
"神奇的 sysrq 键"。主要用于跟踪那些在内核中神秘地卡在 'D' 状态的进程,即挂在系统调用中,因为它会输出系统中所有进程的内核堆栈的堆栈跟踪。主要用于在尝试弄清楚 Pg 是否因内核错误、硬件问题、文件系统错误等而出现问题时使用。
必须使用 'sysctl -w kernel.sysrq=1' 启用它,然后才能使用它。
DTrace
请查看单独的DTrace 页面。
Windows 工具
dbForge Studio for PostgreSQL
Query Profiler functionality helps trace, recreate, and troubleshoot problems in PostgreSQL Server. With the tool, you can quickly and easily identify productivity bottlenecks and thus boost your database performance.
Process Monitor
Process Explorer
FileMon
以 PostgreSQL 为中心的性能工具
pgBadger
pgBadger 是一款用于速度的 PostgreSQL 日志分析器,可以从您的 PostgreSQL 日志文件中生成详细的报告。
PoWA
PoWA(PostgreSQL 工作负载分析器)是一款用于 PostgreSQL 的性能工具,允许您从各种统计扩展(pg_stat_statements、pg_qualstats、pg_stat_kcache、pg_wait_sampling)中收集、聚合和清除多个 PostgreSQL 实例的统计信息。
网络工具
Explain Depesz
粘贴您的 explain analyze 计划,并查看输出。您可以单击列标题,让它知道哪个参数对您最重要 - 独占节点时间、包含节点时间或行数估计错误。
Postgres EXPLAIN 可视化工具 (Pev)
Pev 旨在使 Postgres 查询计划更容易理解。它将计划显示为一棵树,每个节点代表一个步骤,该步骤接收一个行集并生成另一个行集。
Postgres EXPLAIN 可视化工具 2 (Pev2)
该项目是对出色的 Postgres Explain Visualizer (pev) 的重写。
pev 项目最初编写于 2016 年初,但似乎已被放弃。尽管有几个问题未解决,相关的 pull requests 也在等待处理,但项目已超过 4 年没有任何活动。
当前项目有几个目标
- 隔离平面视图组件及其依赖项,以便在任何 Web 应用程序中使用它,例如能够加载平面图而无需用户进行任何复制粘贴操作,
- 使其适用于最新版本的 JS 框架,
- 将 Bootstrap 升级到最新版本,
- 出于个人喜好使用 VueJS,
- 维护项目以匹配 PostgreSQL 的升级。
https://explain.dalibo.com/ (GitHub 项目在 https://github.com/dalibo/pev2/)
pgMustard
pgMustard 可视化 EXPLAIN 输出,并提供有关如何加快查询速度的提示。
Explain-PostgreSQL
分析来自 PostgreSQL 及其相关数据库(Greenplum、Citus、TimescaleDB 和 Amazon RedShift)的 EXPLAIN 计划。
显示计划和节点详细信息以及可视化效果(饼图、流程图和瓦片地图),并提供智能建议来改进查询。个人使用免费。
https://explain-postgresql.com
页面最初由 --Ringerc 2009 年 11 月 26 日 07:26 (UTC) 创建