当前位置: 首页 > news >正文

调试oracle函数性能(嵌入存储过程)

怀疑某个函数性能不好,那么具体哪里慢?
oracle提供了对存储过程调试的方法
可以将函数封装在里面

conn / as sysdba;
alter session set container=freepdb1;
drop user user1 cascade;
CREATE USER user1 IDENTIFIED BY user1;
grant connect,resource to user1;
grant execute on dbms_lock to user1;
alter user user1 quota unlimited on users;conn user1/user1@localhost/freepdb1:1521
@?/rdbms/admin/proftab.sql
GRANT SELECT ON plsql_profiler_runnumber TO PUBLIC;
GRANT SELECT,INSERT,UPDATE,DELETE ON plsql_profiler_data TO PUBLIC;
GRANT SELECT,INSERT,UPDATE,DELETE ON plsql_profiler_units TO PUBLIC;
GRANT SELECT,INSERT,UPDATE,DELETE ON plsql_profiler_runs TO PUBLIC;CREATE OR REPLACE FUNCTION func1(p_id NUMBER) RETURN numberISv_1 number;BEGINv_1:=p_id+ round(dbms_random.value,2);dbms_lock.sleep(v_1);RETURN v_1;END func1;
/CREATE OR REPLACE FUNCTION func2(p_id NUMBER) RETURN numberISv_1 number;BEGINv_1:=p_id-round(dbms_random.value,2);dbms_lock.sleep(v_1);RETURN v_1;END func2;
/CREATE OR REPLACE FUNCTION func3(p_id NUMBER) RETURN numberISv_1 number;BEGINv_1:=p_id* round(dbms_random.value,2);dbms_lock.sleep(v_1);RETURN v_1;END func3;
/CREATE OR REPLACE procedure sp_profiler_test1
as
v number;
beginfor x in 1..3loopv:=func1(1);dbms_output.put_line('func 1:'||v); v:=func2(1);dbms_output.put_line('func 2:'||v); v:=func3(1);dbms_output.put_line('func 3:'||v);       end loop;commit;
end sp_profiler_test1;
/set serverout on
DECLAREv_run_number   integer;v_temp1        integer;
BEGIN--启动profilersys.DBMS_PROFILER.start_profiler (run_number => v_run_number);--运行要跟踪的PLSQLsp_profiler_test1;   --前一步创建的测试样例存储过程--显示当前跟踪的运行序号(后面查询要用)DBMS_OUTPUT.put_line ('run_number:' || v_run_number);--停止profilersys.DBMS_PROFILER.stop_profiler;
END;
/set linesize 1000
col text format a60
SELECT   d.line#,                      --代码行号s.text,                            --源代码d.total_time,                   --总共运行时间(单位10亿分之一秒,即10的-9次方。)d.total_occur,                  --总共运行次数d.min_time,                     --最小运行时间d.max_time                      --最大运行时间FROM   plsql_profiler_data d, sys.all_source s, plsql_profiler_units uWHERE       d.runid = 1            --运行号(上一步执行相关过程时显示号码)and u.unit_name = 'SP_PROFILER_TEST1'        --单元名,即被测试的存储过程名AND u.runid = d.runidAND d.unit_number = u.unit_numberAND d.total_occur <> 0AND s.TYPE(+) = u.unit_typeAND s.owner(+) = u.unit_ownerAND s.name(+) = u.unit_nameAND d.line# = NVL (s.line, d.line#)ORDER BY  d.total_time desc, u.unit_number, d.line#;SELECT   d.line#,                      --代码行号s.text,                            --源代码d.total_time,                   --总共运行时间(单位10亿分之一秒,即10的-9次方。)d.total_occur,                  --总共运行次数d.min_time,                     --最小运行时间d.max_time                      --最大运行时间FROM   plsql_profiler_data d, sys.all_source s, plsql_profiler_units uWHERE       d.runid = 1             --运行号(上一步执行相关过程时显示号码)and u.unit_name = 'FUNC3'        --单元名,即被测试的存储过程名AND u.runid = d.runidAND d.unit_number = u.unit_numberAND d.total_occur <> 0AND s.TYPE(+) = u.unit_typeAND s.owner(+) = u.unit_ownerAND s.name(+) = u.unit_nameAND d.line# = NVL (s.line, d.line#)ORDER BY  d.total_time desc, u.unit_number, d.line#;

看整个存储过程各步骤执行耗时
在这里插入图片描述
然后看其中函数FUNC3的耗时
在这里插入图片描述
注意表空间读写授权和运行号!

如果没有对users表空间读写权限,可能会遇到下面错误

1 行出现错误:
ORA-06528: 执行 PL/SQL profiler 时出错
ORA-06512: 在 "SYS.DBMS_PROFILER", line 132
ORA-06512: 在 line 6

如果查询耗时情况写错了运行号,则可能返回空,你会认为dbms_profiler没用。

http://www.dtcms.com/a/573622.html

相关文章:

  • React 元素渲染
  • 个人开发者短信验证码接入指南-阿里云
  • 移动端优秀网站上海传媒公司名字
  • 建设一个网站的需求分析一个网站开发流程
  • PsPasswd(7.19):远程修改密码的边界与合规建议
  • 【钉钉多元表格(自动化)】钉钉群根据表格 自动推送当天值日生信息
  • LangFlow源码深度解析:Component核心机制与生态体系
  • dede织梦仿站网站建设做网站赚谁的钱
  • DropLoRA技术详解:克服大模型微调过拟合的创新方法
  • 【剑斩OFFER】算法的暴力美学——串联所有单词的字串
  • 学习Linux——进程管理
  • 在k8s中部署seaweedfs,上传文件到seaweedfs方法
  • 极氪与火山引擎深化合作,Data Agent赋能车辆数据管理效率
  • Kotlin 使用命令行编译
  • 1450dpi+93% 相似度,这款发光纳米纤维让皮肤纹理“复印”更精准
  • 匠魂(1)
  • LeetCode Hot100 自用
  • 做婚介网站可行性报告模板绵阳网站建设多少钱
  • 单位服务器网站打不开网站参考页面设计
  • 陇南建设网站大良营销网站建设信息
  • mac M系列芯片 unity 安装会遇到的错误以及解决
  • Reka UI - 一款免费开源的 Vue 无头 UI 组件库,样式定制开发项目的绝佳选择
  • 个人二级网站怎么做营销咨询服务合同
  • UDP-复用分用
  • 做网站需要什么特色网站制作入门
  • QListWidget的图标模式
  • 【大模型实战笔记 6】Prompt Engineering 提示词工程
  • 能源生态系统的架构设计:利益相关方治理与跨行业协作
  • 潍坊seo管理浙江seo外包
  • BuildingAI二开 用户信息增加Coze套餐名称和剩余天数技术架构