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 查询优化的必备工具. 通过执行计划可以了解查询方式.索引使用情况.需要扫描的数据量以及是否需要临时表或排序操作 ...
随机推荐
- C++ { } 的使用场景
{} 可以用于初始化 C++11 中的变量,就像它们用于初始化 C 中的数组和结构一样. {} 主要是为了提供语法的一致性(使用 {} 初始化将在所有上下文中都有效,而使用赋值运算符或()初始化将在特 ...
- golang微服务实践:服务注册与服务发现 - Etcd的使用
为什么? 为什么会有服务注册和服务发现?在它以前我们是怎么做的? 举个例子: 比如我们做MySQL读写分离,就在本地配置一个文件,然后程序读取这个配置文件里的数据进行数据库读写分离的设置. 但是随着业 ...
- 解决xshell连不上ubuntu虚拟机
分析 原因:虚拟机未安装ssh服务(Xshell远程连接需通过ssh协议) 解决方法 ubuntu安装ssh服务器 sudo apt-get install openssh-server 后续有问题可 ...
- Flask遇到的坑及解决办法
flask_script 在使用第三方包flask_script时,报一下错误 ModuleNotFoundError: No module named 'flask._compat' 问题时flas ...
- 安装MySql失败( Microsoft Visual C++ 2013 Runtime 64bit)
参考资料:下载之家 提示你缺少什么版本就安装什么版本.64位或者32位. 文件下载地址:下载之家 不知道有没有失效,如果失效的话大家直接去下载之家搜索下载.
- RabbitMQ零碎整理,总有一天在你工作中会用到
概念 MQ:消息队列(消息中间件),开源的基于AMQP协议的消息中间件,异步 解耦 削峰 核心作用:1.异步 2.解耦 3.消息通信 RabbitMQ 消息的类型:1.点对点 2.Worker 3.发 ...
- 图数据库|Nebula Graph v3.1.0 性能报告
本文首发于 Nebula Graph Community 公众号 本文系 Nebula Graph 发行版 v3.1.0 的性能测试报告. 本文目录 测试环境 测试数据 关于 LDBC-SNB 测试说 ...
- 【工具】用nvm管理nodejs版本切换,真香!
前言 缘由 换个nodejs版本比换个媳妇还难,nvm堪称管理nodejs版本神器 事情的起因,公司的一些老项目需要依赖稳定老版本的nodejs,但是自己的一些项目所需要的是更高版本的nodejs,这 ...
- python使用selenium适配谷歌浏览器插件, chromedriver与chrome各版本及下载地址
python selenium使用,需要谷歌chromedriver.exe插件 chromedriver.exe插件是放在python的安装目录下(亲测,其它的都不对) 以下是chromedrive ...
- 使用C#创建服务端Web API
前言 C# Web API 是一种基于 .NET 平台(包括但不限于.NET Framework 和 .NET Core)构建 HTTP 服务的框架,用于创建 RESTful Web 服务.REST( ...