• 博客访问: 1034158
  • 博文数量: 442
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-30 18:35
个人简介

暂无介绍

ITPUB论坛APP

ITPUB论坛APP



APP发帖 享双倍积分

文章分类

全部博文(442)

文章存档

2011年(22)

2010年(13)

2008年(22)

2007年(229)

2006年(106)

2005年(50)

我的朋友
微信关注

IT168企业级官微



微信号:IT168qiye



系统架构师大会



微信号:SACC2013

发布时间:2011-03-29 19:33:12

今天帮同事优化了一条含distinct操作的SQL,因为这个SQL在数据仓库环境中非常经典,因此有比较拿出来说一说。 [@more@]原SQL:sys@dwrac1> select count(distinct a.ip) 2 from (select t.ip 3 from creater_user.popt_total_login_month_his t 4 where t.data_desc = '2010-02-01') a, (select t.ip 5 from creater_user.popt_total_login_month_his t 6 where t.data_desc between 7 '2010-03-01' and 8 '2011-12-31') b 9 where ......【阅读全文】

阅读(4646) | 评论(0) | 转发(0)

发布时间:2011-03-24 15:37:14

前段时间DW系统切换到RAC集群时,出现了严重的enq: TS问题。[@more@]这次问题的现象是原来运行正常的任务忽然变得很慢,分析执行计划后发现是因为执行计划出错,SQL走笛卡尔连接消耗了大量的临时表空间,从而引起了enq: TS等待。这次问题的直接解决方法就是修复执行计划,避免笛卡尔连接,但是仅仅这样做的话,还是存在风险。因为这个问题的根本原因是因为对临时表空间的大量消耗导致,如果以后有超大数据量的计算,那么不可避免需要大量的临时表空间,这个时候,enq: TS也就无法避免了。不过这个问题只在rac出现,单实例不会出现这种问题......【阅读全文】

阅读(2252) | 评论(0) | 转发(0)

发布时间:2011-03-21 18:25:02

今天帮助同事优化了一个SQL,效果显著。优化方式很简单,没有修改执行计划,没有添加hint,只是根据实际情况增加一些条件。[@more@]原来的SQL是这样的:sys@dwrac1> select b.*, a.login_date 2 from user1.tb1 a, user1.tb2 b 3 where 4 a.login_date >= b.call_date 5 and a.login_date < to_char(to_date(b.call_date,'yyyy-mm-dd')+30,'yyyy-mm-dd') 6 and a.game_name = b.game_id 7 and a.popt_id = b.popt_id;Elapsed: 00:00:00.01Execution Plan----------------------------------------------------......【阅读全文】

阅读(1458) | 评论(0) | 转发(0)

发布时间:2011-03-04 19:52:06

最近在做一些DW相关的优化工作,发现跑得很慢SQL大多数都和包含聚合运算的关联update相关。很多人开发人员不清楚update的原则,按照习惯直接把update语句写成类似如下形式:update a set a.value=(select count(1) from b where a.col=b.col);[@more@]实际上,这个update语句大概运行逻辑是这样的:for c in (select * from a) loop select count(1) from b where b.col=c.col; update ......end loop;可以看到,如果没有合适的索引,需要对b表全表扫描n次(n等于a表满足条件的记录数),如果b表很大或者a表满足条件的记录很多,这个S......【阅读全文】

阅读(2001) | 评论(0) | 转发(0)

发布时间:2011-02-28 17:53:19

对于insert...select...这种dml语句,如何设置合适的并行方式和并行度,需要仔细测试。[@more@]测试分两大部分:写入数据量大和写入数据量小。一、大数据量写入分四个场景进行测试:1. dml和query都不并行truncate table myuser.test;alter session disable parallel dml;var p_date varchar2(32)exec :p_date:='2011-02-21' insert into myuser.test a (ds_name, pid, game_name, login_date, sub_ord, loginnum, ip) select '999402-' || substr(:p_date, 3, 2) || substr(:p_date, 6, 2) || substr(:p_date, 9, 2) ds_name, ......【阅读全文】

阅读(2171) | 评论(0) | 转发(0)
给主人留下些什么吧!~~
留言热议
请登录后留言。

登录 注册