调优 sql 过程--

调优 sql 过程--

ID:20439534

大小:56.00 KB

页数:4页

时间:2018-10-12

调优 sql 过程--_第1页
调优 sql 过程--_第2页
调优 sql 过程--_第3页
调优 sql 过程--_第4页
资源描述:

《调优 sql 过程--》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、调优SQL过程>>  您想学习调优SQLPL的一些技巧吗?如果是这样的话,本文将描述一些调优IBM®DB2®UniversalDatabase™(UDB)V8.2forLinux,UNIX®,andemp5   emp6     ERGE。这意味着您甚至可以使用内联SQLPL封装数据库更改。  使用临时表  DB2支持已声明的全局临时表(DeclaredGlobalTemporaryTable,DGTT)。用SQL术语来说,DECLARE表示所定义对象的目录中将不

2、包含条目。因此,它在定义上是私有的。与之相比,DB2UDBforzOS®所支持的已创建的全局临时表(CreatedGlobalTemporaryTable)是在目录中定义的。当然,虽然它们的内容是私有的,但其定义却不是私有的。  具有声明对象的灵活性(只要用户临时表空间是立即可用的,DBA就不会再关心该应用程序在做什么)也带来了一个不足:对于要进行编译的语句来说,这个对象必须存在。如果连接失败,或者该表已删除,那么每次重新声明这个表时,都需要重新编译引用DGTT的任何语句。  同样,我们通过

3、一个例子来说明:123下一页>>>>这篇文章来自..,。  当然,上面的代码是无意义的,但其结构很常见,因此,可以用它来说明这个问题。本例中,将频繁调用该过程,而DGTT仅在本地使用。因此,为了进行封装,该过程声明DGTT位于临时表上,然后,当不再需要这个临时表时,可以删除它。  这个图有什么问题吗?DECLARE和DROP之间的insert语句每次都要重新进行编译,因为DB2无法知道该DGTT下次是否将具有相同的属性。实际上,DECLARE和DROP之间有许多语句,都可用于处理该临时表结果集的格式

4、,直到它最终满足要求为止。  为了避免这种疯狂编译,将该临时表的声明移至一个单独过程中会更合适一些,该过程只在启动工作负载时执行一次。  正如您可以在上面看到的,其结果是令人震惊的。但这里将有更多要了解的东西。请观察取代DROP语句的DELETE语句。它将总是因用户引起的错误而失败,然后,将由一个continue处理程序解决这个错误。这里发生了什么事?  为了提高速度,需要优化临时表,因此,当插入行时,DB2不用费心在临时表中寻找空闲空间,而是将表行为替换为APPENDONLY。虽然常规的DELET

5、E将删除这些行,但是它不会真正让DB2回收这些空间。应用程序将继续消费越来越多的用户临时表空间。  实际上,另外一个因素在这里提供了帮助。那就是,所有DGTT都被声明为NOTLOGGED。毕竟,您可以相当容易地重新构建临时表的内容。如果NOTLOGGED表在执行数据修改语句期间碰到了执行错误,那么对于DB2来说,就只有一个选择:清空(truncate)该表。而这就是DELETE语句所进行的工作。  条件处理程序  计算机语言有两种处理错误的常用方法。  第一种方法要求程序在在进行每一个重大操作之后,

6、检查错误。在DB2中编写C-UDF或C存储过程的开发人员已经学会在其代码的每条EXECSQL语句之后检查SQLCA。  第二种方法就是具有专用的处理程序,捕捉各条语句所抛出的任何或特定错误条件。Java™和C++编程人员都熟悉这一概念。  SQL/PSM标准为SQL过程语言定义了使用处理程序的第二种方法。然而,通常当从Sybase或MicrosoftSQL服务器移植TSQL过程时,或当仅仅对SQLPL应用C技巧时,都可以避免更现代的处理程序方法,而支持更为传统的错误检查方法。  这些情况

7、下要做的事情就是定义一个通用的万能(catch-all)处理程序,用于在局部变量中保存所有错误信息。然后,使用过程体中的显式错误处理代码进行错误处理。下面是这种类型的一个简单场景。  在这个场景中,要处理一条SELECTINTO语句。在处理这条语句之前,要重新设置本地错误变量,其代价虽然不高,但仍要花费一些CPU时间。然而,问题是用于保存错误变量的VALUESINTO语句的花费几乎与SELECTINTO语句的一样高。  具有讽刺意味的是,在许多情况下,程序甚至可能不在乎检查SELECTINTO的结果

8、是什么,因此,条件处理程序的工作是徒劳的。本例中,将完成以下几件事。  首先,可以显式地检查NOTFOUND警告(如果想这样做的话),而不必在局部变量中保存SQLCODE和SQLSTATE。事实的确如此,因为该警告可用于SQL过程中的下一条语句。  其次,所有错误或意想不到的警告实际上应该由异常处理程序来处理。除了按照发明者所计划的方式来使用该语言之外,这样做可避免复制和重新设置局部变量。  可预测的是,上面的调优版本免除了所有处理程序成本,并使性能提高了一倍。  调

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。