KingbaseES数据库提供了插件auto_explain,用于在日志中自动记录慢速语句的执行计划。

相比于explain与对象管理工具,auto_explain对于在大型应用程序中跟踪未优化的查询特别有帮助,或者发现手动explain的计划与实际执行时计划存在差异的情况。

根据作用范围不同,auto_explain有以下两种方式:

  • 作用于当前会话

    LOAD'auto_explain';(必须是超级用户才能这样做)

  • 作用于全局

    在kingbase.conf中 将 ‘auto_explain’ 添加入 shared_preload_libraries参数中,可将其预加载到所有会话中。这样做会带来额外的性能开销。

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

  • auto_explain.log_min_duration

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

  • auto_explain.log_analyze

    该参数控制是否加入analyze功能,即除了计划外把实际执行时间等信息也打出来,注意该参数打开后会对性能产生较大影响,默认值为off

  • auto_explain.log_settings

    该参数控制是否打印已修改的配置选项的信息,输出中仅包含影响执行计划的配置选项,默认值为off

  • auto_explain.log_verbose

    该参数控制是否在执行计划中打印更为详细的输出信息,默认值为off

  • auto_explain.log_buffers

    该参数控制是否在执行计划中打印缓冲区使用的信息,默认值为off

  • auto_explain.log_wal

    该参数控制是否打印WAL日志的信息,默认值为off

  • auto_explain.log_triggers

    该参数控制是否打印触发器的统计信息,注意只有当auto_explain.log_analyze参数开启时,该参数才有效,默认值为off

  • auto_explain.log_format

    该参数用于控制执行计划的输出格式,可以是text、xml、json、yaml,默认值为text

  • auto_explain.log_level

    该参数用于控制auto_explain插件的日志级别,其值同服务器的日志级别相同,默认值为LOG

  • auto_explain.log_nested_statements

    该参数用于控制是否支持嵌套语句(在一个函数内执行的语句)的执行计划输出,当它关闭时,只记录顶层语句的计划,默认值为off

  • auto_explain.log_timing

    该参数用于控制是否打印计划中每个节点的计时信息,注意只有当auto_explain.log_analyze参数开启时,该参数才有效,默认值为off

  • auto_explain.sample_rate

    该参数用于控制打印会话中语句计划的比例,默认值为1,表示输出所有语句的计划

普通用户使用load方式调用会报错:
test=> LOAD'auto_explain';
错误: 不允许对库 "auto_explain"进行访问
切换为超级用户
test=# LOAD'auto_explain';
LOAD
test=# SET auto_explain.log_min_duration = 0;
SET
test=# SET auto_explain.log_analyze = true;
SET
test=#
test=# select * from sys_class where relnamespace = 2200; 查询日志,可以在日志中看到对应的执行计划:
日志: duration: 0.279 ms plan:
Query Text: select * from sys_class where relnamespace = 2200;
Seq Scan on pg_class (cost=0.00..39.45 rows=1 width=264) (actual time=0.033..0.198 rows=11 loops=1)
Filter: (relnamespace = '2200'::oid)
Rows Removed by Filter: 761 如果想在client直接显示,设置client_min_messages='log'就可以看到auto explain的输出了。
test=# set client_min_messages='log';
SET
test=# select * from sys_class where relnamespace = 11;
日志: duration: 1.565 ms plan:
Query Text: select * from sys_class where relnamespace = 11;
Seq Scan on pg_class (cost=0.00..39.45 rows=330 width=264) (actual time=0.013..0.164 rows=330 loops=1)
Filter: (relnamespace = '11'::oid)
Rows Removed by Filter: 442

