PG插件之auto_explain记录慢查询执行计划

0    183    1

👉 本文共约1392个字,系统预计阅读时间或需6分钟。

简介

auto_explain模块提供了一种自动记录慢语句执行计划的方法,而不必手动运行EXPLAIN。这对于在大型应用程序中跟踪未优化的查询特别有帮助。

该模块不提供sql可访问的函数。要使用它,只需将它加载到服务器。你可以将它加载到一个单独的会话中:

如果想在全局开启该功能,可以在配置文件postgres.conf文件中通过session_preload_libraries或shared_preload_libraries进行配置。不过会有一定开销产生。

比如:

安装

auto_explain相关参数

有几个配置参数用来控制auto_explain的行为。注意默认行为是什么也不做,因此如果你想要任何结果就必须至少设置auto_explain.log_min_duration

auto_explain.log_min_duration

log_min_duration是导致记录语句执行计划的最小的执行时间(以毫秒为单位)。如果设置为0,会记录所有的执行计划。默认值是-1,即不记录。比如,如果设置为250ms,即记录运行时间超过250ms的语句的执行计划(包含250ms)

auto_explain.log_analyze

布尔类型的值。如果设置为true,在记录的执行计划的时候,输出的内容是explain analyze的结果,而不是explain的结果。默认值是off。开启后对性会有影响,

auto_explain.log_buffers

布尔类型的值。控制是否统计在执行计划中,对buffer的使用统计信息。等价于explain buffers。默认是off的。该选项只有在开启了auto_explain.log_analyze后才有效。

auto_explain.log_timing

布尔类型的值。控制执行计划中是否统计每个节点的时间信息。等价于explain timing。在有些系统中,重复地读取系统锁信息会降低查询性能。一般不建议开启。要想生效,必须先开启auto_explain.log_analyze。默认设置是on。

auto_explain.log_triggers

布尔类型的值。在记录执行计划时包含触发器执行统计信息。这个参数没有作用,除非auto_explain.log_analyze被启用。该参数默认关闭。只有超级用户才能更改此设置。

auto_explain.log_verbose

布尔类型的值。控制在记录执行计划时是否打印详细信息;它相当于冗长的EXPLAIN VERBOSE选项。该参数默认关闭。只有超级用户才能更改此设置。

本人提供Oracle、MySQL、PG等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!

auto_explain.log_format

枚举类型。定义explain的输出格式。支持的格式有:text、xml、json、yaml。默认是text。

auto_explain.log_nested_statements

布尔类型的值。考虑对嵌套语句(在函数中执行的语句)进行日志记录。当它关闭时,只记录顶级查询计划。该参数默认关闭。只有超级用户才能更改此设置。

auto_explain.sample_rate

real类型的值。只解释每个会话中的一小部分语句。默认值是1,表示解释所有查询。在嵌套语句的情况下,要么全部解释,要么全部不解释。只有超级用户才能更改此设置。

使用示例

在日志中就可以看到以下执行计划内容:

如果你不想看日志这么麻烦,想在client直接显示,也很方便,设置client_min_messages='log'就可以看到auto explain的输出了。

参考

http://www.postgres.cn/docs/13/auto-explain.html

    头像

    小麦苗

    学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

    您可能还喜欢...

    发表评论

    您的电子邮箱地址不会被公开。

    20 − 4 =

     

    嘿,我是小麦,需要帮助随时找我哦
    • 18509239930
    • 个人微信

    • 麦老师QQ聊天
    • 个人邮箱
    • 点击加入QQ群
    • 个人微店

    • 回到顶部
    返回顶部