查看: 4034|回复: 23

[性能调整] oracle 数据库优化高手进

[复制链接]
论坛徽章:
0
发表于 2011-4-19 09:56 | 显示全部楼层 |阅读模式
服务器配置:win2003
cpu:xeon 3.6g*4
内存:8g
硬盘:320g
数据库:10g


    在这服务器上有一个库,库中有2个表,平均每天以100w的数据新增,目前表大约为20亿数据,表以建立了分区和索引,一个做过优化的 sql,explain发现用到了索引,但一旦数据新增后它还是执行的full全表扫描,该sql where字段都建了合适的索引,有时候用,数据一旦新增很多又不用了,这个表同时在插入和新增会不会影响索引使用?

   网上找的资料都用了,什么analyze,什么增大sga,什么io检查,什么强制使用索引。貌似都不管用。

  小弟不是dba,但想了解下问下各位能帮助讨论下,如何让索引一直使用,如何在现有条件让库跑的更快,当然就硬件服务器配置来说这台服务器很垃圾。

以下是sql:
select f0219_057v as business,t5.F0005_002V as stockname,ss.F0219_001D as nowdate,ss.F0219_002V as nowtime,ss.F0219_005V as stockcode,ss.F0219_012N as price,(((bb.F0004_007N/ss.F0219_012N)-1)*100) as income
from (select t.F0219_001D,t.F0219_002V,t.F0219_005V,t.F0219_007V,t.F0219_012N,t.F0219_011N,t.f0219_057v from tb_policy_0219 t where t.F0219_001D=date '2011-04-12'  and f0219_006v=001002) ss left join  
( select * from tb_public_0005 t5 where t5.F0005_017V is not null) t5 on t5.F0005_001V=ss.F0219_005V  
inner join (select ort.F0004_005V,F0004_007N from tb_ori_0004 ort inner join (select tt.F0004_005V,max(OB_SEQ_ID) OB_SEQ_ID from tb_ori_0004 tt where tt.F0004_001D=date '2011-04-13' group by F0004_005V)ss on ort.OB_SEQ_ID=ss.OB_SEQ_ID and ort.F0004_001D=date '2011-04-13') bb on bb.F0004_005V=ss.F0219_005V order by income desc;

版主帮帮我,感激。
论坛徽章:
0
 楼主| 发表于 2011-4-19 10:00 | 显示全部楼层
怎么没有人讨论下啊,第一次发帖求助哟,给点支持吧

使用道具 举报

回复
认证徽章
论坛徽章:
9
ITPUB社区OCM联盟徽章
日期:2013-03-27 11:17:11奥运纪念徽章
日期:2013-06-18 09:13:52ITPUB社区千里马徽章
日期:2013-08-22 09:58:03大众
日期:2013-08-30 14:51:33路虎
日期:2013-12-01 18:25:42
发表于 2011-4-19 10:08 | 显示全部楼层
求你的库版本。
不知道你语句的 选择率是否合适使用索引。
如果数据 分布不均匀。WHERE T=1 只有1/10000那适合索引 如果WHERE T=1是9999/10000本来就是要走全表的。
如果是10G 话
statistics_level    为  TYPICAL的话会开启自动收集统计信息,所以不需要手动分析。analyze是9I的方式10G也可以
10G 一般用dbms_stat来收集。
10G
ORACLE默认的对修改10%以上的对象进行统计。我们可以在USER_TAB_MODIFICATIONS视图中找到本OWNER的对象更改情况,每15分钟SONM会去更行这个视图

另外B-TREE索引受NULL的影响。

使用道具 举报

回复
招聘 : Java研发
认证徽章
论坛徽章:
71
马上加薪
日期:2014-02-19 11:55:14蜘蛛蛋
日期:2012-12-26 18:16:01茶鸡蛋
日期:2012-11-16 08:12:48ITPUB 11周年纪念徽章
日期:2012-10-09 18:05:07奥运会纪念徽章:网球
日期:2012-08-23 14:58:08奥运会纪念徽章:沙滩排球
日期:2012-07-19 17:28:14版主2段
日期:2012-07-07 02:21:02咸鸭蛋
日期:2012-03-23 18:17:482012新春纪念徽章
日期:2012-02-13 15:13:512012新春纪念徽章
日期:2012-02-13 15:13:51
发表于 2011-4-19 10:13 | 显示全部楼层
1、这部分可以用分析函数
select ort.F0004_005V, F0004_007N
               from tb_ori_0004 ort
              inner join (select tt.F0004_005V, max(OB_SEQ_ID) OB_SEQ_ID
                           from tb_ori_0004 tt
                          where tt.F0004_001D = date '2011-04-13'
                          group by F0004_005V) ss on ort.OB_SEQ_ID =
                                                     ss.OB_SEQ_ID
                                                 and ort.F0004_001D = date
              '2011-04-13'

