高效使用可滚动光标
可滚动光标是编写应用程序(如基于屏幕的应用程序)的宝贵工具,此类应用程序的结果表较小,且经常需要前后移动数据。
过程
为了使滚动光标发挥最佳性能:
- 确定滚动光标最适合您的时间。
可滚动光标比不可滚动光标需要更多的 Db2 处理。 如果您的应用程序需要较大的结果表,或者您只需要按顺序向前移动数据,请使用不可滚动的光标。
- 仅在需要查看最新数据时,才将滚动光标设置为“敏感”。
如果您不需要查看其他游标或应用程序进程所做的更新,使用声明为“不敏感”的游标可以减少 Db2 的处理量。
如果您只需要查看部分最新更新,而无需查看插入操作的结果,请将可滚动光标声明为 SENSITIVE STATIC。
如果您需要查看所有最新更新和插入内容,请将可滚动光标声明为“敏感动态”。
- 为确保在使用可滚动光标进行定位更新和删除操作时获得最大的并发性,在绑定包含可更新可滚动光标的包和计划时,请指定 ISOLATION(CS) 和 CURRENTDATA(NO)。
- 在适当的情况下,使用“仅获取前几行 ”子句,并使用可滚动光标。在分布式环境中,当您需要检索有限数量的行时, FETCH FIRST n ROWS ONLY(仅获取前n行) 可以消除不必要的网络流量,从而提高使用DRDA访问的分布式查询的性能。
在本地环境中,如果您需要滚动浏览表格中有限的一组行,可以使用 FETCH FIRST n ROWS ONLY 来缩小结果表。
- 在分布式环境中,如果您不需要使用可滚动光标来修改数据,请在存储过程中处理光标。使用存储过程可以减少应用程序所需的流量。
- 在工作文件数据库中,创建足够大的表格空间,以便处理可滚动光标。Db2 使用已声明的临时表来处理以下类型的可滚动游标:
- 灵敏的静态滚动
- INSENSITIVE SCROLL
- 灵敏滚动,如果光标灵敏度设置为不灵敏。 符合只读光标标准的游标,其有效灵敏度为“不敏感”。
- 出于以下原因,我们经常进行更改:
- 您经常需要将可滚动光标打开的时间比不可滚动光标更长。
- 滚动光标增加了出现死锁的可能性,因为滚动光标允许以任何顺序访问和更新行。 频繁提交可以减少死锁的可能性。
- 为防止提交操作后光标关闭,请使用HOLD声明可滚动的光标。
- 请使用以下方法防止出现错误的空间不足提示:
- 检查应用程序,确保它们频繁提交。
- 关闭敏感的可滚动光标,一旦不再需要它们。
- 如有可能,请取消敏感可滚动光标的“按住”选项。
- 在数据共享环境中,将LOB表空间隔离在专用的缓冲池中。
当敏感的静态可滚动光标在表格中打开时, Db2 不允许重复使用该表格空间中的空间,以防止可滚动光标获取原始结果集中没有的新插入行。 虽然这是正常现象,但可能会导致看似错误的内存不足提示。 在数据共享环境中,访问LOB的交易可能会更加明显。
除了空间重复利用的问题,如果在数据共享环境中使用敏感的静态可滚动光标,并且插入的对象位于同一个缓冲池中,则可能会导致插入语句的锁争用。 无论对象是否具有敏感的静态滚动光标,也无论对象是否包含任何LOB列,这种情况都适用。 您可以通过隔离插入活动量大的对象,将其置于数据共享环境中的专用缓冲池中,从而将这一问题降到最低。
- 当基于表达式的索引需要索引访问时,不要指定敏感的静态可滚动光标。