一般来说,日常运维对于整库的收集统计,安排再周末晚上执行,大多数情况可以满足业务需求。然而,有些表更新比较频繁或者压根没有收集过,需要每天收集统计或者临时收集一下。本文描述如何单独对表进行收集统计。
假设需要检查test用户下t1表是否有统计信息
select * from sysstats
where id IN
(
select object_id from dba_objects where
object_type='TABLE'
and owner = 'TEST'
and object_name='T1'
) ;
如果上面的SQL能查出数据,说明有统计信息,否则就没有统计信息,需要手工收集
select
'stat 100 on '
|| table_name ||
'('||column_name ||');'
from
USER_TAB_COLUMNS
where table_name ='T1'
and data_type <>'CLOB'
and data_type <>'BLOB';
stat 100 on T1(ALTITUDE);
stat 100 on T1(AMOUNT);
stat 100 on T1(ASSET_DEVICE_ID);
小提示,收集统计比较消耗服务器的资源,建议安排在业务非高峰期执行。
通常为了提高收集速度,可以临时调整SORT_BUF_SIZE的大小,建议可以使用
SF_SET_SESSION_PARA_VALUE('SORT_BUF_SIZE',2048);
文章
阅读量
获赞