plsql本地编译与解释执行性能差异对比
来源:互联网 发布:找人做网站排名优化 编辑:程序博客网 时间:2024/05/05 17:22
fibonacci函数测试
create or replace function fib(n number)
return number
is
begin
if(n<=2) then
return n;
else
return fib(n-1)+fib(n-2);
end if;
end;
/
1. 解释执行
SQL> select name ,plsql_code_type from user_plsql_object_settings;
NAME PLSQL_CODE_TYPE
-------------------- ----------------------------------------
FIB INTERPRETED
--清理shared_pool和buffer_cache
SQL> alter system flush shared_pool;
System altered.
SQL> alter system flush buffer_cache;
System altered.
SQL> set timing on;
SQL> set serveroutput on;
SQL> declare
2 n number;
3 begin
4 n := fib(40);
5 dbms_output.put_line('Result is :'||n);
6 end;
7 /
Result is :165580141
PL/SQL procedure successfully completed.
Elapsed: 00:01:40.47
2. 本地编译
SQL> alter function fib compile plsql_code_type=native;
Function altered.
Elapsed: 00:00:00.37
SQL> select name,plsql_code_type from user_plsql_object_settings;
NAME PLSQL_CODE_TYPE
-------------------- ----------------------------------------
FIB NATIVE
alter system flush shared_pool;
alter system flush buffer_cache;
SQL> declare
2 n number;
3 begin
4 n := fib(40);
5 dbms_output.put_line('Result is :'||n);
6 end;
7 /
Result is :165580141
PL/SQL procedure successfully completed.
Elapsed: 00:00:57.52
性能从1分40秒提升为57秒,差异还是比较大的,如果以计算或判断为主的plsql代码可考虑此类方式优化。
参考:http://otn.itpub.net/17203031/viewspace-777265/
引用自以上链接:编写pl/sql代码的时候,性能是一个非常重要的考量方式。Native程序化在一定程度上可以提高效率。不过应该看到,Native化程序是有条件的。Native PL/SQL节省的时间成本在PL/SQL引擎的层面,而SQL语句引擎方面不会有很大程度的提升。
所以,如果我们的代码中以流程、计算和循环判断为主体,SQL语句相对较少,那么使用Native化是比较“划算”的。反之,如果主要都是在进行SQL语句计算操作,即使我们将代码Native化,获取到的优势也比较少。
另一方面,Native化的程序在迁移、升级的时候,也许会有很多额外的问题和关注点。也是我们需要注意慎用的方面。
create or replace function fib(n number)
return number
is
begin
if(n<=2) then
return n;
else
return fib(n-1)+fib(n-2);
end if;
end;
/
1. 解释执行
SQL> select name ,plsql_code_type from user_plsql_object_settings;
NAME PLSQL_CODE_TYPE
-------------------- ----------------------------------------
FIB INTERPRETED
--清理shared_pool和buffer_cache
SQL> alter system flush shared_pool;
System altered.
SQL> alter system flush buffer_cache;
System altered.
SQL> set timing on;
SQL> set serveroutput on;
SQL> declare
2 n number;
3 begin
4 n := fib(40);
5 dbms_output.put_line('Result is :'||n);
6 end;
7 /
Result is :165580141
PL/SQL procedure successfully completed.
Elapsed: 00:01:40.47
2. 本地编译
SQL> alter function fib compile plsql_code_type=native;
Function altered.
Elapsed: 00:00:00.37
SQL> select name,plsql_code_type from user_plsql_object_settings;
NAME PLSQL_CODE_TYPE
-------------------- ----------------------------------------
FIB NATIVE
alter system flush shared_pool;
alter system flush buffer_cache;
SQL> declare
2 n number;
3 begin
4 n := fib(40);
5 dbms_output.put_line('Result is :'||n);
6 end;
7 /
Result is :165580141
PL/SQL procedure successfully completed.
Elapsed: 00:00:57.52
性能从1分40秒提升为57秒,差异还是比较大的,如果以计算或判断为主的plsql代码可考虑此类方式优化。
参考:http://otn.itpub.net/17203031/viewspace-777265/
引用自以上链接:编写pl/sql代码的时候,性能是一个非常重要的考量方式。Native程序化在一定程度上可以提高效率。不过应该看到,Native化程序是有条件的。Native PL/SQL节省的时间成本在PL/SQL引擎的层面,而SQL语句引擎方面不会有很大程度的提升。
所以,如果我们的代码中以流程、计算和循环判断为主体,SQL语句相对较少,那么使用Native化是比较“划算”的。反之,如果主要都是在进行SQL语句计算操作,即使我们将代码Native化,获取到的优势也比较少。
另一方面,Native化的程序在迁移、升级的时候,也许会有很多额外的问题和关注点。也是我们需要注意慎用的方面。
0 0
- plsql本地编译与解释执行性能差异对比
- 解释执行与编译执行
- 解释执行与编译执行
- 编译执行与解释执行
- 解释执行与编译执行的区别
- TSQL与PLSQL差异整理
- 编译语言与解释语言的优缺点对比
- 对比差异与自动化测试
- SQL与PLSQL的对比
- C# 调 SQL server与Oracle存储过程执行差异对比
- 解释执行和编译执行
- 编译执行和解释执行
- 解释执行和编译执行
- PLSQL中执行本地动态SQL
- shell脚本-解释型语言与编译型语言的差异
- HTML5与HTML4的差异对比(1)
- HTML5与HTML4的差异对比(2)
- jBPM5与Activiti之间的差异对比
- wzplayer V1.6正式版(无限制)不支持加密版本 2014-07-08
- JSF onclick false 时无法阻止action或actionListener
- HDU 1166(线段树;树状数组)
- Javascript中this、prototype、constructor的理解
- sgu162 Pyramids 四面体面积
- plsql本地编译与解释执行性能差异对比
- HDU 1170(水题)
- Anti-Blot System
- 个人笔记 C++构造函数,析构函数
- 收集几个Objective-C的HTML解析库
- UIScrollView分页的实现
- duplicate symbol _OBJC_METACLASS_$_ClassName
- 关于mktime的问题
- 很低级的错误