确定上次使用某个数据库对象的日期
上次使用某个对象的日期由上次引用的日期(又称为上次使用的日期)来指示。可提供上次引用索引、程序包、表、表数据分区和具体化查询表 (MQT) 的日期。
可以使用上次引用的日期来标识连续长时间未使用的对象,这些对象可能会被视作移除候选项。
上次引用的日期存储在该对象的相应目录表的 LASTUSED 列中,可通过该表的目录视图来访问此日期。目录中的用法信息由一个名为 db2lused(运行在数据库目录分区上的 LASTUSED 守护程序)的引擎可分派单元 (EDU) 进行更新。LASTUSED 守护程序每隔 15 分钟便收集所有分区中所有对象的使用信息,并更新相应目录表中的 LASTUSED 列以将信息写入到磁盘。给定对象的目录条目最多每天更新一次,这意味着在经过 24 小时的时间间隔之前,将不会再次检查相同对象。选择 15 分钟时间间隔是为了在最小程度上影响数据库服务器的性能,且此值不能由用户配置。对上次引用日期的更新是异步执行的,因此对象访问不会立即记录在目录中。
注: 如果目录表中的相应行已锁定,那么可能会延迟使用信息的更新,直至下一个 15 分钟收集时间间隔。此外,当数据库取消激活时,在取消激活之前,LASTUSED 守护程序未收集的任何用法信息(例如,自守护程序进行最后轮询后首次访问的任何对象)均无法写入到磁盘。请显式激活数据库,以使此功能行为正常。
当已经连续一段时间(例如,几个月)未使用某个对象时,使用上次引用的日期就有意义。上次引用的日期在下列情况下很有用:
- 表和表数据分区:可以帮助回收未使用的空间
- 索引:可以帮助回收未使用的空间,以避免进行不必要的插入和维护操作;它还可以减少索引要考虑的选项数,从而缩短编译时间
- 程序包:可以帮助检测未使用的程序包版本,可以释放这些版本
- MQT:可以帮助检测未使用的 MQT 以回收未使用的空间;或者帮助调查和了解未使用某个 MQT 的原因
下列示例描述了一些特定情况,上次引用的日期在这些情况下很有用:
- 为了能够节省空间和降低维护时间,每年都可以通过检查 SYSCAT.INDEXES 目录视图中的 LASTUSED 列,检查有关索引的上次使用信息。如果去年未使用某个索引,那么可以将该索引视作待删除索引。因为在某些情况下可能并不需要删除索引,所以最终还是由您决定是否删除某个索引。例如,您可能有一个表,大家都知道只有在紧急情况下或者在很少情况下才访问此表(在这些情况下,能够快速访问此表显得尤其重要);或者,表的索引可能是唯一的,用来强制施加唯一性约束,即使从未显式使用此索引也是如此。可以将上次使用的日期信息用来帮助您决定是否移除索引。
- 贵公司有一些内部应用程序,先前已将它们部署在数据库中,几个月或几年之后,它们已被替换或者不再使用。已引退的应用程序将创造节省空间的机会。可以使用上次使用的日期信息来标识不再使用、但是在应用程序已引退之后未清除的数据库对象。例如,这些数据库对象可能是一些表,存储用来填充 GUI 的值。可以在 SYSCAT.TABLES 目录视图的 LASTUSED 列中找到这些表的上次使用的日期,并且可以从此日期开始调查可移除以回收空间的表对象。
有关特定数据库对象的目录视图的 LASTUSED 列的更多信息(尤其是哪些操作导致了更新),请参阅下列主题:
- SYSCAT.DATAPARTITIONS 目录视图
- SYSCAT.INDEXES 目录视图
- SYSCAT.PACKAGES 目录视图
- SYSCAT.TABLES 目录视图