2、你的数据分布情况,你所谓的合适的索引,实际执行的情况等等信息不提供的话,没法猜着优化的。。。

使用道具 举报

回复
论坛徽章:
46
凯迪拉克
日期:2013-08-22 10:00:10Jeep
日期:2013-08-10 07:21:13ITPUB社区12周年站庆徽章
日期:2013-10-08 14:57:28ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282012新春纪念徽章
日期:2012-01-04 11:49:54ITPUB 11周年纪念徽章
日期:2012-10-09 18:05:07奥运会纪念徽章:体操
日期:2008-10-24 13:08:31会员2007贡献徽章
日期:2007-09-26 18:42:10马上加薪
日期:2014-04-11 09:34:11秀才
日期:2015-09-06 10:19:32
发表于 2011-4-19 10:41 | 显示全部楼层
4个表,分区、数据量、索引,提供详细点。

使用道具 举报

回复
论坛徽章:
0
发表于 2011-4-19 11:32 | 显示全部楼层
没有统计信息导致没有 使用正确的执行计划 是很常见的。

比如说,最后的分析时间是8点,现在查5点到7点的数据,CBO根据统计信息可以给出正确的执行计划。

但是来了新的数据,现在查10点到12点的,在缺乏统计信息的情况下,CBO很容易就走错。

定时分析一下把,另外 最好使用 DBMS_STAT 包 ,ANALYZED 比较陈旧,统计的时候会缺乏全局统计信息。

不建议

使用道具 举报

回复
论坛徽章:
86
2015中国数据库技术大会纪念徽章
日期:2015-04-24 16:04:24马上有车
日期:2014-02-19 11:55:14马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11优秀写手
日期:2013-12-18 09:29:11日产
日期:2013-10-17 08:44:39马自达
日期:2013-08-26 16:28:022013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-23 16:55:51马上有房
日期:2014-02-19 11:55:14
发表于 2011-4-19 11:35 | 显示全部楼层
索引扫描并不一定是最优选择啊

使用道具 举报

回复
论坛徽章:
0
发表于 2011-4-19 11:38 | 显示全部楼层
优化是一个全局的过程。 不能东一个西一个的乱弄。首先要搞清楚瓶颈在什么地方, 做做AWR,ADDM 看一下瓶颈在I0 还是CPU。 主要看TOP。 然后在具体分析。

    如果定位了SQL的问题的话,我看LZ的SQL使用了大量的嵌套,我认为嵌套查询的效率并不高,看能不能改写一下。 或者把执行接话贴出来看看

使用道具 举报

回复
论坛徽章:
0
 楼主| 发表于 2011-4-19 11:56 | 显示全部楼层

回复 #8 OCP潜伏者 的帖子

AWR,ADDM 怎么做,我估计在IO处,用执行计划在io处等待比较多。

sql语句的嵌套,这个哪怕我不嵌套它还是一直慢

同一个sql在其他服务器上没有做任何优化的库上跑的很快,只不过那个机器配置好些。主要是我现在找不到问题出在哪里。

使用道具 举报

回复
论坛徽章:
0
发表于 2011-4-19 12:37 | 显示全部楼层
awr 去GOOGLE一下把。 很简单的。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

SACC2019中国系统架构师大会

【数字转型 架构演进】SACC2019中国系统架构师大会,7折限时优惠重磅来袭!
2019年10月31日~11月2日第11届中国系统架构师大会(SACC2019)将在北京隆重召开。四大主线并行的演讲模式,1个主会场、20个技术专场、超千人参与的会议规模,100+来自互联网、金融、制造业、电商等领域的嘉宾阵容,将为广大参会者提供一场最具价值的技术交流盛会。

限时七折期:2019年8月31日前


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

大会官网>>
TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 
京ICP备09055130号-4  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表