I 如何发现 PostgreSQL 和 中那些消耗 CPU

  • 电脑网络维修
  • 2024-11-15

装置

要求

pg_stat_kcache以一个裁减的方式提供,允许 PostgreSQL 9.4 或更高版本,并且须要曾经装置好 pg_stat_statements 裁减。须要 PostgreSQL 9.4 或更高版本,由于以前版本提供的 pg_stat_statements 没有提供 queryid 字段。

从 PGDG 软件仓库

假设您从 PGDG 软件仓库(Debian/Ubuntu <上的 APT 或 RHEL/Rocky <上的 YUM)装置了 PostgreSQL,那么介绍的装置方法是从相反的软件仓库去失掉它。

关于 Debian/Ubuntu:

apt install postgresqlXYpgstatkcache

和 RHEL/Rocky:

yum install pg_stat_kcacheXY

或许对 PostgreSQL 11 及更高版本:

yum install pg_stat_kcache_XY

(其中 XY 是您的 PostgreSQL 主版本编号)

编译

该模块可以经常使用规范的 PGXS 机制来构建。为此,pg_config程序必定在您的$PATH性能中可用。装置步骤如下:

git clone https:cd pg_stat_kcachemakemake install

PostgreSQL 设置

如今可以经常使用该裁减了。然而,由于它须要一些共享内存来保留其计数器,因此必定在 PostgreSQL 启动时加载该模块。因此,您必定在postgresql.conf中将模块增加到shared_preload_libraries。您须要从新启动主机,能力运行性能更改。由于此裁减须要依赖 pg_stat_statements,因此还须要将其增加到shared_preload_libraries。

将以下参数增加到您的postgresql.conf中:

shared_preload_libraries  

从新启动 PostgreSQL 实例后,您可以在须要访问统计信息的每个数据库中装置该裁减:

性能

可以在postgresql.conf中,性能以下 GUC 参数:

•pg_stat_kcache.linux_hz(整型,自动值 -1):告知pg_stat_kcache在 linux 中的 CONFIG_HZ 性能选项值。这用于pg_stat_kcache补救采样误差。自动值为 -1,尝试在启动时猜想它。

•pg_stat_kcache.track(枚举型,自动 top):控制pg_stat_kcache跟踪哪些语句。指定 top 以跟踪顶层语句(由客户端间接纳回的语句),指定 all 以跟踪包含嵌套语句在内的一切语句(例如在函数中调用的语句),或指定 none 以禁用语句统计信息搜集。

•pg_stat_kcache.track_planning(布尔型,自动 off):控制pg_stat_kcache能否跟踪布局的操作和继续期间(须要 PostgreSQL 13 或更高版本)。

用法

pg_stat_kcache会创立多个对象。

pg_stat_kcache 视图

称号

类型

形容

datname

name

数据库的称号

plan_user_time

double precision

在此数据库中布局语句时经常使用的用户层 CPU 期间(以秒和毫秒为单位)(须要启用 pg_stat_kcache.track_planning,否则为零)

plan_system_time

double precision

在此数据库中布局语句时经常使用的系统层 CPU 期间(以秒和毫秒为单位)(须要启用 pg_stat_kcache.track_planning,否则为零)

plan_minflts

bigint

在此数据库中布局语句时出现的页面回收(软页面失误)次数(须要启用 pg_stat_kcache.track_planning,否则为零)

plan_majflts

bigint

在此数据库中布局语句时出现的页面失误(硬页面失误)次数(须要启用 pg_stat_kcache.track_planning,否则为零)

plan_nswaps

bigint

在此数据库中布局语句时出现的换入换出次数(须要启用 pg_stat_kcache.track_planning,否则为零)

plan_reads

bigint

在此数据库中布局语句时由文件系统层读取的字节数(须要启用 pg_stat_kcache.track_planning,否则为零)

plan_reads_blks

bigint

在此数据库中布局语句时由文件系统层读取的 8K 块数(须要启用 pg_stat_kcache.track_planning,否则为零)

plan_writes

bigint

在此数据库中布局语句时由文件系统层写入的字节数(须要启用 pg_stat_kcache.track_planning,否则为零)

plan_writes_blks

bigint

在此数据库中布局语句时由文件系统层写入的 8K 块数(须要启用 pg_stat_kcache.track_planning,否则为零)

plan_msgsnds

bigint

在此数据库中布局语句时发送的 IPC 信息数(须要启用 pg_stat_kcache.track_planning,否则为零)

plan_msgrcvs

bigint

