热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

金仓数据库KingbaseES使用plsql_plprofiler分析过程块的执行

目录1、创建扩展插件2、创建演示的存储过程3、收集数据4、分析数据存储过程可能涉及很多的SQL及控制块,我们看到的执行时间是整个过程块的执行时间,

目录

1、创建扩展插件

2、创建演示的存储过程

3、收集数据

4、分析数据


存储过程可能涉及很多的SQL及控制块,我们看到的执行时间是整个过程块的执行时间,如果我们认为性能有问题,只能逐条SQL的分析,查找问题SQL,效率非常低下。

KingbaseES 提供了 plsql_plprofiler 扩展插件, 可以方便用户跟踪分析过程的每条语句的执行情况,能让我们快速定位问题。

以下以例子的方式演示plsql_plprofiler的使用。

1、创建扩展插件

create extension plsql_plprofiler

2、创建演示的存储过程

create or replace procedure p1 ascnt integer;
beginfor i in 1..100 loopselect count(*) into cnt from t1;end loop;select count(*) into cnt from t2;
end;
/

3、收集数据

test=# select pl_profiler_reset_local(); --清理本地数据pl_profiler_reset_local
-------------------------
(1 row)test=# select pl_profiler_reset_shared(); --清理全局数据pl_profiler_reset_shared
--------------------------
(1 row) test=# select pl_profiler_set_enabled_local(true); --启动本地会话分析器pl_profiler_set_enabled_local
-------------------------------t
(1 row)test=# call p1();
CALLtest=# select pl_profiler_set_enabled_local(false); --关闭本地会话分析器pl_profiler_set_enabled_local
-------------------------------f
(1 row)test=# select pl_profiler_collect_data();pl_profiler_collect_data
--------------------------0
(1 row)

4、分析数据

test=# select pl_profiler_func_oids_shared();pl_profiler_func_oids_shared
------------------------------{16485}
(1 row)test=# select func_oid, func_oid::regproc as funcname,line_number, source from pl_profiler_funcs_source(pl_profiler_func_oids_shared());func_oid | funcname | line_number | source
----------+----------+-------------+---------------------------------------16485 | p1 | 0 | -- Line 016485 | p1 | 1 |16485 | p1 | 2 | cnt integer;16485 | p1 | 3 | begin16485 | p1 | 4 | for i in 1..100 loop16485 | p1 | 5 | select count(*) into cnt from t1;16485 | p1 | 6 | end loop;16485 | p1 | 7 | select count(*) into cnt from t2;16485 | p1 | 8 | end
(9 rows)
SELECT L.func_oid::regproc as funcname,L.func_oid as func_oid,L.line_number,sum(L.exec_count)::bigint AS exec_count,sum(L.total_time)::bigint AS total_time,max(L.longest_time)::bigint AS longest_time,S.sourceFROM pl_profiler_linestats_shared() LJOIN pl_profiler_funcs_source(pl_profiler_func_oids_shared) SON S.func_oid = L.func_oid AND S.line_number = L.line_numberGROUP BY L.func_oid, L.line_number, S.sourceORDER BY L.func_oid, L.line_number;
funcname | func_oid | line_number | exec_count | total_time | longest_time | source
----------+----------+-------------+------------+------------+--------------+---------------------------------------p1 | 16485 | 0 | 1 | 1296 | 1296 | -- Line 0p1 | 16485 | 1 | 0 | 0 | 0 |p1 | 16485 | 2 | 0 | 0 | 0 | cnt integer;p1 | 16485 | 3 | 1 | 1294 | 1294 | beginp1 | 16485 | 4 | 1 | 1098 | 1098 | for i in 1..100 loopp1 | 16485 | 5 | 100 | 946 | 202 | select count(*) into cnt from t1;p1 | 16485 | 6 | 0 | 0 | 0 | end loop;p1 | 16485 | 7 | 1 | 193 | 193 | select count(*) into cnt from t2;p1 | 16485 | 8 | 0 | 0 | 0 | end
(9 rows)

从收集到的数据可以某条SQL 执行次数、总执行时间(单位us)。

注意:控制块是包含内部所有语句的执行时间的,如:本例的for 循环。


推荐阅读
  • 本文介绍了 Oracle SQL 中的集合运算、子查询、数据处理、表的创建与管理等内容。包括查询部门号为10和20的员工信息、使用集合运算、子查询的注意事项、数据插入与删除、表的创建与修改等。 ... [详细]
  • 如何将955万数据表的17秒SQL查询优化至300毫秒
    本文详细介绍了通过优化SQL查询策略,成功将一张包含955万条记录的财务流水表的查询时间从17秒缩短至300毫秒的方法。文章不仅提供了具体的SQL优化技巧,还深入探讨了背后的数据库原理。 ... [详细]
  • 本文详细介绍了PostgreSQL与MySQL在SQL语法上的主要区别,包括如何使用COALESCE替代IFNULL、金额格式化的方法、别名处理以及日期处理等关键点。 ... [详细]
  • 本文详细介绍了Oracle 11g中的创建表空间的方法,以及如何设置客户端和服务端的基本配置,包括用户管理、环境变量配置等。 ... [详细]
  • Maven + Spring + MyBatis + MySQL 环境搭建与实例解析
    本文详细介绍如何使用MySQL数据库进行环境搭建,包括创建数据库表并插入示例数据。随后,逐步指导如何配置Maven项目,整合Spring框架与MyBatis,实现高效的数据访问。 ... [详细]
  • 本文介绍了一种使用SQL Server存储过程来实现基于单一条件的高效分页查询的方法。通过示例代码,详细说明了如何构建和执行这种分页查询。 ... [详细]
  • JUnit下的测试和suite
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 本文探讨了在SQL Server中处理几何类型列时遇到的INTERSECT操作限制,并提供了解决方案,包括通过转换数据类型和使用额外表结构的方法。 ... [详细]
  • flea,frame,db,使用,之 ... [详细]
  • 本文详细探讨了在Web开发中常见的UTF-8编码问题及其解决方案,包括HTML页面、PHP脚本、MySQL数据库以及JavaScript和Flash应用中的乱码问题。 ... [详细]
  • PHP面试题精选及答案解析
    本文精选了新浪PHP笔试题及最新的PHP面试题,并提供了详细的答案解析,帮助求职者更好地准备PHP相关的面试。 ... [详细]
  • 本文介绍了几个关于SQL查询中列使用的优化规则,包括避免使用SELECT *、指定INSERT列名、修改自增ID为无符号类型、为列添加默认值以及为列添加注释等。 ... [详细]
  • 本文详细介绍了如何在 Oracle 数据库中进行筛选备份和恢复操作,包括权限授予、目录管理、数据导出和导入等步骤。 ... [详细]
  • 本文介绍了如何在 SQL Server (MSSQL) 数据库中更新 XML 列中的属性和节点内容。 ... [详细]
  • 在处理大数据量的SQL分页查询时,通常需要执行两次查询来分别获取数据和总记录数。本文介绍了一种优化方法,通过单次查询同时返回分页数据和总记录数,从而提高查询效率。 ... [详细]
author-avatar
手机用户2502859545
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有