Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 35262|回复: 0

[默认分类] Oracle表与索引的分析及索引重建

[复制链接]
  • TA的每日心情
    开心
    2021-12-13 21:45
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2018-7-13 15:16:54 | 显示全部楼层 |阅读模式
    2010年12月31日





    1.分析表与索引(analyze 不会重建索引)





    analyze table tablename compute statistics

    等同于 analyze table tablename compute statistics for table for all indexes for all columns



    for table 的统计信息存在于视图:user_tables 、all_tables、dba_tables



    for all indexes 的统计信息存在于视图: user_indexes 、all_indexes、dba_indexes



    for all columns 的统计信息存在于视图:user_tab_columns、all_tab_columns、dba_tab_columns



    注:分析表与索引见 AnalyzeAllTable存储过程

    2、一般来讲可以采用以下三种方式来手工分析索引。
    analyze index idx_t validate structure:
    analyze index idx_t compute statistics:
    analyze index idx_t estimate statistics sample 10 percent

    1)analyze index idx_t validate structure:
    这段分析语句是用来分析索引的block中是否有坏块儿,那么根据分析我们可以得到索引的结构数据,这些数据会保留到
    index_stats中,来判断这个索引是否需要rebuild. 需要注意的是这样的分析是不会收集索引的统计信息的。

    2)validate structure有二种模式: online, offline, 一般来讲默认的方式是offline。
    当以offline的模式analyze索引时,会对table加一个表级共享锁,对目前table的一些实时DMl操作会产生一定的影响。
    而以online模式分析时候,则不会加任何lock,但在index_stats中是看不到任何信息的。

    3)analyze index idx_t compute statistics:
    用来统计索引的统计信息(全分析),主要为CBO服务。

    4)analyze index idx_t estimate statistics sample 10 percent
    主要是用来指定比例进行抽样分析,也是为CBO服务. 例中是抽样10%

    3.重建索引
    alter index index_name rebuild tablespace tablespace_name
    alter index index_name rebuild tablespace tablespace_name 加入表空间名,会将指定的索引移动到指定的表空间当中。

    注:
    analyze 操作只是统计信息,并将统计信息存放起来供日后分析SQL使用,不进行重建之类的具体实施性操作,因此要重建索引的话
    还是要用 alter index index_name rebuild

    4、其他的统计方法


    1)DBMS_STATS:这个当然是最强大的分析包了

    --创建统计信息历史保留表

    exec dbms_stats.create_stat_table(ownname => "scott",stattab => "stat_table");



    --导出整个scheme的统计信息

    exec dbms_stats.export_schema_stats(ownname => "scott",stattab => "stat_table");



    --分析scheme

    Exec dbms_stats.gather_schema_stats(ownname => "test",options => "GATHER AUTO",

                                           estimate_percent => dbms_stats.auto_sample_size,

                                           method_opt => "for all indexed columns",

                                           degree => 6 );



    --分析表

    exec dbms_stats.gather_table_stats(ownname => "TEST",tabname => "sm_user",estimate_percent => 10,method_opt=> "for all indexed columns") ;



    --分析索引

    exec dbms_stats.gather_index_stats(ownname => "TEST",indname => "pk_user_index",estimate_percent => "10",degree => "4") ;



    --如果发现执行计划走错,删除表的统计信息

    exec dbms_stats.delete_table_stats(ownname => "TEST",tabname => "SM_USER") ;



    --导入表的历史统计信息

    exec dbms_stats.import_table_stats(ownname => "TEST",tabname => "SM_USER",stattab => "stat_table") ;



    --如果进行分析后,大部分表的执行计划都走错,需要导回整个scheme的统计信息

    exec dbms_stats.import_schema_stats(ownname => "TEST",stattab => "SM_USER");



    --导入索引的统计信息

    exec dbms_stats.import_index_stats(ownname => "TEST",indname => "PK_USER_INDEX",stattab => "stat_table")





    analyze和dbms_stats不同的地方:

    analyze是同时更新表和索引的统计信息,而dbms_stats会先更新表的统计信息,然后再更新索引的统计信息,

    这里就有一个问题,就是当表的统计信息更新后,而索引的统计信息没有被更新,这时候cbo就有可能选择错误的plan




    2)DBMS_UTILITY.ANALYZE_SCHEMA:可直接分析SCHEMA中所有对象

       如:EXEC DBMS_UTILITY.ANALYZE_SCHEMA ("LTTFM","COMPUTE");




    3)DBMS_DDL.ANALYZE_OBJECT:收集对象的的统计信息




    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-4-20 04:38 , Processed in 0.355093 second(s), 37 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表