其神若何,月射寒江。

oracle调优技巧

上一篇 / 下一篇  2010-10-11 16:37:40 / 个人分类:性能测试

oracle数据库平时开发有许多要注意的地方。调优的技巧也很多。

1.1.1  调优案例与方法

1.1.1.1            判断执行的效率

 

判断主要依据

1、             采用的扫描方式

观察扫描方式,

扫描方式可以知道是否采用有效的索引进行

全表扫描是最差的方式

2、             Cost代价判断

根据这个值的变化来判断优化前后的效果

 

 

1.1.1.2            抽取子查询分析执行计划

例如:

select

t.id,t.code,t.name

,(select count(*) from ccl_bd_netdata where id=t.netdata) co

 from ccl_msg_httprequest t

 

分析方法

如果分析的时候,没有显示出访问所有表的方式

可以先主表,后各子查询

 

先分析主表

select

t.id,t.code,t.name

--,(select count(*) from ccl_bd_netdata where id=t.netdata) co

 from ccl_msg_httprequest t

 

再分析各列子查询

select count(*) from ccl_bd_netdata where id=1

 

1.1.1.3            更新数据优化

问题:数据库中增加、删除、修改数据一般有两部分的主要开销,一部分是更新数据本身,一部分是更新索引。

一般更新数据本身可优化空间比较小,更新索引可优化空间比较大。

 

优化过程:

1、             优化由索引带来的效率问题

执行更新前失效索引,执行更新,然后再启用索引

2、             优化由sql带来的效率

可以分析执行计划,调整语句

删除,可以考虑truncate table来删除表数据

 

1.1.1.4            执行多次比执行一次慢

在应用中,如果能够一次执行完成,最好一次执行。

执行多次,肯定比执行一次耗费资源。

每次执行的时候,都必须重新准备statement execute等过程,涉及到底层就是更多的数据库交互。更多的oracle解释sql,执行sql.

 

本地机器实验,

在提取结果前的准备工作,假如连接已经创建好了。

每次大概要25毫秒,17000就要耗费275秒左右。这些都是额外开销。

如果是更加复杂的sql,可能耗费更多。

 

 

 

longl=(newDate()).getTime();

          ps=this.newCon.prepareStatement(sqlOld);

          ps.setString(1, p);

          rs=ps.executeQuery();

          aa=(newDate()).getTime()-l+aa;

          System.out.println(aa);

          String s=null;

          while(rs.next()){

             //System.out.println();

           for(inti=1;i<80;i++){

              s=rs.getString(i);

              //System.out.print(s);

           }

          }


TAG:

 

评分:0

我来说两句

xiaohanjiang

xiaohanjiang

River.liu又名小寒江。曾经从事多年JAVA软件开发工作,这几年一直从事软件测试工作。多年来,一直致力于软件工程、软件开发、软件测试方面的研究。不喜欢自称高手,不愿意自封资深;科学研究讲究的是务实、实践。真理、真知才是硬道理。茫茫海洋,我只希望我的每个理念能游弋于业界之间。我的思想能在你的脑海中徜徉。

日历

« 2024-03-23  
     12
3456789
10111213141516
17181920212223
24252627282930
31      

数据统计

  • 访问量: 39231
  • 日志数: 52
  • 建立时间: 2009-12-15
  • 更新时间: 2011-03-14

RSS订阅

Open Toolbar