日期:2014-05-16  浏览次数:20432 次

高级SQL优化(一) ——《12年资深DBA教你Oracle开发与优化——性能优化部分》

目录:

Oracle数据完整性和锁机制 
索引及优化之表分析 
表分析、约束及表间关系 
Oracle体系结构1
Oracle体系结构2 
海量数据库及分区1 
海量数据库及分区2 
海量数据库及分区3 
海量数据库及分区4 
高级SQL优化(一) 
PPT和源码下载:    http://sishuok.com/forum/posts/list/6365.html
配套视频课程
    Oracle性能优化 http://sishuok.com/product/601 
    海量数据库和高级SQL优化 http://sishuok.com/product/602
 
SQL优化简介
一般在应用中, 糟糕的SQL语句是造成系统性能低下的最主要原因,例如大小写的不统一、同样的SQL语句不同的写法等。而且,随着数据量的增加,情况会变得越来越严重。(题外话:优秀的Oracle数据库优化人才,是任何公司都稀缺的)
  SQL优化又称SQL调节,其步骤一般包括:
 
SQL调节的目标
 
SQL调节包括三大目标:降低负载、均衡负载和并行化负载。
 
l降低负载:即寻找更高效的途径来完成相同的功能
如某个非大表(小于2000万行数据数据或小于2G大小的单表),常规查询需要访问的数据实践中90%情况下是不会超过20%的,此时建立合理的索引是有效的方法之一
l均衡负载:即应该把任务分时段均衡调度
如一般系统白天是访问高峰,如果此时备份任务、批处理任务或报表数据抽取任务也在这个时段则易造成负载峰值现象,正确的做法应该是把备份任务、批处理任务和报表数据抽取任务放到晚上进行处理,或采用并行化策略
l并行化负载:即大数据量的查询访问需要使用并发策略
如在数据仓库环境中应该多使用并发策略,此举可以明显减少响应时间
 
 
SQL优化阶段
  
 
使用OEM发现顶级SQL
  
 
在OEM中,选择性能->其它监视链接->定级活动,如下图:
  
 
不要用*代替所有列名
  
 
指定仅仅需要的列名与使用*对比:
时间:359/1327=27.05%  CUP耗费: 4092121327/6413227637=63.81%
IO耗费: 29601/110117=26.88% 可见大幅降低I/O从而降低响应时间!
 
 
SQL优化技巧
使用TRUNCATE代替DELETE
  Oralce执行DELETE后会使用UNDO表空间存放被删除的信息以便恢复,如果之后用户使用ROLLBACK而不是COMMIT,则Oralce将利用该UNDO表空间中的数据进行恢复。当使用TRUNCATE时,Oracle不会将删除的数据放入UNDO表空间,因而速度要快很多。当要删除某个表中的全部数据时,应该使用TRUNCATE而不是不带WHERE条件的DELETE。语法如下:
 TRUNCATE TABLE table_name [DROP|REUSE STORAGE]
 DROP STORAGE为默认的方式,表示收回被删除的表空间
 REUSER STORAGE表示保留被删除的空间以供该表的新数据使用
 
 应用开发中,可以编写一个子程序让其动态的清除空表,以供调用。
默认PCTFREE为10,假定为5,high-water mark是一个存储段分配多少存储器的标记。