在日常维护及系统优化过程中,我们有时需要分析哪些数据库对象是使用频率较高的,哪些对象是长期不用的,从而有依据的制定优化策略。对访问频率高的,尽量做到物理模型最优(如PI是最经常用来关联的,数据分布是均匀的等)。而那些长期不用的对象(表/视图),可以考虑删除。使用频率高的字段和使用频率低的字段进行表拆分...
那么如何获取Teardata表/视图/字段的访问频率信息呢?下面做详细说明:
[@more@]
按照下列步骤打开/关闭开关:
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查询即可。