免费注册 查看新帖 |

Chinaunix

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

一个实际系统中的奇怪问题,请斑竹指点,关于不同系统的效率问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-05-21 09:44 |只看该作者 |倒序浏览
是这样的,目前我们有两个数据库,都是ORACLE9.2.0.1.0,一个是在WINDOWS2000 PRO上,一个是TNS for Compaq Tru64 UNIX: Version 9.2.0.1.0, SGA和PGA的设置也基本一致,两个库的数据,索引相同,都是同一文件EXPORT进去的,结果执行同样一条语句发现效率差好远,执行计划如下:

论坛徽章:
0
2 [报告]
发表于 2004-05-21 09:48 |只看该作者

一个实际系统中的奇怪问题,请斑竹指点,关于不同系统的效率问题

这是在UNIX上执行的结果,要20秒
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE
1 0 SORT (UNIQUE)
2 1 CONNECT BY (WITHOUT FILTERING)
3 2 COUNT
4 3 NESTED LOOPS
5 4 NESTED LOOPS
6 5 TABLE ACCESS (FULL) OF 'QRY_PHONES'
7 5 TABLE ACCESS (BY INDEX ROWID) OF 'QRY_PHONEUSERI
NFO'

8 7 INDEX (UNIQUE SCAN) OF 'SYS_C002933' (UNIQUE)
9 4 TABLE ACCESS (BY INDEX ROWID) OF 'QRY_USERNAME'
10 9 INDEX (RANGE SCAN) OF 'XIE1QRY_USERNAME' (NON-UN
IQUE)





Statistics
----------------------------------------------------------
0 recursive calls
120124 db block gets
297238 consistent gets
2192 physical reads
0 redo size
21079 bytes sent via SQL*Net to client
2221 bytes received via SQL*Net from client
25 SQL*Net roundtrips to/from client
1 sorts (memory)
1 sorts (disk)
353 rows processed

这是在WINDOWS上的结果,只有1秒
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE
1 0 SORT (UNIQUE)
2 1 CONNECT BY (WITHOUT FILTERING)
3 2 COUNT
4 3 NESTED LOOPS
5 4 NESTED LOOPS
6 5 TABLE ACCESS (FULL) OF 'QRY_PHONES'
7 5 TABLE ACCESS (BY INDEX ROWID) OF 'QRY_PHONEUSERI
NFO'

8 7 INDEX (UNIQUE SCAN) OF 'XPKQRY_PHONEUSERINFO'
(UNIQUE)

9 4 TABLE ACCESS (BY INDEX ROWID) OF 'QRY_USERNAME'
10 9 INDEX (RANGE SCAN) OF 'XIE1QRY_USERNAME' (NON-UN
IQUE)





Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
297326 consistent gets
0 physical reads
0 redo size
26130 bytes sent via SQL*Net to client
2978 bytes received via SQL*Net from client
25 SQL*Net roundtrips to/from client
2 sorts (memory)
0 sorts (disk)
360 rows processed

两个查询的执行计划是一样的,为什么第一个库中db block gets 为120124 ,physical reads 为2192 ,而第二个库却都为零呢?可是两个系统的内存都是1G,而且Data buffer和SGA,PGA设置都是差不多,为什么第一个库不去读缓存,而直接去读db block 呢,我很是郁闷,哪位高手能帮我分析一下吗?

我的SQL是这样的,用了CONNECT BY,进行了排序:
SELECT DISTINCT T.LAYER, T.PHONEUSERID ID, U.USERNAME NAME , NVL(T.PARENTID, 0) PARENTID
FROM QRY_PHONEUSERINFO T,QRY_USERNAME U,QRY_PHONES P
WHERE T.PHONEUSERID = U.PHONEUSERID AND T.PHONEUSERID = P.PHONEUSERID
START WITH (T.PARENTID = 0 OR T.PARENTID is NULL)
AND (P.Telephone LIKE '3%' )
AND U.AliasType = '0'
CONNECT BY PRIOR T.PHONEUSERID = T.PARENTID


是不是问题出在系统上,UNIX交换区为3G,系统内存是1G,感觉没有用上系统内存,一直在磁盘上进行排序,我对UNIX不太熟,哪个高手有这方面的经验?帮帮忙,多谢!

上面的语句改成:
SELECT DISTINCT T.LAYER, T.PHONEUSERID ID, U.USERNAME NAME , NVL(T.PARENTID, 0) PARENTID
FROM QRY_PHONEUSERINFO T,QRY_USERNAME U,QRY_PHONES P
WHERE T.PHONEUSERID = U.PHONEUSERID AND T.PHONEUSERID = P.PHONEUSERID
AND (T.PARENTID = 0 OR T.PARENTID is NULL)
AND (P.Telephone LIKE '3%' )
AND U.AliasType = '0'
不进行排序后,就不会有db block和屋里读取:
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE
1 0 SORT (UNIQUE)
2 1 TABLE ACCESS (BY INDEX ROWID) OF 'QRY_USERNAME'
3 2 NESTED LOOPS
4 3 NESTED LOOPS
5 4 TABLE ACCESS (BY INDEX ROWID) OF 'QRY_PHONES'
6 5 INDEX (RANGE SCAN) OF 'XIE2QRY_PHONES' (NON-UNIQ
UE)

7 4 TABLE ACCESS (BY INDEX ROWID) OF 'QRY_PHONEUSERINF
O'

8 7 INDEX (UNIQUE SCAN) OF 'SYS_C002933' (UNIQUE)
9 3 INDEX (RANGE SCAN) OF 'XIE1QRY_USERNAME' (NON-UNIQUE
)





Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
5681 consistent gets
0 physical reads
0 redo size
15927 bytes sent via SQL*Net to client
1735 bytes received via SQL*Net from client
19 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
256 rows processed
所以问题还是出现在排序上,排序没有在内存中进行,而是在磁盘上,是不是更能证实跟UNIX的配置有关吧?

论坛徽章:
0
3 [报告]
发表于 2004-05-21 10:21 |只看该作者

一个实际系统中的奇怪问题,请斑竹指点,关于不同系统的效率问题

排序?
large pool,sort_area_size都一样吗?还有你的windows是否重复执行这条语句了?如果重复执行,很多东西已经在内存里,当然不需要physical read了。

论坛徽章:
0
4 [报告]
发表于 2004-05-21 10:33 |只看该作者

一个实际系统中的奇怪问题,请斑竹指点,关于不同系统的效率问题

都一样的,我每次在UNIX执行都是一言效果,SGA都不小,有500M

论坛徽章:
0
5 [报告]
发表于 2004-05-21 10:48 |只看该作者

一个实际系统中的奇怪问题,请斑竹指点,关于不同系统的效率问题

sort跟sga总容量没什么关系,试试加大large pool

论坛徽章:
0
6 [报告]
发表于 2004-05-21 11:46 |只看该作者

一个实际系统中的奇怪问题,请斑竹指点,关于不同系统的效率问题

看看你两个数据库中的init.ora参数,数据块的大小是否不一致
这也是影响性能的因素

论坛徽章:
0
7 [报告]
发表于 2004-05-27 13:51 |只看该作者

一个实际系统中的奇怪问题,请斑竹指点,关于不同系统的效率问题

结果呢? 学习学习
我现在不知道该怎么测试和评价一个oracle的性能如何呢:(

论坛徽章:
0
8 [报告]
发表于 2004-05-27 14:00 |只看该作者

一个实际系统中的奇怪问题,请斑竹指点,关于不同系统的效率问题

[quote="txfy"]sort跟sga总容量没什么关系,试试加大large pool[/quote]

和large pool有什么关系吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP