在日常维护及系统优化过程中,我们有时需要分析哪些数据库对象是使用频率较高的,哪些对象是长期不用的,从而有依据的制定优化策略。对访问频率高的,尽量做到物理模型最优(如PI是最经常用来关联的,数据分布是均匀的等)。而那些长期不用的对象(表/视图),可以考虑删除。使用频率高的字段和使用频率低的字段进行表拆分...
那么如何获取Teardata表/视图/字段的访问频率信息呢?下面做详细说明:
[@]
按照下列步骤打开/关闭开关:
1、 用secureCRT类的工具连接到数据库节点机; 2、 输入cnsterm 6 打开窗口6; 3、 输入 start dbscontrol 命令,打开dbscontrol工具; 4、 出现Started 'dbscontrol' in window 1提示后,按 Ctl+C 退出窗口6; 5、 输入cnsterm 1 切换到窗口1; 6、 可以看到 Release 13.00.01.11 Version 13.00.01.11 DBSControl Utility (Dec 99) 等信息,说明dbscontrol已成功开启 7、输入display gen 命令,可以看到第30个选项为 ObjectUseCountCollectRate,即为我们需要修改的参数,其值默认是0(即为关闭),可将其改为15(即表示每15分钟更新一次访问频率信息)来打开开关; 8、输入命令modify gen 30 =15 9、输入命令QUIT; 出现如下提示: The DBS Control Record has been modified. Enter: 'W' to write to the DBS Control GDO or 'Q' to terminate with no update: 10、W 上述修改生效。 上述操作后,系统将停止收集表访问信息。DBSControl中的系统参数:ObjectUseCountCollectRate,单位是分钟,缺省值为0,数据字典中的AccessCount,LastAccessTimeStamp数据不更新。
设置为非零值,即生效。需要关闭时,重新将此值设置为0即可。 注:该值设置为10以上,否则会影响性能。上述开关打开一段时间后(如一个月),我们可以查看对象(表/视图/字段)被使用的频率信息:
sel a.databasename,a.tablename,LastAccessTimeStamp,sum(currentperm) from dbc.tables a,dbc.tablesize b where a.databasename = 'TEST' and a.tablename = 'BRD_OFF_WARN_MON' --and a.accesscount < 10 and a.LastAccessTimeStamp < cast('2011-03-01 00:00:00' as timestamp(0)) and a.databasename = b.databasename and a.tablename = b.tablename And a.tablekind = 'T' group by 1,2,3 order by 4 desc,1,2,3同样,要看表的字段是否被使用过,将上述dbc.tables表改为dbc.columns查询即可。