数据库效率优化
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.1.1数据库效率优化
在系统设计中,从客户信息数据集市的数据库规划层面着手,有针对性地进行系统的数据库表空间以及数据文件等的优化设计,主要方案有: 尽量减少对数据库的IO操作次数和其它消耗资源的操作
对于ORACLE数据库来说,磁盘IO操作一直是比较耗费资源的操作,是性能的瓶颈,很多优化技术和优化方案就围绕如何减少磁盘IO操作展开。如果能够减少IO操作的次数,其实就意味着性能的优化。对于程序开发人员来说,减少数据库的IO操作主要包括手段有:优化业务逻辑或程序逻辑,减少访问相关表的次数;尽量用表关联来替代子查询;尽量避免使用游标;中间数据操作尽量在内存操作数据而不是将数据回写硬盘。
同理,对于其它比较消耗资源的操作,比如带有DISTINCT,UNION,MINUS,INTERSECT,ORDER BY的SQL语句会启动SQL引擎执行耗费资源的排序(SORT)功能,比较耗费资源。DISTINCT需要一次排序操作,而其他的至少需要执行两次排序。通常,带有UNION,MINUS ,INTERSECT的SQL语句都可以用其他方式来替代。如果你的数据库的SORT_AREA_SIZE调配得好,使用UNION ,MINUS,INTERSECT也是可以考虑的,毕竟它们的可读性很强。另外可以简化业务或语句的逻辑。另外,数据库日志功能比较耗费资源,如果条件允许可以通过NOLOGING的HINT来优化语句性能。另外APPEND的hint 可以通过追加的方式插入数据,提高数据插入性能。
构造临时表以尽量减少对大表的访问
●对于大表的操作一向是很非常耗费资源的操作,除非迫不得已一般尽量
减少对大表的访问,能够减少大表访问的方法有建立临时表,程序的中
间操作只对临时表进行操作,只是在数据初始读入和最终数据写入时才
访问大表。另外可建立公共临时表供其它程序读取以减少对大表的直接
读取。由于临时表的数据插入和读取也需要IO代价,因此是否采用临
时表需要根据具体情况来权衡。
并行处理
●并行处理可以充分利用硬件资源提高程序的运行效率,对于并行处理
ORACLE有相关技术支持并行操作。比如ORACLE的并行游标,PARALLEL HINT,根据这些并行技术的适用条件加以合理利用将大大提高程序的性能。需要注意的是并行处理的特点能够充分利用相关硬件资源(主要是CPU),如果硬件资源本来就利用的很充分没有闲置,则并行处理并不能提高整个系统的性能。
利用索引、分区等数据库技术
●索引和大表分区是ORACLE对于性能优化的重要手段,充分利用好这
两个手段是最基本的优化方法。
●索引就是加快检索表中数据的方法。数据库的索引类似于书籍的索引。
在书籍中,索引允许用户不必翻阅完整个书就能迅速地找到所需要的信息。在数据库中,索引也允许数据库程序迅速地找到表中的数据,而不必扫描整个数据库表。利用索引优化性能应该注意以下地方:
1)避免在索引列上使用计算或函数
WHERE子句中,如果索引列是函数的一部分,优化器将不使用索引而使用全表扫描。
2)WHERE条件中尽量要使用索引的第一个列
如果索引是组合索引,它的第一个列(leading column,头列)被where子句引用时,如果需要优化器会选择使用该索引,其它列则不能保证。
3)避免比较不匹配的数据类型
比较不匹配的数据类型由于ORACLE自动采用的数据类型转换函数,因而使查询可能不能够使用索引。
4)如果通过引用索引的where过滤条件不能过滤出较多的数据(超过选取表数据量的8%-10%),ORACLE优化器将采用全表扫描(由于全表扫描能够采用多数据块同时读的技术,此时全表扫描的效率高于走索引。)
5)优化索引数量。虽然使用索引能得到查询效率的提高,但是我们也必须注意到它的代价。索引需要空间来存储,也需要定期维护,每
当有记录在表中增减或索引列被修改时,索引本身也会被修改。这意味
着每条记录的INSERT ,DELETE ,UPDATE将为此多付出4 ,5
次的磁盘I/O 。因为索引需要额外的存储空间和处理,那些不必要的索
引反而会使数据库反应时间变慢。因此统筹安排索引的字段和减少索引
的数据也是性能优化的一个重要手段。
6)大表分区的使用:对于大表的操作一般比较困难,是数据库优化的重点,分区表就是将大表按照分区字段拆分成物理上一张张的
小表,但在逻辑上还是一张表,对于用户的使用是透明的,能够很
大程度上提升该表的操作性能。但不是所有的大表都适合做分区表,
必须是有适合分区的分区字段,该字段(或组合)必须常被当作过
滤条件,很少变动。
尽量批量处理数据而避免游标的使用
●游标的特点是使用简单,程序逻辑清晰,但其逐条处理的特点使运行性
能并不高,对于大数据量操作更是严重。因此对于大数量操作尽量避免
使用游标改用批量处理。
统计信息的处理
●统计信息是Oracle CBO优化器存在的基石,收集尽可能多的对象信息
和系统信息,才能让Oracle做出最正确的SQL执行计划。
有些情况下,虽然收集了统计信息但是优化器依然做出不正确的执行路径。在其他尝试都无效的情况下,可以给出问题的表导入一个人工修改后的统计信息。