PLSQL_性能优化效能跟踪工具DBMS_PROFILER分析(案例)

简介: 2014-06-01 Created By BaoXinjian 一、摘要 Oracle PLSQL性能诊断是经常会遇到问题,所以Oracle提供了比较多的程式诊断工具,其中包括了dbms_profiler包 DBMS_PROFILER中会用到一些基本构建如下 在调用程式前DBMS_PROFILER.

2014-06-01 Created By BaoXinjian

一、摘要


Oracle PLSQL性能诊断是经常会遇到问题,所以Oracle提供了比较多的程式诊断工具,其中包括了dbms_profiler包

DBMS_PROFILER中会用到一些基本构建如下

  • 在调用程式前DBMS_PROFILER.START_PROFILER,启动对该程式监控
  • 在调用程式后DBMS_PROFILER.STOP_PROFILER,结束对程式监控
  • 在监控过程中,系统会将资料存放至三个表中PLSQL_PROFILER_RUNS -> UNITS -> DATA
  • 通过profiler.sql工具产生HTML形式的性能报表

个人感觉,如果本人自己测试程式性能的话,只需查看监控数据在PLSQL_PROFILER_RUNS / UNITS/ DATA即可

但是如果遇到客户对程式性能有怀疑时,需要通过profiler.sql产生HTML性能报表就非常重要了,总不能让客户查看SQL,而Oracle自带的标准HTML汇总报表旧非常有说服力了

 

二、案例


需求:客户要求诊断一个客制化的package的性能,使用dbms_profiler跟踪,发现问题所在并进行调优

1. 建立测试脚本,测试dbms_profiler

2. 查询SQL Performance的三个重要表PLSQL_PROFILER_RUNS->UNITS->DATA,通过Run_Id

3. 查询SQL Performance通过profiler.sql导出html格式的性能报表,调用时输入唯一参数Run_Id

 

三、案例实现


Step1. 建立测试脚本,测试dbms_profiler

 1     DECLARE
 2 
 3         x_to_currecny GL_DAILY_RATES.TO_CURRENCY%TYPE;
 4 
 5         x_from_currency GL_DAILY_RATES.FROM_CURRENCY%TYPE;
 6 
 7         x_conversion_date GL_DAILY_RATES.CONVERSION_DATE%TYPE;
 8 
 9         x_rate NUMBER;
10 
11     BEGIN
12 
13         DBMS_PROFILER.START_PROFILER('BXJ_PLSQL_DBMS_PROFILER');
14 
15         SELECT to_currency, from_currency, conversion_date
16 
17            INTO x_to_currecny, x_from_currency, x_conversion_date
18 
19          FROM gl_daily_rates
20 
21        WHERE ROWNUM <= 1;
22 
23         x_rate := bxj_get_rate.get_rate_1(x_to_currecny,
24 
25         x_from_currency,
26 
27         x_conversion_date);
28 
29         DBMS_OUTPUT.PUT_LINE('x_rate=' || x_rate);
30 
31         DBMS_PROFILER.STOP_PROFILER;
32 
33     END;

 

Step2.1 查询SQL Performance的三个重要表PLSQL_PROFILER_RUNS->UNITS->DATA

 1     select * from PLSQL_PROFILER_RUNS
 2 
 3         where run_comment= 'BXJ_PLSQL_DBMS_PROFILER'
 4 
 5  
 6 
 7     select * from PLSQL_PROFILER_UNITS
 8 
 9         where runid = 15
10 
11  
12 
13     select * from PLSQL_PROFILER_DATA
14 
15         where runid = 15
16 
17         order by line#

 

Step2.2. 具体SQL

 1     SELECT d.line#, s.text,d.total_time, d.total_occur, d.min_time,d.max_time
 2 
 3      FROM plsql_profiler_data d, sys.all_source s, plsql_profiler_units u
 4 
 5     WHERE d.runid = 15
 6 
 7         AND u.unit_name = 'BXJ_GET_RATE'
 8 
 9         AND u.runid = d.runid
10 
11         AND d.unit_number = u.unit_number
12 
13         AND d.total_occur <> 0
14 
15         AND s.TYPE(+) = u.unit_type
16 
17         AND s.owner(+) = u.unit_owner
18 
19         AND s.name(+) = u.unit_name
20 
21         AND d.line# = NVL (s.line, d.line#)
22 
23     ORDER BY u.unit_number, d.line#;

    

 

Step3. 查询SQL Performance通过profiler.sql导出html格式的性能报表

    (1).本地调用Profiler.SQL

              

    (2).产生profiler file

       

    (3).查看HTML报表

        

 

Thanks and Regards

注:Profiler.sql下载路径: Matelink - Script to produce HTML report with top consumers out of PL/SQL Profiler DBMS_PROFILER data (Doc ID 243755.1)

