PostgreSQL 嘿,最近的语句有没有慢的,你怎么回答?

本文详细介绍PostgreSQL中如何使用pg_stat_statements插件监测和优化慢查询,包括配置、字段解析及常见查询语句,为数据库性能调优提供实用技巧。

作为一个DB,估计被统计出来的被问及的问题中,语句有没有慢的这句话,估计可以上榜 TOP 10, 而如何回答这个问题,每种数据库有每种数据不同的方法,例如MONGODB 可以通过profile慢查询收集器来解决。

而SQL SERVER 可以通过DMV ,以及XEVENT 来解决,MYSQL 可以通过SLOW LOG 以及 preformance_schema 中的VIEW 来解决。

那么POSTGRESQL 到底怎么来解决,好来回答问你问题的人

1  通过日志记录慢语句的方式

2  通过今天要说的 pg_stat_statements,通过这个东西来“掷地有声”回答提问题的人。

首先 pg_stat_statments 是一个插件,从哪里来的插件citus ,citus 是什么,Micorsoft 家的,对没错,微软收购了一个 POSTGRESQL 的商业数据库尝试,并且是目前分布式数据库插件的发布者。所以.......  微软也是很有眼光的,STOP (找一期说说 PG 的 历史以及与 各种数据库之间的纠葛)

既然pg_stat_statments 是一个插件,那就自然会牵扯怎么进行插入的过程,插入的过程比一般的插件稍微费点劲,需要在这个位置上来声明一下

为啥要声明,因为要单独使用一块内存来进行处理,所以一般在这个位置进行声明的都是要使用一部分内存的东东。

后面就直接进行扩展即可

我们看看这个 pg_stat_statements 到底有多少字段,我们有应该关注那些字段

不用说,需要关注的字段,userid 那个用户执行的, DBID,在那个数据库下执行的,query 到底是什么语句,calls 到底执行了几次, total_time 到底执行了几次, min_time 最小一次多少时间, max_time 最大一次多少时间,row 返回了多少行,这些是最基本的信息。

当然还有和本地缓冲以及数据库缓冲有关的命中的字段,等等

默认的情况下PG 会保存 5000条语句,并且先进先出的方式,当然这5000 语句也是有讲究的

1 同样queryid 算一条语句

2  不同session 发出的语句,如果语句相同(使用临时表),也算不同语句

3  查询语句相同,但使用的操作用户,或者查询的数据库不同,也单独来算

当然如果想不和默认的设置一样,那就需要在postgresql.conf 中在添加一些设置

下面这三个设置可以加入到系统的配置文件当中,例如增加记录的语句数量,增加根据SQL 的范围,以及增加这些记录在重启时是否保存

pg_stat_statements.max = 20000

pg_stat_statements.track = all

pg_stat_statements.save = on

那到底怎么来查看这些语句呢,例如我们查看

1  select queryid, dbid, query from pg_stat_statements order by (blk_read_time+blk_write_time)/calls desc limit 10;  

 查询当前耗费I/O 最多的10条语句

2 当前最慢的 5条语句

3 当前最耗费内存的3条语句

select queryid, dbid, query from pg_stat_statements order by (shared_blks_hit+shared_blks_dirtied) desc limit 3;  

当然如果你要对之前的慢日志记录不满意还可以进行清理

select pg_stat_statements_reset();

当然上边的一些语句仅仅是简单的,如果想自己做出一个语句的历史同期耗时的分析表,动动脑筋也是可以自己来搞一把的。

如果把上面的语句定期的导入到一个数据表中,并且每天都导入,根据,queryid 来进行数据的比对,(这点和MYSQL 中的PT工具导出慢查询到数据表的功能类似),通过不同的时间,同样的queryid 以及相关的时间,就可以画出一个曲线图,来标明每个语句的在不同时间段的执行的时间差异。

(注 SQL SERVER 在2016 增加了 QUERY  Store)也有类似的功能但都是图形界面

所以,如何来回答最近语句有没有慢的这句话,大家心里都有点数了吧,然后,我们需要跟上, 这句慢 ,改去 。

Delphi 12.3 作为一款面向 Windows 平台的集成开发环境,由 Embarcadero Technologies 负责其持续演进。该环境以 Object Pascal 语言为核心,并依托 Visual Component Library(VCL)框架,广泛应用于各类桌面软件、数据库系统及企业级解决方案的开发。在此生态中,Excel4Delphi 作为一个重要的社区开源项目,致力于搭建 Delphi 与 Microsoft Excel 之间的高效桥梁,使开发者能够在自研程序中直接调用 Excel 的文档处理、工作表管理、单元格操作及宏执行等功能。 该项目以库文件与组件包的形式提供,开发者将其集成至 Delphi 工程后,即可通过封装良好的接口实现对 Excel 的编程控制。具体功能涵盖创建与编辑工作簿、格式化单元格、批量导入导出数据,乃至执行内置公式与宏指令等高级操作。这一机制显著降低了在财务分析、报表自动生成、数据整理等场景中实现 Excel 功能集成的技术门槛,使开发者无需深入掌握 COM 编程或 Excel 底层 API 即可完成复杂任务。 使用 Excel4Delphi 需具备基础的 Delphi 编程知识,并对 Excel 对象模型有一定理解。实践中需注意不同 Excel 版本间的兼容性,并严格遵循项目文档进行环境配置与依赖部署。此外,操作过程中应遵循文件访问的最佳实践,例如确保目标文件未被独占锁定,并实施完整的异常处理机制,以防数据损毁或程序意外中断。 该项目的持续维护依赖于 Delphi 开发者社区的集体贡献,通过定期更新以适配新版开发环境与 Office 套件,并修复已发现的问题。对于需要深度融合 Excel 功能的 Delphi 应用而言,Excel4Delphi 提供了经过充分测试的可靠代码基础,使开发团队能更专注于业务逻辑与用户体验的优化,从而提升整体开发效率与软件质量。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值