在此数据库中布局语句时收到的 IPC 信息数(须要启用 pg_stat_kcache.track_planning,否则为零)

plan_nsignals

bigint

在此数据库中布局语句时接纳的信号数(须要启用 pg_stat_kcache.track_planning,否则为零)

plan_nvcsws

bigint

在此数据库中布局语句时主动出现的高低文切换次数(须要启用 pg_stat_kcache.track_planning,否则为零)

plan_nivcsws

bigint

在此数据库中布局语句时主动出现的高低文切换次数(须要启用 pg_stat_kcache.track_planning,否则为零)

exec_user_time

double precision

在此数据库中口头语句时所用的用户层 CPU 期间(以秒和毫秒为单位)

exec_system_time

double precision

在此数据库中口头语句时所用的系统层 CPU 期间(以秒和毫秒为单位)

exec_minflts

bigint

在此数据库中口头语句时出现的页面回收(软页面失误)次数

exec_majflts

bigint

在此数据库中口头语句时出现的页面失误(硬页面失误)次数

exec_nswaps

bigint

在此数据库中口头语句时出现的换入换出次数

exec_reads

bigint

在此数据库中口头语句时由文件系统层读取的字节数

exec_reads_blks

bigint

在此数据库中口头语句时由文件系统层读取的 8K 块数

exec_writes

bigint

在此数据库中口头语句时由文件系统层写入的字节数

exec_writes_blks

bigint

在此数据库中口头语句时由文件系统层写入的 8K 块数

exec_msgsnds

bigint

在此数据库中口头语句时发送的 IPC 信息数

exec_msgrcvs

bigint

在此数据库中口头语句时收到的 IPC 信息数

exec_nsignals

bigint

在此数据库中口头语句时接纳的信号数

exec_nvcsws

bigint

在此数据库中口头语句时主动出现的高低文切换次数

exec_nivcsws

bigint

在此数据库中口头语句时主动出现的高低文切换次数

pg_stat_kcache_detail 视图

称号

类型

形容

query

text

查问文本

top

bool

假设语句是顶层的,则为 True

datname

name

数据库的称号

rolname

name

角色称号

plan_user_time

double precision

在此数据库中布局语句时经常使用的用户层 CPU 期间(以秒和毫秒为单位)(须要启用 pg_stat_kcache.track_planning,否则为零)

plan_system_time

double precision

在此数据库中布局语句时经常使用的系统层 CPU 期间(以秒和毫秒为单位)(须要启用 pg_stat_kcache.track_planning,否则为零)

plan_minflts

bigint

在此数据库中布局语句时出现的页面回收(软页面失误)次数(须要启用 pg_stat_kcache.track_planning,否则为零)

plan_majflts

bigint

在此数据库中布局语句时出现的页面失误(硬页面失误)次数(须要启用 pg_stat_kcache.track_planning,否则为零)

plan_nswaps

bigint

在此数据库中布局语句时出现的换入换出次数(须要启用 pg_stat_kcache.track_planning,否则为零)

plan_reads

bigint

在此数据库中布局语句时由文件系统层读取的字节数(须要启用 pg_stat_kcache.track_planning,否则为零)

plan_reads_blks

bigint

在此数据库中布局语句时由文件系统层读取的 8K 块数(须要启用 pg_stat_kcache.track_planning,否则为零)

plan_writes

bigint

在此数据库中布局语句时由文件系统层写入的字节数(须要启用 pg_stat_kcache.track_planning,否则为零)

plan_writes_blks

bigint

在此数据库中布局语句时由文件系统层写入的 8K 块数(须要启用 pg_stat_kcache.track_planning,否则为零)

plan_msgsnds

bigint

在此数据库中布局语句时发送的 IPC 信息数(须要启用 pg_stat_kcache.track_planning,否则为零)

plan_msgrcvs

bigint

在此数据库中布局语句时收到的 IPC 信息数(须要启用 pg_stat_kcache.track_planning,否则为零)

plan_nsignals

bigint

在此数据库中布局语句时接纳的信号数(须要启用 pg_stat_kcache.track_planning,否则为零)

plan_nvcsws

bigint

在此数据库中布局语句时主动出现的高低文切换次数(须要启用 pg_stat_kcache.track_planning,否则为零)

plan_nivcsws

bigint

在此数据库中布局语句时主动出现的高低文切换次数(须要启用 pg_stat_kcache.track_planning,否则为零)

exec_user_time

double precision

在此数据库中口头语句时所用的用户层 CPU 期间(以秒和毫秒为单位)

exec_system_time

double precision

在此数据库中口头语句时所用的系统层 CPU 期间(以秒和毫秒为单位)

