Oracle数据库性能优化分析
摘 要 Oracle 数据库是目前电力信息系统应用在为广泛的大型关系型数据库之一,成几何级数增长的数据可能会导致数据库性能的下降,本文从SQL语句的优化、内存的调整、磁盘I/O的调整三方面阐述数据库优化方案,针对电力大型业务系统数据库优化方案的综合应用,可以保证系统的高效运行。
【关键词】ORACLE 优化 SQL 内存
Oracle数据库是目前电力信息系统应用最广泛的大型关系型数据库,在实际应用中,随着数据库数据量的增大,访问量的增大,数据库系统性能将会下降,严重影响相关业务专责对信息系统的使用效率,对Oracle数据库进行性能调整,成为保障其高效运行的基础。
1 SQL语句的优化
SQL语句的执行效率是影响Oracle数据库执行效率的一个重要因素,通过对SQL语句的优化调整,能很好地提高数据库系统性能。
1.1 选择合适的联合次序
当SQL语句包含多个表联结时,表的联结次序是非常重要的。在联结中,驱动表示紧跟在WHERE子句后面的第一个表,该表包含能够去除大多数行的过滤器,选择的联结次序应该让最少数目的行参加到与其他表的联结中。
1.2 有效的WHERE子句
WHERE子句中的选择性条件可以显著减少SQL语句在一个查询周期内得到的数据量,所以在构建WHERE子句时,遵循一些原则可以提高语句的执行效率:
1.2.1 尽可能少的使用通配符
如果在WHERE子句中有通配符,则需要对整个数据列进行模式匹配来检索数据,即数据库只能跳过索引并进行一次全表扫描。
1.2.2 使用WHERE语句代替HAVE语句
WHERE子句在一开始就限制了被检索的行数,而HAVE子句则需要检索比需要的还要多的数据,会加重求和和排序的负担。
1.2.3 执行有效的子查询
如果子查询有选择的WHERE子句,最好使用“IN子句”;如果父查询中包括选择性的WHERE子句,最好使用“EXISTS子句”。
1.3 高效的索引策略
索引是对一个表遍历的快速方法,它只需要查找必要的数据行,而不需要进行全表扫描。如果在一个表中强调行的唯一性,则可以对这个表使用主索引,作为主索引的列必须是非空的和唯一的。除了主索引外,还可以定义几个次索引,附加的次索引将会增强SQL语句的查询性能。
2 Oracle内存调整
2.1 共享池的调整优化
共享池主要由库告诉缓冲和数据字典告诉缓存两个区域组成。库高速缓存用于保存SQL和PL/SQL代码及其分析、执行计划等信息,Oracle处理SQL语句时,会创建分析树,对其进行句法和语义的分析,并检查对象权限;然后对SQL进行优化,生成执行计划。分析树和执行计划将在语句第一次执行前存储在库高速缓存中,将来处理相同语句时,仅需要在库高速缓存中找到相应的语句分析树和执行计划,直接执行语句即可,提高了系统的响应速度。数据字典高速缓存主要用于保存数据库对象信息及用户权限等信息。共享池大小是否合适,主要体现在库缓冲区和数据字典告诉缓冲区的命中率上,库缓存命中率应该高于99%,而数据字段缓存命中率应达到95%~99%,为了提高命中率,需要增加实例的共享池尺寸。
2.2 缓冲区高速缓存的调整优化
在用户首次请求数据时,Oracle从磁盘读取数据并存放于缓存区高速缓存中,然后再从数据缓冲区中将数据返回给用户。当用户再次请求时,如果数据在数据缓冲区中,则从其中将数据直接返回给用户,降低了查询时间。在数据库运行中,保证在缓冲区中存有尽量多的用户请求的数据,减少从磁盘读取数据的次数,可以大大提高数据的操作性能。缓冲区告诉缓存越大,磁盘的I/O就越少,系统的性能就越好。数据库缓冲区大小是否合适,主要体现在数据缓冲区命中率上,数据命中率应在90%以上,否则就需要分配更多的数据缓冲区。
2.3 PGA内存的调整优化
PGA是Oracle在启动一个服务器进程时创建的非共享内存区,他主要用于内存密集型任务,比如GROUP BY,ORDER BY及散列联结等。通过调整PGA_AGGREGATE_TARGET参数,设置内存限额,来控制数据库中排序和散列操作的效果。如果PGA_AGGREGATE_TARGET参数过低,可供排序等操作的内存过小,排序数据将在临时表空间中进行,此时就需要对磁盘进行I/O操作,数据库的响应时间将会延长。因此,如果需要执行高效的排序或散列操作,该参数需要设置为较高水平。PGA_AGGREGATE_TARGET参数的一个重要指标是PGA的命中率,通常情况效,改数值应该高于95%,即保证绝大多数的排序操作在内存中进行。
3 磁盘I/O的调整
磁盘的I/O速度对整个Oracle数据库的性能有深刻的影响,如果系统中存在严重的I/O竞争,就需要对磁盘I/O进行有效的调整优化:
(1)分散数据库文件和重做日志文件,避免他们之间的磁盘竞争,还可以达到均衡磁盘负载的目的。
(2)使用Oracle分区技术将较大的表数据分散到不同的数据文件中。良好的分区可以讲数据传输对磁盘I/O竞争均匀地分散开,避免了查询时的全表扫描,提高系统的I/O性能。
(3)索引的优化设计。利用索引行记录定位,减少磁盘的I/O,从而达到加快数据库访问速度,提高系统性能的目的
4 结论
在日常应用中,数据库的性能变差往往是几个问题共同作用导致的,需要数据库管理员根据实际情况,全面分析以上提到的各个方面,对各种优化手段综合应用,才能对Oracle数据库进行有效调整,从根本上提高数据库的使用效率,获得系统的最优性能。
作者单位
新疆信息产业有限责任公司 新疆维吾尔族自治区乌鲁木齐市 830002