oracle 大表统计分析,oracle表的分析统计

41528d3028836879cd698677c3999917.giforacle表的分析统计

[总结] Oracle 表的分析统计 讨论一: 使用 dbms_stats 还是 analyze 自从 Oracle8.1.5 引入 dbms_stats 包, Oracle 及专家们就推荐使用 dbms_stats 取代 analyze。 理由如下: 1. dbms_stats 可以并行分析 2. dbms_stats 有自动分析的功能(alter table monitor ) 3. analyze 分析统计信息的有些时候不准确 第 1,2 比较好理解,且第 2 点实际上在 VLDB(Very Large Database) 中是最吸引人的;3 以前比较模糊,看了 metalink236935.1 解释,analyze 在分析 Partition 表的时候,有时候会计 算出不准确的 Global statistics 。 原因是 dbms_stats 会实在的去分析表全局统计信息(当指 定参数);而 analyze 是将表分区(局部)的 statistics 汇总计算成表全局 statistics ,可能导 致误差。 没有分区表的情况下两个都可以使用(看个人习惯,当然也可以分区表使用 dbms_stats, 其他使用 analyze )。 不过在一些论坛上也有看到 dbms_stats 分析之后出现统计数据不准确的情况,而且确实有 bug 在 dbms_stats 上( 可能和版本有关,有待查明),应该是少数情况,需要我们注意。 还有, 一般不建议 analyze 和 dbms_stats 混用。 实验: 如果在分区表上用 dbms_stats 统计后,再 使用 analyze table 来统计,就会出现表信息不被更新的问题。 删除统计信息后再分析就更新 了,或者直接用 dbms_stats 分析。 dbms_stats 目前有遇到的 bug 例子如下: dbms_stats 所有的功能包如下: GATHER_INDEX_STATS:分析索引信息 GATHER_TABLE_STATS:分析表信息,当 cascade 为 true 时,分析表、列(索引)信息 GATHER_SCHEMA_STATS:分析方案信息 GATHER_DATABASE_STATS:分析数据库信息 GATHER_SYSTEM_STATS:分析系统信息 EXPORT_COLUMN_STATS:导出列的分析信息 EXPORT_INDEX_STATS:导出索引分析信息 EXPORT_SYSTEM_STATS:导出系统分析信息 EXPORT_TABLE_STATS:导出表分析信息 EXPORT_SCHEMA_STATS:导出方案分析信息 EXPORT_DATABASE_STATS:导出数据库分析信息 IMPORT_COLUMN_STATS:导入列分析信息 IMPORT_INDEX_STATS:导入索引分析信息 IMPORT_SYSTEM_STATS:导入系统分析信息 IMPORT_TABLE_STATS:导入表分析信息 IMPORT_SCHEMA_STATS:导入方案分析信息 IMPORT_DATABASE_STATS:导入数据库分析信息 讨论二: analyze 的使用方法 (分区表建议使用 dbms_stats) 可以参考 Analyze 的三大功能: 搜集和删除索引、表和簇的统计信息 验证表、索引和簇的结构 鉴定表和簇的行迁移(migrated rows)和行链接(chained rows) CBO 是 Oracle 推荐使用的优化方式,要想使用好 CBO ,使 SQL 语句发挥最大效能,必 须保证统计数据的及时性。统计信息的生成可以有完全计算法和抽样估算法。SQL 例句如下: 完全计算法: analyze table abc compute statistics; 抽样估算法(抽样 20%): analyze table abc estimate statistics sample 20 percent; 对表作完全计算所花的时间相当于做全表扫描,抽样估算法由于采用抽样,比完全计算法的生 成统计速度要快,如果不是要求要有非常精确的数据的话,尽量采用抽样分析法。建议对表分 析采用抽样估算,对索引分析可以采用完全计算。 Analyze 分析 table, index 等需要的权限: 必须在你自己的 Schema( 方案) 中或者有 ANALYZE ANY 系统权限 。 比如: grant analyze any to tolywang ; revoke analyze any from tolywang ; Analyze 使用的局限及改善: Analyze 命令每次仅仅能影响到一个 table(或 index), 如果想通过 analyze 为整个 schema 或整个数据库中的所有表生成统计数字。可以使用 analyze 的批处理方式( 脚本)。 Analyze 分析命令解析: ANALYZE { TABLE [ schema.]table [ PARTITION ( partition ) | SUBPARTITION ( subpartition ) ] | INDEX [ schema. ]index [ PARTITION ( partition ) | SUBPARTITION ( subpartition ) ] | CLUSTER [ schema. ]cluster }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值