exec_minflts

bigint

在此数据库中口头语句时出现的页面回收(软页面失误)次数

exec_majflts

bigint

在此数据库中口头语句时出现的页面失误(硬页面失误)次数

exec_nswaps

bigint

在此数据库中口头语句时出现的换入换出次数

exec_reads

bigint

在此数据库中口头语句时由文件系统层读取的字节数

exec_reads_blks

bigint

在此数据库中口头语句时由文件系统层读取的 8K 块数

exec_writes

bigint

在此数据库中口头语句时由文件系统层写入的字节数

exec_writes_blks

bigint

在此数据库中口头语句时由文件系统层写入的 8K 块数

exec_msgsnds

bigint

在此数据库中口头语句时发送的 IPC 信息数

exec_msgrcvs

bigint

在此数据库中口头语句时收到的 IPC 信息数

exec_nsignals

bigint

在此数据库中口头语句时接纳的信号数

exec_nvcsws

bigint

在此数据库中口头语句时主动出现的高低文切换次数

exec_nivcsws

bigint

在此数据库中口头语句时主动出现的高低文切换次数

pg_stat_kcache_reset 函数

重置 pg_stat_kcache 搜集的统计信息。可以由超级用户调用:

pg_stat_kcache_reset

pg_stat_kcache 函数

此函数是一个汇合前往函数,用于输入共享内存结构中计数器的内容。pg_stat_kcache 视图会经常使用此函数。该函数可以被任何用户调用:

   pg_stat_kcache

它提供以下列:

称号

类型

形容

queryid

bigint

pg_stat_statements 中的查问标识符

top

bool

假设语句是顶层的,则为 True

userid

oid

用户 OID

dbid

oid

数据库 OID

plan_user_time

double precision

在此数据库中布局语句时经常使用的用户层 CPU 期间(以秒和毫秒为单位)(须要启用 pg_stat_kcache.track_planning,否则为零)

plan_system_time

double precision

在此数据库中布局语句时经常使用的系统层 CPU 期间(以秒和毫秒为单位)(须要启用 pg_stat_kcache.track_planning,否则为零)

plan_minflts

bigint

在此数据库中布局语句时出现的页面回收(软页面失误)次数(须要启用 pg_stat_kcache.track_planning,否则为零)

plan_majflts

bigint

在此数据库中布局语句时出现的页面失误(硬页面失误)次数(须要启用 pg_stat_kcache.track_planning,否则为零)

plan_nswaps

bigint

在此数据库中布局语句时出现的换入换出次数(须要启用 pg_stat_kcache.track_planning,否则为零)

plan_reads

bigint

在此数据库中布局语句时由文件系统层读取的字节数(须要启用 pg_stat_kcache.track_planning,否则为零)

plan_reads_blks

bigint

在此数据库中布局语句时由文件系统层读取的 8K 块数(须要启用 pg_stat_kcache.track_planning,否则为零)

plan_writes

bigint

在此数据库中布局语句时由文件系统层写入的字节数(须要启用 pg_stat_kcache.track_planning,否则为零)

plan_writes_blks

bigint

在此数据库中布局语句时由文件系统层写入的 8K 块数(须要启用 pg_stat_kcache.track_planning,否则为零)

plan_msgsnds

bigint

在此数据库中布局语句时发送的 IPC 信息数(须要启用 pg_stat_kcache.track_planning,否则为零)

plan_msgrcvs

bigint

在此数据库中布局语句时收到的 IPC 信息数(须要启用 pg_stat_kcache.track_planning,否则为零)

plan_nsignals

bigint

在此数据库中布局语句时接纳的信号数(须要启用 pg_stat_kcache.track_planning,否则为零)

plan_nvcsws

bigint

在此数据库中布局语句时主动出现的高低文切换次数(须要启用 pg_stat_kcache.track_planning,否则为零)

plan_nivcsws

bigint

在此数据库中布局语句时主动出现的高低文切换次数(须要启用 pg_stat_kcache.track_planning,否则为零)

exec_user_time

double precision

在此数据库中口头语句时所用的用户层 CPU 期间(以秒和毫秒为单位)

exec_system_time

double precision

在此数据库中口头语句时所用的系统层 CPU 期间(以秒和毫秒为单位)

exec_minflts

bigint

在此数据库中口头语句时出现的页面回收(软页面失误)次数

exec_majflts

bigint

在此数据库中口头语句时出现的页面失误(硬页面失误)次数

exec_nswaps

bigint

在此数据库中口头语句时出现的换入换出次数

exec_reads