KingbaseES 如何在日志文件记录查询执行计划的更多相关文章

  1. MySQL的EXPLAIN命令用于SQL语句的查询执行计划

    MySQL的EXPLAIN命令用于SQL语句的查询执行计划(QEP).这条命令的输出结果能够让我们了解MySQL 优化器是如何执行SQL 语句的.这条命令并没有提供任何调整建议,但它能够提供重要的信息 ...

  2. PLSQL查询执行计划

    转: PLSQL查询执行计划 01(转) 2019-05-15 15:15:43 p享自由q 阅读数 365   一般优化途径: 如果能通过修改语句优化,比如查询条件或执行顺序,sql改不了,可以通过 ...

  3. SQL Server-聚焦使用索引和查询执行计划(五)

    前言 上一篇我们讲了聚集索引对非聚集索引的影响,对数据库一直在强调的性能优化,所以这一节我们统筹讲讲利用索引来看看查询执行计划是怎样的,简短的内容,深入的理解,Always to review the ...

  4. SQLServer查询执行计划分析 - 案例

    SQLServer查询执行计划分析 - 案例 http://pan.baidu.com/s/1pJ0gLjP 包括学习笔记.书.样例库

  5. SQL Server-聚焦使用索引和查询执行计划

    前言 上一篇我们讲了聚集索引对非聚集索引的影响,对数据库一直在强调的性能优化,所以这一节我们统筹讲讲利用索引来看看查询执行计划是怎样的,简短的内容,深入的理解,Always to review the ...

  6. oracle -- 查询执行计划,判读查询语句优劣

    以oracle的scott账户:找到员工表中薪水大于本部门平均薪水的员工为例 多表查询方式: select e.empno, e.ename, e.sal, d.avgsal from emp e, ...

  7. MySQL开启日志记录查询/执行过的SQL语句

    作为后端开发者,遇到数据库问题的时候应该通过分析SQL语句来跟进问题所在,该方法可以记录所有的查询/执行的SQL语句到日志文件. 方法有几种,但是个人觉得以下这种最简单,但是重启MySQL服务后需要重 ...

  8. MySQL慢查询&执行计划

    参考文章: https://blog.csdn.net/tiantianw/article/details/53334566 http://www.cnblogs.com/luyucheng/p/62 ...

  9. 如何使用SQLPLUS分析SQL语句(查询执行计划跟踪)

    方法一:autotrace 1,  connect sys/密码 as sysdba,在sys用户下运行$ORACLE_HOME/sqlplus/admin/plustrce.sql这段sql的实际内 ...

  10. MySQL EXPLAIN 命令: 查看查询执行计划

    MySQL 的 EXPLAIN 命令可以查看SELECT语句的执行的计划,是 MySQL 查询优化的必备工具. 通过执行计划可以了解查询方式.索引使用情况.需要扫描的数据量以及是否需要临时表或排序操作 ...

随机推荐

  1. Jsp+Servlet实现文件上传下载(二)--文件列表展示

    接着上一篇讲: Jsp+Servlet实现文件上传下载(一)--文件上传 点击打开链接 本章来实现一下上传文件列表展示,同时优化了一下第一章中的代码. 废话少说,上代码 --------------- ...

  2. F - Subarrays题解

    F - Subarrays 题意:给你一个序列,问这个序列里有多少个子串的和能被k整除. 思路:求前缀和,然后每个位置对k取模,模数相等的位置之间,是一个满足条件的字串. 因为求的是前缀和,所以取模后 ...

  3. Caused by: com.alibaba.druid.pool.DataSourceClosedException: dataSource already closed

    报错场景:spring boot+mybatis,线程池执行批量任务.springboot正常启动后,定时任务中数据库查询报错.报错信息如下: 1 Caused by: org.apache.ibat ...

  4. Qt三方库开发技术(一):QuaZIP介绍、编译和使用

    前言   Qt使用一些压缩解压功能,探讨过libzip库,zlib库,libzip库比较原始,还有其他库,都比较基础,而在基础库之上,又有高级封装库,Qt中的QuaZIP是一个很好的选择.  本文主要 ...

  5. 如何渲染最原始的yuv视频数据?

    一.整体思路 我们在用纹理增加细节那篇文章中提到过,要将图片渲染在屏幕上,首先要拿到图片的像素数组数据,然后将像素数组数据通过纹理单元传递到片段着色器中,最后通过纹理采样函数将纹理中对应坐标的颜色值采 ...

  6. mongodb(2022)

    了解 文档数据库MongoDB用于记录文档结构的数据,如JSON.XML结构的数据.一条文档就是一条记录(含数据和数据结构),一条记录里可以包含若干个键值对.键值对由键和值两部分组成,键又叫做字段.键 ...

  7. 【LeetCode剑指offer#04】包含min函数的栈、栈的压入、弹出序列(辅助栈的应用)

    包含min函数的栈 https://leetcode.cn/problems/bao-han-minhan-shu-de-zhan-lcof/ 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元 ...

  8. 【Azure 应用服务】Python fastapi Function在Azure中遇见AttributeError异常(AttributeError: 'AsgiMiddleware' object has no attribute 'handle_async')

    问题描述 参考文档"Using FastAPI Framework with Azure Functions", 使用FastAPI 模块在Function中实现API请求.通过V ...

  9. MongoDB可视化compass 连接数据库失败Invalid UTF-8 string in BSON document

    An error occurred while loading navigation: Invalid UTF-8 string in BSON document 出现这个问题建议降低compass版 ...

  10. XAF新手入门 - 视图布局示例

    前言 掌握了应用程序模型(ApplicationModel)的基础知识之后,通过一个视图布局示例来加强对应用程序模型的理解. 官网给出了比较丰富的示例,并且这些示例涵盖了应用程序模型操作的方方面面,通 ...