oracle收集统计计划,oracle收集统计信息之analyze

oracle收集统计信息之analyze

1.analyze 收集表,索引的统计信息,现在oracle不推荐用analyze收集统计信息

收集表的统计信息Analyze table tablename compute statistics;

收集索引聚簇统计信息Analyze index|cluster indexname estimate statistics;

对于大表收集统计信息相当于全表扫描,耗费时间和资源,可以抽样估算法来搜集生成统计速度要快,如果不是要求要有精确数据的话,尽量采用抽样分析法。

nalyze table tablename estimate statistics sample 20 percent;

删除表的统计信息:

ANALYZE TABLE tablename DELETE STATISTICS

实验:

查询jobs表的统计信息以及最后一次统计时间

SQL> select TABLE_NAME,NUM_ROWS,BLOCKS,LAST_ANALYZED from user_tables where table_name='JOBS';

TABLE_NAME                       NUM_ROWS     BLOCKS LAST_ANALYZED

------------------------------ ---------- ---------- --------------

JOBS                                   19          5 17-7月 -12

分析表jobs

SQL> analyze table jobs compute statistics;

表已分析。

可以看到jobs的最后一次统计时间变成了29-1月 -13

SQL> select TABLE_NAME,NUM_ROWS,BLOCKS,LAST_ANALYZED from user_tables where table_name='JOBS';

TABLE_NAME                       NUM_ROWS     BLOCKS LAST_ANALYZED

------------------------------ ---------- ---------- --------------

JOBS                                   19          5 29-1月 -13

删除jobs表的统计信息

SQL> analyze table jobs delete statistics;

表已分析。

查看统计信息已经被删除了

SQL> select TABLE_NAME,NUM_ROWS,BLOCKS,LAST_ANALYZED from user_table where table_name='JOBS'

TABLE_NAME                       NUM_ROWS     BLOCKS LAST_ANALYZED

------------------------------ ---------- ---------- --------------

JOBS

利用抽样收集jobs表的统计信息:

SQL> analyze table jobs estimate statistics sample 20 percent;

表已分析。

再次查看jobs表的统计信息,统计同样被收集:

SQL> select TABLE_NAME,NUM_ROWS,BLOCKS,LAST_ANALYZED from user_tables where table_name='JOBS';

TABLE_NAME                       NUM_ROWS     BLOCKS LAST_ANALYZED

------------------------------ ---------- ---------- --------------

JOBS                                   19          5 29-1月 -13

SQL>

用analyze统计表的统计信息会是shared pool缓存的sql失效:

查询的sql

SQL>  select count(*) from jobs;

COUNT(*)

----------

19

查看该sql在相关信息可以看到sql执行1次解析一次

SQL> select sql_text,sql_id,hash_value,executions exec,loads,invalidations inva

id from v$sqlarea where sql_text like '&text%';

输入 text 的值:  select count

原值    1: select sql_text,sql_id,hash_value,executions exec,loads,invalidation

invalid from v$sqlarea where sql_text like '&text%'

新值    1: select sql_text,sql_id,hash_value,executions exec,loads,invalidation

invalid from v$sqlarea where sql_text like 'select count%'

SQL_TEXT                       SQL_ID        HASH_VALUE       EXEC      LOADS

------------------------------ ------------- ---------- ---------- ----------

INVALID

----------

select count(*) from jab  8r5sp8cjcpqan  583719252          1          1

0

SQL>

再次分析表jobs

SQL> analyze table jobs compute statistics;

表已分析。

再次执行查询的sql并查看sql在v$sqlarea情况发现sql又被解析了一次,并失效一次这说明用analyze收集表的信息可以使shared pool相关对象的sql失效

SQL>  select count(*) from jobs;

COUNT(*)

----------

19

SQL> select sql_text,sql_id,hash_value,executions exec,loads,invalidations inva

id from v$sqlarea where sql_text like '&text%';

输入 text 的值:  select count

原值    1: select sql_text,sql_id,hash_value,executions exec,loads,invalidation

invalid from v$sqlarea where sql_text like '&text%'

新值    1: select sql_text,sql_id,hash_value,executions exec,loads,invalidation

invalid from v$sqlarea where sql_text like 'select count%'

SQL_TEXT                       SQL_ID        HASH_VALUE       EXEC      LOADS

------------------------------ ------------- ---------- ---------- ----------

INVALID

----------

select count(*) from jobs   8r5sp8cjcpqan  583719252          1          2

1

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值