调优 SQL 过程
2008-09-09 10:03:14 来源:WEB开发网核心提示: 这个图有什么问题吗?DECLARE 和 DROP 之间的 insert 语句每次都要重新进行编译,因为 DB2 无法知道该 DGTT 下次是否将具有相同的属性,调优 SQL 过程(4),实际上,DECLARE 和 DROP 之间有许多语句,第一种方法要求程序在在进行每一个重大操作之后,检查
这个图有什么问题吗?DECLARE 和 DROP 之间的 insert 语句每次都要重新进行编译,因为 DB2 无法知道该 DGTT 下次是否将具有相同的属性。实际上,DECLARE 和 DROP 之间有许多语句,都可用于处理该临时表结果集的格式,直到它最终满足要求为止。
为了避免这种疯狂编译,将该临时表的声明移至一个单独过程中会更合适一些,该过程只在启动工作负载时执行一次。
正如您可以在上面看到的,其结果是令人震惊的。但这里将有更多要了解的东西。请观察取代 DROP 语句的 DELETE 语句。它将总是因用户引起的错误而失败,然后,将由一个 continue 处理程序解决这个错误。这里发生了什么事?
为了提高速度,需要优化临时表,因此,当插入行时,DB2 不用费心在临时表中寻找空闲空间,而是将表行为替换为 APPEND ONLY。虽然常规的 DELETE 将删除这些行,但是它不会真正让 DB2 回收这些空间。应用程序将继续消费越来越多的用户临时表空间。
实际上,另外一个因素在这里提供了帮助。那就是,所有 DGTT 都被声明为 NOT LOGGED。毕竟,您可以相当容易地重新构建临时表的内容。如果 NOT LOGGED 表在执行数据修改语句期间碰到了执行错误,那么对于 DB2 来说,就只有一个选择:清空(truncate)该表。而这就是 DELETE 语句所进行的工作。
条件处理程序
计算机语言有两种处理错误的常用方法。
第一种方法要求程序在在进行每一个重大操作之后,检查错误。在 DB2 中编写 C-UDF 或 C 存储过程的开发人员已经学会在其代码的每条 EXEC SQL 语句之后检查 SQLCA。
- ››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表' (数...
更多精彩
赞助商链接