免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6392 | 回复: 15
打印 上一主题 下一主题

[求教]问一下Oracle分区表的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-09-24 10:40 |只看该作者 |倒序浏览
不明白Oracle对partitioned object定义。是不是只有显式定义,跨多个表空间的才能算是分区对象呢?

我的环境里根分区是从由两块硬盘组成的卷组中分出来的逻辑卷。这样数据库中应该就有可能出现跨两个硬盘的数据表了吧,这种情况会算是分区表么?

问题背景:在Oracle11g中我试过用两种不同的方式来为CBO收集数据库统计数据:
1、DBMS_UTILITY.ANALYZE_SCHEMA
2、DBMS_STATS.GATHER_SCHEMA_STATS
结果发现#2的分析效果要好于#1,因为用#1分析后通过statespack会看到有些sql执行时间,cpu使用都很高。google发现#1和#2的区别是
Oracle metalink236935.1:
analyze在分析Partition表的时候,有时候会计算出不准确的Global statistics .原因是,dbms_stats会实在的去分析表全局统计信息(当指定参数);而analyze是将表分区(局部)的statistics 汇总计算成表全局statistics ,可能导致误差。


我的schema里面没有显式创建分区对象,所以想请教是不是会有其他情况默认隐式的分区对象。或者对于这两个统计数据分析工具还有其他区别么?

论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
2 [报告]
发表于 2010-09-24 11:03 |只看该作者
我没有用过分区表。

论坛徽章:
0
3 [报告]
发表于 2010-09-24 12:13 |只看该作者
谢谢版大关注。 请问版大了解DBMS_UTILITY.Analyze_Schema和DBMS_STATS这两个数据库分析工具还有啥区别不?

我关注的问题其实就是为什么这两个工具达到的数据库性能为什么有差别。按照oracle解释,能看出来的就是对分区表效果不同。

论坛徽章:
3
CU大牛徽章
日期:2013-09-18 15:16:55CU大牛徽章
日期:2013-09-18 15:18:22CU大牛徽章
日期:2013-09-18 15:18:43
4 [报告]
发表于 2010-09-24 22:36 |只看该作者
怎么来说呢

对于10g以后的版本来说 一般建议使用dbms_stats来收集统计信息

毕竟anlayze是以前的方式方法


至于具体差别  是很细微的

论坛徽章:
0
5 [报告]
发表于 2010-09-25 10:47 |只看该作者
为什么不显式创建分区表呢?

论坛徽章:
0
6 [报告]
发表于 2010-09-25 11:29 |只看该作者
回复 4# duolanshizhe


    根据测试结果来看,这两个工具是有差别的。不知道我的环境所产生差别的原因是不是Oracle官方给出的解释。

论坛徽章:
3
CU大牛徽章
日期:2013-09-18 15:16:55CU大牛徽章
日期:2013-09-18 15:18:22CU大牛徽章
日期:2013-09-18 15:18:43
7 [报告]
发表于 2010-09-25 13:43 |只看该作者
不知道你是如何测试的,是否可以给出相关实例

不过总的来说

dbms_stats主要是收集CBO优化器所需的相关统计信息
而analyze除了收集优化其所需的统计信息之外,还收集一些其它信息,比如

- Space Usage information :

. EMPTY_BLOCKS,
. AVG_SPACE,
. CHAIN_CNT

- Information on freelist blocks

. AVG_SPACE_FREELIST_BLOCKS,
. NUM_FREELIST_BLOCKS

论坛徽章:
3
CU大牛徽章
日期:2013-09-18 15:16:55CU大牛徽章
日期:2013-09-18 15:18:22CU大牛徽章
日期:2013-09-18 15:18:43
8 [报告]
发表于 2010-09-25 13:46 |只看该作者
本帖最后由 duolanshizhe 于 2010-09-25 13:55 编辑

至于这两种方式在分区表的区别主要是

dbms_stats支持在多级别收集统计信息,而analyze只能在最低级别收集信息,打个比方啊

dbms_stats针对分区表可以在全表级收集统计信息,而analyze只能在分区级别收集信息,然后针对所有分区的统计信息进行聚合才能得到全表级统计信息,这样就会带来误差,因为采样比例的问题!

论坛徽章:
3
CU大牛徽章
日期:2013-09-18 15:16:55CU大牛徽章
日期:2013-09-18 15:18:22CU大牛徽章
日期:2013-09-18 15:18:43
9 [报告]
发表于 2010-09-25 13:47 |只看该作者
不知道 楼主是否明白了些

论坛徽章:
0
10 [报告]
发表于 2010-09-25 16:01 |只看该作者
回复 8# duolanshizhe


    十分感谢你的回复。测试的情况实这样的,我们实际上是测一个web应用,跑三个小时压力测试同时会抓取statespack分析oracle的情况。我发现用DBMS_STATS包做了数据库优化,statespake就会看到如下log。而如果用DBMS_UTILITY.ANALYZE_SCHEMA来做,这条sql消耗的CPU时间就有增大至6倍。当然,其他sql消耗cpu也会增大。所以才想有没有可能是这两个工具包的差别导致的。看你的分析,其实DBMS_UTILITY.ANALYZE_SCHEMA收集的信息更多,起码DBMS_STATS能收集的统计信息它一样能收集。可能差别就是对分区表的支持。我查过这个web应用所创建的schema,没有显式创建为分区表的。
    CPU                  CPU per             Elapsd                     Old
  Time (s)   Executions  Exec (s)  %Total   Time (s)    Buffer Gets  Hash Value
---------- ------------ ---------- ------ ---------- --------------- ----------
    744.25      131,274       0.01   10.2     773.81       8,529,532 3465652836
Module: JDBC Thin Client
SELECT T1.MEMBER_ID, T1.CATGROUP_ID, T1.FIELD1, T1.FIELD2, T1.LA
STUPDATE, T1.MARKFORDELETE, T1.IDENTIFIER, T1.OID, T1.OPTCOUNTER
, CATGRPREL.SEQUENCE FROM  CATGRPREL, STORECGRP, CATGROUP  T1 WH
ERE T1.MARKFORDELETE = 0 AND CATGRPREL.CATALOG_ID = :1  AND CATG
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP