PL/SQL 本地编译
概述
PL/ SQL 经常用作执行 SQL 语句的瘦绕接器,设置绑定变量和处理结果集合。参见代码 sample-1。在这种情况下,PL/ SQL 代码的执行速度没有问题。SQL 的执行速度决定了性能。(SQL 和 SQL 操作环境之间上下文转接的效率可能是问题,但那与本文无关。参见介绍批量绑定和表函数的章节。)
然而,我们看到用 PL/ SQL 来执行计算密集的数据库独立任务的趋势正在不断增长。它毕竟是一种全功能的 3GL。参见代码 sample-2。PL/ SQL 代码的执行速度决定了性能。
在 Oracle9i 之前的版本中,PL/ SQL 源代码的编译始终产生一个表示法(通常指字节码),它存储在数据库中,并在运行时由虚拟机进行解释,虚拟机在 ORACLE 内部运行,并在给定平台上本地依次运行。Oracle9i 引入了一种新的方法。PL/ SQL 源代码可被选择性地编译成链接到 ORACLE 中的本地目标代码。(不过请注意:匿名的 PL/ SQL 程序块从不进行本地编译。)
sample- 2 程序以 NATIVE 模式编译时,其运行速度比在解释模式编译时大约快 33%,而 sample-1 程序以 NATIVE 模式编译时,运行速度大约快 3%。(每次测量都进行了大约一千两百万次的重复)。
虽然对于数据密集型程序,本地编译可能只有微小的性能改善,但我们从没有发现它会导致性能降低。
本地编译的商务利益