其神若何,月射寒江。
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: