WEB开发网
开发学院数据库DB2 SQL 过程的性能: 提示和技巧 阅读

SQL 过程的性能: 提示和技巧

 2008-09-17 16:29:00 来源:WEB开发网   
核心提示: INSERT INTO tab_sel (SELECT col1, col2 FROM tab_comp WHERE col1 <= 20);INSERT INTO tab_default (SELECT col1, col2 FROM tab_comp WHERE col1 >

INSERT INTO tab_sel (SELECT col1, col2
           FROM tab_comp
           WHERE col1 <= 20);
INSERT INTO tab_default (SELECT col1, col2
             FROM tab_comp
             WHERE col1 > 20);

在研究改进现有过程逻辑的性能时,为消除游标循环而花费的任何时间都可能是值得的。

改进游标性能

如果存储过程中的逻辑确实需要游标,那么要使性能最优,请牢记下面这些内容。

首先,请确保不使用高于您所需的隔离级别。隔离级别决定了 DB2 对过程读取或更新的行应用的锁定的数量。隔离级别越高,DB2 将执行的锁定越多,因此为同一资源而竞争的应用程序之间的并发就越少。例如,使用可重复读(Repeatable Read,RR)隔离级别的过程将形成对其读取的任何行的共享锁,而使用游标稳定性(Cursor Stability,CS)的过程只会锁定任何可更新游标的当前行。可以使用 DB2_SQLROUTINE_PREPOPTS 注册表变量来指定 SQL 过程的隔离级别。例如,要将 SQL 过程的隔离级别设置为未提交的读(Uncommitted Read)(最低的级别,用于访问只读数据的过程),请使用下面这条命令:

db2set DB2_SQLROUTINE_PREPOPTS="ISOLATION UR"

注:要使该设置生效,必须重新启动 db2 实例。

DB2 中缺省的隔离级别是游标稳定性。但是,当然了,为了保持应用程序的正确性,有时需要使用可重复读。还需记住一件重要的事情,一旦创建了需要可重复读的过程,必须将 DB2_SQLROUTINE_PREPOPTS 重新设置回较低的隔离级别。

有关隔离级别还值得一提的是,DB2 允许我们在单独的查询中覆盖缺省的隔离级别,如下所示:

上一页  1 2 3 4 5 6 7 8 9 10  下一页

Tags:SQL 过程 性能

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