ERP技术讨论群: 288307890
技术交流,技术讨论,欢迎加入
Technology Blog Created By Oracle ERP - 鲍新建
相关文章
|
2月前
|
数据采集 运维 供应链
数据资产是什么?一文讲清数据资产入表全流程!
2024年1月1日起,企业数据资源可有条件计入资产,标志着数据从资源迈向资产新阶段。本文详解数据资产入表的定义、常见误区及四大核心步骤,涵盖确权、价值证明、成本归集与后续管理,剖析其战略价值与现实挑战,助力企业实现数据资产合规入表,释放数据价值。
数据资产是什么?一文讲清数据资产入表全流程!
|
8月前
|
机器学习/深度学习 人工智能 JSON
Resume Matcher:增加面试机会!开源AI简历优化工具,一键解析简历和职位描述并优化
Resume Matcher 是一款开源AI简历优化工具,通过解析简历和职位描述,提取关键词并计算文本相似性,帮助求职者优化简历内容,提升通过自动化筛选系统(ATS)的概率,增加面试机会。
799 18
Resume Matcher:增加面试机会!开源AI简历优化工具,一键解析简历和职位描述并优化
|
存储 SQL 关系型数据库
MySQL 大表拆分
【9月更文挑战第13天】在 MySQL 中,为解决大数据量导致的性能问题,常采用表拆分策略,主要包括水平拆分和垂直拆分。水平拆分按规则将大表拆成多个小表,如范围划分(按时间或 ID)和哈希划分(按字段哈希值)。垂直拆分则按字段相关性拆分,减少表宽度。拆分需注意数据迁移、应用改造、索引优化及分布式事务处理等问题。实施前应充分评估和测试。
1047 8
|
编译器 程序员 定位技术
C++ 20新特性之Concepts
在C++ 20之前,我们在编写泛型代码时,模板参数的约束往往通过复杂的SFINAE(Substitution Failure Is Not An Error)策略或繁琐的Traits类来实现。这不仅难以阅读,也非常容易出错,导致很多程序员在提及泛型编程时,总是心有余悸、脊背发凉。 在没有引入Concepts之前,我们只能依靠经验和技巧来解读编译器给出的错误信息,很容易陷入“类型迷路”。这就好比在没有GPS导航的年代,我们依靠复杂的地图和模糊的方向指示去一个陌生的地点,很容易迷路。而Concepts的引入,就像是给C++的模板系统安装了一个GPS导航仪
330 59
|
9月前
|
人工智能 搜索推荐 程序员
AI神器Deepseek:3分钟搞定一篇爆款文案!
大家好,我是小米,一个31岁、热爱分享技术的自媒体人。本文将介绍如何使用Deepseek写文案。Deepseek是一款基于AI的文案生成工具,能快速生成高质量文案,支持多种语言风格,帮助提高写作效率。文中通过具体案例——为咖啡店新品“焦糖玛奇朵”撰写推广文案,详细讲解了从明确目标到发布文案的全过程,并提供了优化和应用技巧。如果你还在为写文案发愁,不妨试试Deepseek,它将成为你的得力助手!
1505 23
|
12月前
|
数据采集 存储 前端开发
Puppeteer教程:使用CSS选择器点击和爬取动态数据
本文介绍如何使用Puppeteer结合CSS选择器爬取动态网页数据,以贝壳网的二手房价格为例,通过代理IP提高爬虫成功率。文章详细讲解了Puppeteer的安装和配置、代码实现及数据趋势分析,帮助读者掌握动态网页爬取技术。
424 1
Puppeteer教程:使用CSS选择器点击和爬取动态数据
|
存储 分布式计算 监控
揭秘阿里云EMR:如何巧妙降低你的数据湖成本,让大数据不再昂贵?
【8月更文挑战第26天】阿里云EMR是一种高效的大数据处理服务,助力企业优化数据湖的成本效益。它提供弹性计算资源,支持根据需求调整规模;兼容并优化了Hadoop、Spark等开源工具,提升性能同时降低资源消耗。借助DataWorks及Data Lake Formation等工具,EMR简化了数据湖构建与管理流程,实现了数据的统一化治理。此外,EMR还支持OSS、Table Store等多种存储选项,并配备监控优化工具,确保数据处理流程高效稳定。通过这些措施,EMR帮助企业显著降低了数据处理和存储成本。
469 3
IDEA——代码文件如何插入作者注释
IDEA——代码文件如何插入作者注释
204 0
|
负载均衡 Kubernetes 算法
K8s服务发现与负载均衡的技术探索
【7月更文挑战第15天】K8s通过Service资源对象和kube-proxy组件实现了高效、灵活的服务发现和负载均衡机制。通过合理选择Service类型、优化kube-proxy配置以及使用Ingress进行高级路由,可以确保应用在K8s集群中高效、可靠地运行。随着云原生技术的不断发展,K8s的服务发现和负载均衡机制也将不断完善和优化,为更多场景提供强大的支持。
1012 9
|
网络安全
socks5代理连接成功无法访问http协议的站点
无法通过SOCKS5代理访问HTTP网站可能由多个原因引起,如代理服务器不支持HTTP、配置错误、防火墙阻拦、连接问题、身份验证失败、浏览器设置不当或服务器被封锁。检查并解决这些因素,若问题持续,需深入排查或联系服务提供商。