问题描述
我的任务是提高我们应用程序中的某些软件包和过程的性能。我们有1个包,它有大约15-20个程序的子程序。
以下是我需要的澄清。
Iam将本地变量和过程参数的数据类型从NUMBER更改为PLS_INTEGER,并且在子程序中,但并非所有子程序都将影响调用包是否具有PLS_INTEGER并且子程序具有NUMBER数据类型,例如。
如上所述,主软件包具有参数a1,而a2具有PLS_INTEGER,但是在子过程中a1和a2用作数字,这对性能有任何问题吗?
以下是我需要的澄清。
Iam将本地变量和过程参数的数据类型从NUMBER更改为PLS_INTEGER,并且在子程序中,但并非所有子程序都将影响调用包是否具有PLS_INTEGER并且子程序具有NUMBER数据类型,例如。
PACK1.MAINPROC ( a1 PLS_INTEGER,a2 PLS_INTEGER,a3 PLS_INTEGER,a4 PLS_INEGER ) begin subprocedure1(a1,a2,a3) end mainproc procedure SUBPROCEDURE1( a1 NUMBER,a2 NUMBER,a3 number) begin .... end复制
如上所述,主软件包具有参数a1,而a2具有PLS_INTEGER,但是在子过程中a1和a2用作数字,这对性能有任何问题吗?
专家解答
Pls_integer及其子类型使用硬件算术来进行操作。但是数字使用库算术,速度较慢。
所以pls_integer更快。当您为数字分配pls_整数值时,数据库会隐式地将其转换为数字。所以你失去了硬件算术的好处。并有转换开销。
也就是说,除非你在做繁重的计算,否则你不太可能注意到这种差异:
因此,超过1000万次执行,数字仅慢了约1秒。所以0.1微秒/执行!
如果你试图让你的代码更快,几乎可以肯定你可以在其他地方获得更大的收益。用分层探查器跟踪您的代码,以找出在哪里
https://oracle-base.com/articles/11g/plsql-hierarchical-profiler-11gr1
所以pls_integer更快。当您为数字分配pls_整数值时,数据库会隐式地将其转换为数字。所以你失去了硬件算术的好处。并有转换开销。
也就是说,除非你在做繁重的计算,否则你不太可能注意到这种差异:
create or replace procedure p1 ( p1 pls_integer, p2 pls_integer, p3 pls_integer, p4 pls_integer ) as v1 pls_integer; begin v1 := p1 + p2 + p3 + p4; end p1; / create or replace procedure p2 ( p1 number, p2 number, p3 number, p4 number ) as v1 number; begin v1 := p1 + p2 + p3 + p4; end p2; / declare v1 pls_integer := 1; v2 pls_integer := 2; v3 pls_integer := 3; v4 pls_integer := 4; start_time pls_integer; iterations pls_integer := 10000000; begin start_time := dbms_utility.get_time (); for i in 1 .. iterations loop p1 ( v1, v2, v3, v4 ); end loop; dbms_output.put_line ( 'PLS time ' || ( dbms_utility.get_time () - start_time ) ) ; start_time := dbms_utility.get_time (); for i in 1 .. iterations loop p2 ( v1, v2, v3, v4 ); end loop; dbms_output.put_line ( 'NUM time ' || ( dbms_utility.get_time () - start_time ) ) ; end; / PLS time 252 NUM time 359 / PLS time 255 NUM time 367 / PLS time 270 NUM time 378复制
因此,超过1000万次执行,数字仅慢了约1秒。所以0.1微秒/执行!
如果你试图让你的代码更快,几乎可以肯定你可以在其他地方获得更大的收益。用分层探查器跟踪您的代码,以找出在哪里
https://oracle-base.com/articles/11g/plsql-hierarchical-profiler-11gr1
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
Oracle DataGuard高可用性解决方案详解
孙莹
428次阅读
2025-03-26 23:27:33
Oracle RAC 一键安装翻车?手把手教你如何排错!
Lucifer三思而后行
400次阅读
2025-04-15 17:24:06
墨天轮个人数说知识点合集
JiekeXu
368次阅读
2025-04-01 15:56:03
XTTS跨版本迁移升级方案(11g to 19c RAC for Linux)
zwtian
358次阅读
2025-04-08 09:12:48
Oracle SQL 执行计划分析与优化指南
Digital Observer
332次阅读
2025-04-01 11:08:44
Oracle 19c RAC更换IP实战,运维必看!
szrsu
300次阅读
2025-04-08 23:57:08
风口浪尖!诚通证券扩容采购Oracle 793万...
Roger的数据库专栏
293次阅读
2025-03-24 09:42:53
切换Oracle归档路径后,不能正常删除原归档路径上的归档文件
dbaking
288次阅读
2025-03-19 14:41:51
oracle定时任务常用攻略
virvle
286次阅读
2025-03-25 16:05:19
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
283次阅读
2025-04-15 14:48:05