语句效率问题

kickken 2012-09-11 01:32:19
我有一段语句执行需要3分多钟,而在另一台服务器上执行则只需要10几秒。
10秒能执行完的服务器临时表空间为4G固定大小, 3分钟的临时表空间为512m动态大小,不知道是不是跟这个有关系

trace结果如下
--------------------------------------------------------------------------------
--------------

| Id | Operation | Name | Rows | Bytes | Cost (%CP
U)| Time |

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

| 0 | SELECT STATEMENT | | 16 | 2480 | 434 (
5)| 00:00:06 |

| 1 | SORT ORDER BY | | 16 | 2480 | 434 (
5)| 00:00:06 |

|* 2 | HASH JOIN | | 16 | 2480 | 433 (
4)| 00:00:06 |

| 3 | NESTED LOOPS | | 13 | 1599 | 390 (
5)| 00:00:05 |

|* 4 | TABLE ACCESS FULL | PT_PART | 4151 | 397K| 386 (
4)| 00:00:05 |

|* 5 | TABLE ACCESS BY INDEX ROWID| PT_PART | 1 | 25 | 1 (
0)| 00:00:01 |

|* 6 | INDEX UNIQUE SCAN | SYS_C005515 | 1 | | 0 (
0)| 00:00:01 |

|* 7 | TABLE ACCESS FULL | PT_PRICE | 8087 | 252K| 43 (
3)| 00:00:01 |

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


Predicate Information (identified by operation id):
---------------------------------------------------

2 - access("B"."STYLE_NO"="B"."PART_NO")
4 - filter("B"."BRAND"='B' AND "B"."YEAR"='H' AND "B"."COMP_CD"='ACREX')
5 - filter("B"."BRAND"='B' AND "B"."YEAR"='H')
6 - access("B"."COMP_CD"='ACREX' AND "PART_NO"="B"."PART_NO")
filter("ETS_PTZ_GETAVAILSTOCKSET"("COMP_CD",'H1001',"PART_NO",'N')>0)
7 - filter("B"."END_DT"='9999-99-99')

Note
-----
- dynamic sampling used for this statement


Statistics
----------------------------------------------------------
8456 recursive calls
0 db block gets
23930063 consistent gets
0 physical reads
7264 redo size
65874 bytes sent via SQL*Net to client
1482 bytes received via SQL*Net from client
51 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
736 rows processed
...全文
67 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
fw0124 2012-09-11
  • 打赏
  • 举报
回复
导过来后执行下全schema的统计分析

begin
dbms_stats.gather_schema_stats('YOUR_SCHEMA_NAME');
end;
kickken 2012-09-11
  • 打赏
  • 举报
回复
比较后发现10几秒的没有 dynamic sampling used for this statement 这个
应该是表信息没有搜集,重新 analyze table 后提示消失,速度恢复了。
另,这个是10几秒那个库里导出来再倒入到新库的,表的统计信息要重新分析吗?
其他查询好像都正常。
软件钢琴师 2012-09-11
  • 打赏
  • 举报
回复
有一定关系,但不是决定性的,要看两个服务器上表的结构 是不是一样的 ,时间长的那个服务器上,表有没有建索引?分区啊 什么的 ,都要看一下的
fw0124 2012-09-11
  • 打赏
  • 举报
回复
在排序的时候有可能会用到临时表空间,也许会有关系。
10秒能执行完的服务器上的执行计划呢?
还有尝试下先在表格上执行数据分析
dbms_stats.gather_table_stats('SCHEMA_NAME', 'TABLE_NAME');
在进行查询

3,492

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