调优 SQL 过程
2008-09-09 10:03:14 来源:WEB开发网
正如第一个例子那样,这里的问题是:没有真正执行重要工作的过程的调用成本可能占据了整个作业成本。
为了避免这一点,可以将执行过程体的条件撤出,交给调用者,或者为了维护封装和确保该逻辑的完整性,可以简单地重复它。在上面的例子中,可以按以下方式封装条件:
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
查找下列结果:
注意,已调优的过程就不会因为没有在外部检查先决条件而失败,因为过程体中会重复这个检查。
这个例子总结了文中一系列的调优提示。在文章的最后,我将通过 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 倍,这足可以区分失败的项目和引以为豪的成功。
- ››sql server自动生成批量执行SQL脚本的批处理
- ››sql server 2008亿万数据性能优化
- ››SQL Server 2008清空数据库日志方法
- ››sqlserver安装和简单的使用
- ››SQL Sever 2008 R2 数据库管理
- ››SQL SERVER无法安装成功,sqlstp.log文件提示[未发...
- ››Sql Server中通过父记录查找出所有关联的子记录
- ››SqlServer触发器、存储过程和函数
- ››SQL Server 中的事务(含义,属性,管理)
- ››Sqlite数据库插入和读取图片数据
- ››Sql server 2005拒绝了对对象 'xx表' (数...
- ››Sql server 2005拒绝了对对象 'xx表' (数...
更多精彩
赞助商链接