注册
如何单独对表进行收集统计
专栏/培训园地/ 文章详情 /

如何单独对表进行收集统计

干饭王 2024/03/28 774 1 0
摘要

背景需求

一般来说,日常运维对于整库的收集统计,安排再周末晚上执行,大多数情况可以满足业务需求。然而,有些表更新比较频繁或者压根没有收集过,需要每天收集统计或者临时收集一下。本文描述如何单独对表进行收集统计。

检查表上是否有统计信息

假设需要检查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);
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服