多重子查询/大结果集查询问题:

问题接此帖http://www.itpub.net/273652.html

上次问题通过调整SGA/SQL语句得到优化[最终情况:oracle关闭重起后,程序第一次执行存储过程(需要大量读取物理文件):1500秒,等第2次跑时150秒(数据进入sga区了),完全符合一切oracle教科书的内容!]

现在的问题是上次问题的综合,

起因: 在我们的应用系统(OLTP,其他的事务都比较小且并发用户也比较多)中有一个查询重复的需求,比如企业/市/省/全国各级管理部门,每一级都需要查本级别管辖范围内是否存在重复的人员记录,程序人员采用多重子查询来实现,其中select嵌套5层,子查询的结果集返回数也很巨大,不会小于20W行;

也曾尝试使用临时表,但临时表(insert *** select )单独跑select 还比较快,12秒吧,但是insert的过程比较慢,得20多分钟

btw:临时表这个对象放在哪了呢?对它的操作(尤其是大结果集时)容易产生什么瓶颈呢?临时表后边也是接着一大堆的查询条件,有可能还有优化的,为什么单独执行SELECT比较快,而INSERT就慢呢?而且事务实在巨大,还有临时表嵌套的情况啊!

(后来没法子,又回到了多重子查询的老路上来,明知有问题啊!)

测试环境(以下都是测试机上的运行结果)/真实环境(年底上线,且还需要从SQL SERVER中迁移):

服务器: P4 2.8 内存2G/ IBM H85 POWERPC 4颗/内存 12G

软件:win2k+oracle8.1.7.0/ aix 4.3.3+ oracle8.1.7.4

表现:

oracle关闭重起后,程序第一次执行存储过程(需要大量读取物理文件):1500秒,等第2次跑时150秒(数据进入sga区了)

虽然第2次执行存储过程比较快的,可是每换一个部门,意即:查询条件改变,就需要重新的1500秒!这个很显然不能满足客户的要求,而且管理部门众多,测试的是一个部门的一个查询,实际的情况是N多的府县道台,他们各有各的查询,到时候岂不是歇菜了啊!

附件内容:

1、存储过程(Ora_PersonProc.sql/Ora_PersddonProc.sql)和最终的SELECT语句(XXXXXX.sql);

2、数据库物理文件情况(data.jpg):

TEMP/RBS表空间都有扩展,怀疑有大量的磁盘排序/回滚段请求导致扩展(因为事务请求的数据实在太多了)

3、statspack报告(statspack3_4.txt):

是第2次运行同样的存储过程时的前后SNAP,这个就比较快的(3分钟左右),初步分析了一下:问题语句不言自明,就是这个

Buffer Gets    Executions  Gets per Exec  % Total  Hash Value

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

29,912,794            1   29,912,794.0   100.0   4192360910

