KingbaseES 如何在日志文件记录查询执行计划
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功能,即除了计划外把实际执行时间等信息也打出来,注意该参数打开后会对性能产生较大影响,默认值为offauto_explain.log_settings
该参数控制是否打印已修改的配置选项的信息,输出中仅包含影响执行计划的配置选项,默认值为offauto_explain.log_verbose
该参数控制是否在执行计划中打印更为详细的输出信息,默认值为offauto_explain.log_buffers
该参数控制是否在执行计划中打印缓冲区使用的信息,默认值为offauto_explain.log_wal
该参数控制是否打印WAL日志的信息,默认值为offauto_explain.log_triggers
该参数控制是否打印触发器的统计信息,注意只有当auto_explain.log_analyze参数开启时,该参数才有效,默认值为offauto_explain.log_format
该参数用于控制执行计划的输出格式,可以是text、xml、json、yaml,默认值为textauto_explain.log_level
该参数用于控制auto_explain插件的日志级别,其值同服务器的日志级别相同,默认值为LOGauto_explain.log_nested_statements
该参数用于控制是否支持嵌套语句(在一个函数内执行的语句)的执行计划输出,当它关闭时,只记录顶层语句的计划,默认值为offauto_explain.log_timing
该参数用于控制是否打印计划中每个节点的计时信息,注意只有当auto_explain.log_analyze参数开启时,该参数才有效,默认值为offauto_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 如何在日志文件记录查询执行计划的更多相关文章
- MySQL的EXPLAIN命令用于SQL语句的查询执行计划
MySQL的EXPLAIN命令用于SQL语句的查询执行计划(QEP).这条命令的输出结果能够让我们了解MySQL 优化器是如何执行SQL 语句的.这条命令并没有提供任何调整建议,但它能够提供重要的信息 ...
- PLSQL查询执行计划
转: PLSQL查询执行计划 01(转) 2019-05-15 15:15:43 p享自由q 阅读数 365 一般优化途径: 如果能通过修改语句优化,比如查询条件或执行顺序,sql改不了,可以通过 ...
- SQL Server-聚焦使用索引和查询执行计划(五)
前言 上一篇我们讲了聚集索引对非聚集索引的影响,对数据库一直在强调的性能优化,所以这一节我们统筹讲讲利用索引来看看查询执行计划是怎样的,简短的内容,深入的理解,Always to review the ...
- SQLServer查询执行计划分析 - 案例
SQLServer查询执行计划分析 - 案例 http://pan.baidu.com/s/1pJ0gLjP 包括学习笔记.书.样例库
- SQL Server-聚焦使用索引和查询执行计划
前言 上一篇我们讲了聚集索引对非聚集索引的影响,对数据库一直在强调的性能优化,所以这一节我们统筹讲讲利用索引来看看查询执行计划是怎样的,简短的内容,深入的理解,Always to review the ...
- oracle -- 查询执行计划,判读查询语句优劣
以oracle的scott账户:找到员工表中薪水大于本部门平均薪水的员工为例 多表查询方式: select e.empno, e.ename, e.sal, d.avgsal from emp e, ...
- MySQL开启日志记录查询/执行过的SQL语句
作为后端开发者,遇到数据库问题的时候应该通过分析SQL语句来跟进问题所在,该方法可以记录所有的查询/执行的SQL语句到日志文件. 方法有几种,但是个人觉得以下这种最简单,但是重启MySQL服务后需要重 ...
- MySQL慢查询&执行计划
参考文章: https://blog.csdn.net/tiantianw/article/details/53334566 http://www.cnblogs.com/luyucheng/p/62 ...
- 如何使用SQLPLUS分析SQL语句(查询执行计划跟踪)
方法一:autotrace 1, connect sys/密码 as sysdba,在sys用户下运行$ORACLE_HOME/sqlplus/admin/plustrce.sql这段sql的实际内 ...
- MySQL EXPLAIN 命令: 查看查询执行计划
MySQL 的 EXPLAIN 命令可以查看SELECT语句的执行的计划,是 MySQL 查询优化的必备工具. 通过执行计划可以了解查询方式.索引使用情况.需要扫描的数据量以及是否需要临时表或排序操作 ...
随机推荐
- RestTemplate的一些坑和改造点
一.RestTemplate怎么引入和使用 在pom.xml文件中加入如下dependency: <dependency> <groupId>org.springframewo ...
- 深入理解String
深入理解String String是Java中的一个类,是一个引用类型,用于表示字符串.它是不可变的(immutable),即一旦创建,其值就不能被修改.任何对String对象的修改操作都会创建一个新 ...
- pip相关知识
正常安装语法 # 安装单个 pip install some-package # 安装指定版本 pip install some-package==版本号 # 查看当前模块版本号 pip instal ...
- CT图像重建
20世纪70年代中期,在医学领域出现了一种神奇装置,名为"计算机辅助 X 射线断层成像仪"(简称CAT或CT),它能够在不损伤病人的情况下,提供人体从头到脚各部位的断层X射线图像. ...
- PHP四则运算类(支持加、减、乘、除、小中括号)
<?php /** * 四则运算(支持加.减.乘.除.小中括号) * Class calculator */ class calculator { //保留几位小数点 public $point ...
- clickhouse快速上手和问题记录
clickhouse官方中文社区实战经验:手把手教你搭建单机clickhouse开发环境 我是用的是centOS7的虚拟机, 官方教程中的:sudo /etc/init.d/clickhouse-se ...
- 【Azure Power BI】Power BI获取SharePoint List列表后,如何展开List/Table中的字段,以及使用逗号拼接为一个字符串
问题描述 Power BI获取SharePoint List列表作为数据源.但是在数据源中,有Table属性值,有List属性值.如果直接展开,则会形成"笛卡尔"集的效果,变成N多 ...
- 视觉slam十四讲CH5 ---相机与图像
视觉slam十四讲 ---CH5 相机与图像 视觉slam中,作为主要传感器的相机自然起到着重要的作用,而相机拍摄的图像及其处理也是我们要做的工作之一. 1. 相机模型 单目相机的针孔模型 上图中的模 ...
- 玩转Vue3之shallowRef和shallowReactive
前言 Vue3 作为一款现代的 JavaScript 框架,引入了许多新的特性和改进,其中包括 shallowRef 和 shallowReactive.这两个功能在Vue 3中提供了更加灵活和高效的 ...
- Shell脚本自动下载FTP文件上传到S3
1. shell脚本下载 #!/bin/bash #用户名 USER=xxx #密码 PASSWORD=xxx #下载文件临时目录 SRCTDIR=/approveform/uat/tempin #S ...