Oracle PLSQL Procedure 如何进行性能调优分析

本文详细介绍了如何使用Oracle提供的DBMS_PROFILER工具对存储过程进行性能分析,通过记录并分析执行过程中的性能数据,找出瓶颈并进行优化。包括安装、配置、执行PLSQL代码及查看分析数据的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Java的性能调优分析中,可以使用 JProfiler 分析JVM运行时的CPU消耗、Memory占用、Thread情况等信息。对于Java代码中调用的Oracle的存储过程、函数它也能输出调用时间、调用次数等信息,但对于过程、函数内部的性能情况,JProfiler就使不上力了。

在一次调优实战中,我就遇到了上面的情况,存储过程是性能问题所在,需要调优,这时就要用上 Oracle 提供的 DBMS_PROFILER package了。


1. DBMS_PROFILER 是什么?能做什么?

它是 Oracle 提供的一个用于性能分析的工具包。从Oracle document 网站找的定义大致是说:

此package能收集PLSQL执行时的性能数据,开发人员可以使用这些数据用于程序分析以提高其运行速度。开发人员可以在一个Session中打开此工具,它会记录所有的“数据库对象(function、procedure这样的PLSQL代码)”的性能分析数据,“数据”包括每句代码的运行次数、运行时间、运行平均时间、最长运行时间、最短运行时间等信息。


2. 使用DBMS_PROFILER对PLSQL进行性能分析

用它进行性能分析的过程大概是这样的:安装DBMS_PROFILER package --》 初始化记录表 --》打开分析开关 --》 执行你的PLSQL --》去分析表里面找瓶颈所在 --》解决它。

以下详解:

2.1 启用DBMS_PROFILER

先查看是否已安装:

SQL> desc dbms_profiler

如没有安装,执行

SQL> @@C:\oracle\product\10.2.0\client_1\RDBMS\ADMIN\profload.sql

重置记录表,执行

SQL> @@C:\oracle\product\10.2.0\client_1\RDBMS\ADMIN\proftab.sql

2.2  执行你的PLSQL

begin
DBMS_PROFILER.START_PROFILER ('My Test‘);
--PLSQL 放在这里
DBMS_PROFILER.STOP_PROFILER;
end;

此段程序会先打开profiler 的设置,然后执行待测试的代码,最后再关闭profiler。这是一个典型的应用,DBMS_PROFILER也支持“暂停”,‘恢复“的操作:

DBMS_PROFILER.PAUSE_PROFILER ,DBMS_PROFILER.RESUME_PROFILER 

然后就跑下这段代码,接下来就可以看分析数据了。

2.3查看分析数据

性能数据会被记录在下面的三张表里:

select * from PLSQL_PROFILER_RUNS ;
select * from PLSQL_PROFILER_UNITS ;
select * from PLSQL_PROFILER_DATA;










参考文献:

http://docs.oracle.com/cd/B19306_01/appdev.102/b14258/d_profil.htm#BJEFDBBC

转载请标明出处:http://blog.youkuaiyun.com/yaqingwa/article/details/17228321

1. 前言 5 1.1 目的 5 1.2 文档说明 5 1.3 词汇表 5 1.4 参考资料 5 2. PLSQL程序化原则 6 2.1 导致性能问题的内在原因 6 2.2 PLSQL化的核心思想 6 2.3 ORACLE化器 6 2.4 PLSQL化 7 2.4.1 选择最有效率的表名顺序 7 2.4.2 WHERE子句中的连接顺序 8 2.4.3 SELECT子句中避免使用 ‘ * ‘ 8 2.4.4 用EXISTS替代IN 8 2.4.5 用NOT EXISTS替代NOT IN 9 2.4.6 用表连接替换EXISTS 9 2.4.7 用EXISTS替换DISTINCT 10 2.4.8 减少对表的查询 10 2.4.9 避免循环(游标)里面嵌查询 11 2.4.10 尽量用union all替换union 13 2.4.11 使用DECODE函数来减少处理时间 13 2.4.12 group by化 13 2.4.13 尽量避免用order by 14 2.4.14 用Where子句替换HAVING子句 14 2.4.15 使用表的别名(Alias) 14 2.4.16 删除重复记录 14 2.4.17 COMMIT使用 15 2.4.18 减少多表关联 15 2.4.19 批量数据插入 15 2.5 索引使用化 16 2.5.1 避免在索引列上使用函数或运算 16 2.5.2 避免改变索引列的类型. 17 2.5.3 避免在索引列上使用NOT 17 2.5.4 用>=替代> 18 2.5.5 避免在索引列上使用IS NULL和IS NOT NULL 18 2.5.6 带通配符(%)的like语句 18 2.5.7 总是使用索引的第一个列 19 2.5.8 多个平等的索引 19 2.5.9 不明确的索引等级 19 2.5.10 自动选择索引 19 2.5.11 使用提示(Hints) 19 2.5.12 表上存在过旧的分析 20 2.5.13 表上存在并行 21 2.5.14 关于索引建立 21 3. PLSQL程序性能问题测试方法 21 3.1 性能问题分析 21 3.2 EXPAIN PLAN分析索引使用 22 3.3 TOPSQL分析 24 3.4 针对性语句搜索 28 3.5 后台存储过程跟踪 29 3.6 性能监控 30 4. 性能测试工具设计思想 31
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值