select et.* from (  Select enta.*,sd.FName as FPersonTypeName f

rom (  Select ed.*,svs.FSpecialityName,svs.FSpecialityTypeName,

svt.FName As FTechName ,svt.FLevel as FTechLevel,  sve.FName as

FEduName,sve.FLevel As FEduLevel from (  select ente.*, ent.FAd

dress,ent.FName  as FEnterpriseName from (  select ed3.* from  (

还有:

Execute to Parse %:  -46.32

是什么意思呢?

各位老大,还给看看有什么别的问题么?

4、分析表时报错信息(analyze_error.txt):ora-00600

谢谢大家!

oracle结果集过大,多重子查询/大结果集查询问题相关推荐

  1. Oracle数据库多重子查询嵌套的坑

    在Oracle数据库中多重子查询的使用 代码如下: SELECT T.*, ROWNUM RNFROM (SELECT B.*,NVL(A.AMOUNT, 0) AMOUNT,V.FULLNAME,D ...

  2. 怎样学好Oracle子查询,Oracle学习(六):子查询

    Oracle学习(6):子查询 子查询 为何要用子查询 SQL> --查询工资比SCOTT高的员工信息 SQL> --1. 知道SCOTT的工资 SQL> select sal fr ...

  3. 多重子查询提取每次子查询的SQL语句

    之前用的oracle大型数据库,写的sql都是依据oracle的.移动端部分用的不能是oracle数据库,只能采用小型数据库,现场采用db2.         db2大小只能论k为单位,很多基本的sq ...

  4. 怎样将1900-01-00变成-_《转生成蜘蛛又怎样》第2集预告:人类到来,蜘蛛子遭遇大危机...

    哈喽,大家好,我是木子. 在本次更新的一月新番中,有一部内定的"黑马之作",它就是<转生成蜘蛛又怎样!>.这是一部奇幻.穿越.冒险.励志题材的动漫,同时也有漫画在连载, ...

  5. mysql查出的结果太大 php_如何解决PHP使用mysql_query查询超大结果集超内存问题

    再使用mysql_query查询超大结果集的时候会出现超出内存限制的致命错误,这是因为mysql_query采用的是查询全部结果然后把结果集全部缓存到内存中的方式. mysql的查询还提供了另外一种查 ...

  6. 【从零开始学习Oracle数据库】(3)函数与子查询和连接查询

    #-- --查询语句的基本格式 --select 字段 1 , 字段 2 , 字段 3 , 表达式 , 函数 , ... --from 表名 --where 条件 --group by 列名 --ha ...

  7. Rails中多重子表多条件查询

    在项目创建时为了逻辑上的简单,采用了多级子表嵌套;而且底层子表大多是静态表,即没有用has_one或belongs_to作为相互关系的. 在某个对象的搜索涉及到3个底层子表中的字段的比较,很难用whe ...

  8. oracle子查询 select语句,select查询之三:子查询

    Select语句的总结构: Select [字段] [限制条件] from [数据表]  /子查询[嵌套查询] where [筛选条件]  /子查询[嵌套查询] group by[分组字段]  /子查 ...

  9. oracle星型查询,优化星型查询

    当你使用星型查询时,你需要考虑以下两点: 调整星型查询 使用星型转换 调整星型查询为了获得星型查询的最佳性能,遵循一些基本准则是非常重要的:应该为事实表的每一个外键列都创建位图索引. 初始化参数STA ...

最新文章

  1. SQL Server日志清除的两种方法 .
  2. 仿照redis写的nginx开机画面
  3. 正则表达式的坑与调试
  4. 什么是脱离文档流?什么是文档流?
  5. 【问链财经-区块链基础知识系列】 第三十八课 以太坊智能合约账户全解析
  6. 程序员面试100题之八:不要被阶乘吓倒(二进制表示中最低位1的位置 )
  7. 事件流调试器查看Retract事件
  8. forEach和for in
  9. Java 实现Https访问工具类 跳过ssl证书验证
  10. Unity网络--HLAPI(1):服务器客户端变量同步,脏标识以及定制特性SyncVar
  11. mysql打印语句_抓取mysql、redis、mongodb、http等协议并打印语句
  12. MySQL与PostgreSQL比较,哪个更好、我们该选用哪个?
  13. java窗体加入声音_我用JAVA写好了一个窗体游戏,怎么加背景音乐?
  14. mysql 去重 性能比较_mysql 去重方法distinct 与 group by 性能比较 | 学步园
  15. 饮冰三年-人工智能-Python-11之HelloWorld
  16. plc通讯的握手信号_PLC工程师教你:从原理搞懂RS485串口通讯
  17. 最小二乘支持向量机(LSSVM)推导
  18. 解决上传 Gitee 后图片显示不出来
  19. 支付宝对账数据下载及解析
  20. php抢票程序,HTML实现抢票功能(设定时间打开抢票的页面)

热门文章

  1. android中使用jni对字符串加解密实现分析
  2. 我的2015学习总结及2016的技术规划(2016.02)
  3. 【JSTL】--c:out演示--drp213
  4. Sencha Touch 打包javaScript 和 css
  5. VS2012+7600配置驱动环境
  6. 深入探究函数返回局部变量
  7. 关于Delphi中DLL,BPL等无法调试的问题
  8. [转]Java 关闭线程的安全方法
  9. 埋点、数仓到中台:数据体系的从0到1
  10. 听说这里有让你膜拜的产品方法论?