WEB开发网
开发学院数据库MSSQL Server 调优 SQL 过程 阅读

调优 SQL 过程

 2008-09-09 10:03:14 来源:WEB开发网   
核心提示: 正如第一个例子那样,这里的问题是:没有真正执行重要工作的过程的调用成本可能占据了整个作业成本,调优 SQL 过程(7),为了避免这一点,可以将执行过程体的条件撤出,在实际的客户场景中,性能可以提高 30 倍,交给调用者,或者为了维护封装和确保该逻辑的完整性

调优 SQL 过程

正如第一个例子那样,这里的问题是:没有真正执行重要工作的过程的调用成本可能占据了整个作业成本。

为了避免这一点,可以将执行过程体的条件撤出,交给调用者,或者为了维护封装和确保该逻辑的完整性,可以简单地重复它。在上面的例子中,可以按以下方式封装条件:

1 CREATE FUNCTION call_precond(a INTEGER)
2 RETURNS INTEGER
3 RETURN CASE WHEN a < 0 AND a < -10 AND (a/2) * 2 = a
4    THEN 1 END

查找下列结果:

调优 SQL 过程

注意,已调优的过程就不会因为没有在外部检查先决条件而失败,因为过程体中会重复这个检查。

这个例子总结了文中一系列的调优提示。在文章的最后,我将通过 DB2 V8.2 中的新 SQL PL Virtual Machine(PVM)调优一个简短的情况列表。

PVM 中的 SQL PL 调优

Gustavo Arocena 是 SQL Procedure 的架构师,他于 2003 年出版了 SQL 过程的性能:提示和技巧。从那时起,已经发生了很多变化。DB2 V8.2 使用其 PVM 编译并执行 SQL 过程,不再将 SQL 过程交叉编译成嵌入了 SQL 的 C。在这个过程中,Arocena 所描述的一些提示已经提供了一些初步了解 PVM 优化器的方法。正如您在前面例子的屏幕快照中可以看到的,一些语句没有成本分配。这不是因为它们是免费的,而是因为这些语句在 PVM 优化器中与其他语句进行了组合,或者因为 PVM 可以本机执行这些 SQL 语句。此外,在 DB2 V8.2 中,PVM 还可以完成下列工作:

执行最直接的变量赋值。

执行基本的数学运算,例如循环增值。

将 SET 语句链组合到单个 VALUES INTO 语句中。

通过将 SET 语句嵌入 CASE 表达式中,重写 CASE 和 IF THEN ELSE 语句。

评估基本条件,例如“a<b”。

预先计算 CASE 条件和 IF THEN ELSE 条件,并立即跳至适当的分支。

这些优化的目的是为了可以在任何缩短代码路径的地方,避免调用常规的 SQL 运行时解释器。PVM 仍然很年青,但它通常优于 V8.2 之前版本编译的 SQL 过程,主要是因为上面所展示的那些改进。

结束语

在本文中,我提供了针对 SQL 过程领域中常见性能问题的一些调优技巧。DBA 和开发人员常常关注数据库配置、硬件以及用于解决性能瓶颈的模式。虽然所有这些都是好且有效的方法,但是如果逻辑不允许,那么经过完美调优的数据库也仍将无法执行。

通过上述技术,在实际的客户场景中,性能可以提高 30 倍,这足可以区分失败的项目和引以为豪的成功。

上一页  2 3 4 5 6 7 

Tags:SQL 过程

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接