bigint

在此数据库中口头语句时由文件系统层读取的字节数

exec_reads_blks

bigint

在此数据库中口头语句时由文件系统层读取的 8K 块数

exec_writes

bigint

在此数据库中口头语句时由文件系统层写入的字节数

exec_writes_blks

bigint

在此数据库中口头语句时由文件系统层写入的 8K 块数

exec_msgsnds

bigint

在此数据库中口头语句时发送的 IPC 信息数

exec_msgrcvs

bigint

在此数据库中口头语句时收到的 IPC 信息数

exec_nsignals

bigint

在此数据库中口头语句时接纳的信号数

exec_nvcsws

bigint

在此数据库中口头语句时主动出现的高低文切换次数

exec_nivcsws

bigint

在此数据库中口头语句时主动出现的高低文切换次数

降级裁减

请留意,除 SQL 对象外,其余更改都须要从新启动 PostgreSQL。无论裁减能否降级,重启成功后,大少数新代码都会被启用,由于裁减只担任在 SQL 中地下外部数据结构。

另请留意,当汇合前往函数的字段出现变动时,须要从新启动 PostgreSQL 能力加载新版本的裁减。在从新启动成功之前,降级裁减将失败,并显示相似以下内容的信息:

could  find     pg_stat_kcacheso

Bug 和限度

没有发现已知的失误。

跟踪布局器资源经常使用状况须要 PostgreSQL 13 或更高版本。

咱们会假设一个内核块的大小是 512 字节。关于 Linux 来说,状况确实如此,但关于另一些 Unix 系统来说,状况或许并非如此。

请参见:

在没有提供原生的 getrusage(2) 的平台上,除了 user_time 和 system_time 之外的一切字段都将为 NULL。

在提供了原生的 getrusage(2) 的平台上,某些字段或许没有保养。这是一个依赖于系统平台的行为,请参考你的系统中 getrusage(2) 手册页来了解更多细节。

假设pg_stat_kcache.track是 all,则 pg_stat_kcache 会跟踪嵌套语句。为了坚持成功的便捷,跟踪的嵌套级别的最大层级数限度为 64,但这关于正当的场景来说应该足够了。

即使pg_stat_kcache.track是 all,pg_stat_kcache 视图也只会输入顶层语句的统计信息。因此,有一种状况是,即使在布局一条嵌套语句时经常使用的用户层 CPU 期间很高,pg_stat_kcache 视图的 plan_user_time 还是很小。在这种状况下,布局一条嵌套语句时经常使用的用户层 CPU 期间会计入到 exec_user_time。

  • 关注微信

本网站的文章部分内容可能来源于网络和网友发布,仅供大家学习与参考,如有侵权,请联系站长进行删除处理,不代表本网站立场,转载联系作者并注明出处:https://duobeib.com/diannaowangluoweixiu/8831.html

猜你喜欢

热门标签

洗手盆如何疏浚梗塞 洗手盆为何梗塞 iPhone提价霸占4G市场等于原价8折 明码箱怎样设置明码锁 苏泊尔电饭锅保修多久 长城画龙G8253YN彩电输入指令画面变暗疑问检修 彩星彩电解除童锁方法大全 三星笔记本培修点上海 液晶显示器花屏培修视频 燃气热水器不热水要素 热水器不上班经常出现3种处置方法 无氟空调跟有氟空调有什么区别 norltz燃气热水器售后电话 大连站和大连北站哪个离周水子机场近 热水器显示屏亮显示温度不加热 铁猫牌保险箱高效开锁技巧 科技助力安保无忧 创维8R80 汽修 a1265和c3182是什么管 为什么电热水器不能即热 标致空调为什么不冷 神舟培修笔记本培修 dell1420内存更新 青岛自来水公司培修热线电话 包头美的洗衣机全国各市售后服务预定热线号码2024年修缮点降级 创维42k08rd更新 空调为什么运转异响 热水器为何会漏水 该如何处置 什么是可以自己处置的 重庆华帝售后电话 波轮洗衣机荡涤价格 鼎新热水器 留意了!不是水平疑问! 马桶产生了这5个现象 方便 极速 邢台空调移机电话上门服务 扬子空调缺点代码e4是什么疑问 宏基4736zG可以装置W11吗 奥克斯空调培修官方 为什么突然空调滴水很多 乐视s40air刷机包 未联络视的提高方向 官网培修 格力空调售后电话 皇明太阳能电话 看尚X55液晶电视进入工厂形式和软件更新方法 燃气热水器缺点代码

热门资讯

关注我们

微信公众号