浅谈ORACLE数据库的优化及提升
2009-07-02徐立溥
徐立溥
[摘要]Oracle数据库是一种使用广泛的数据库系统。当前,ORACLE作为大型数据库管理系统快速发展,但随即而来的是用户对Oracle的性能提出了更高的要求以求更好的发挥其强大的数据管理功能。由此,笔者将结合自身的经验,对Oracle数据库的优化理论基础,以及具体的优化方法进行探讨,希望对广大读者能有所启发。
[关键词]Oracle 数据库 参数优化 SQL
中图分类号:TP3文献标识码:A文章编号:1671-7597(2009)0520049-01
Oracle数据库是一种使用广泛的数据库系统。当前,ORACLE作为大型数据库管理系统快速发展,但随即而来的是用户对Oracle的性能提出了更高的要求以求更好的发挥其强大的数据管理功能。由此,笔者将结合自身的经验,对Oracle数据库的优化理论基础,以及具体的优化方法进行探讨,希望对广大读者能有所启发。
一、Oracle数据库优化理论基础
根据学界的观点,我们用绝对的数量作为绝对指标来定义Oracle数据库的优化是不科学的,实际上,我们应当用优化前后数据库的各种性能指标的对比来衡量Oracle数据库优化的结果。尤其是SQL语句的执行速度,SQL语句带来的系统负担,应用的响应速度,甚至应用所服务的终端用户的直接感受。于是据库实例级的调整,大多用来解决数据库结构性故障,相应地也能解决因为结构性故障带来的普遍性的性能问题。然而我们注意到,用户所真正关心的,切身感受到的单点数据库响应慢的问题往往是不良的SQL语句,过期的统计数据和其导致的不良的执行计划,不良的数据表结构,过度的触发器使用,不良的应用同步锁造成的。
二、Oracle数据库优化具体方法
1.参数优化。由于Oracle中参数过多,笔者在这里节选部分有代表意义的参数并对其优化进行介绍。
(1)CHECKPOINT-PROCESS参数。该参数决定CHPT后台进程是否被激活。在检查过程中所有数据文件的标题必须更新。这项任务通常由LGWR进程完成,把块写到磁盘则是DBWR进程的工作。如果在检查点中发现LGWR减慢,为消除LGWR正在进行的额外工作必须激活CHPT。
(2)DB_BLOCK_SIZE参数。该参数表示Oracle数据库块的大小,以字节为单位,典型值为2048或4096。如果根据数据库的行数设定该参数,将会减少输入输出。在某些含有大量顺序存取的应用程序中,将数据库块设定置得大些是有益的。
(3)LOG_FILES参数。该参数指定运行期间数据库可打开的日志文件数。若需要较大的SGA空间,而不需要多个日志文件,则可减少该值。
(4)OPTIMIZRER_MODE参数。若该参数的值为TRUE,则Oracle优化器选择基于规则的优化;若设置为COST,并且在数据字典中存在有统计信息,则优化器选择基于代价的优化方法进行优化;设置为FIRST_ROWS时,优化程序将选择响应时间最短的运行方案。
2.选择正确的服务模式。当并发用户数大于400时可以考虑采用mts模式;当并发用户数小于400时应当采用dedicate方式;当并发用户数大于400且系统内存资源可用时应当采用dedicate模式;当并发用户数小于400且内存资源不够用时应当采用mts模式。mts模式和dedicate横式的对比如表1所示。
3.采取统一的SQL程序。因为ORACLE在执行SQL文件时,首先将当前要执行的SQL文件与公共区域中保存的先前执行过的SQL文件进行比较,SQL文件相同时,就会跳过当前要执行的SQL文件的解析处理,这样通过减少解析次数就可以加快SQL文件的执行速度。
4.选取合适的SQL代码。在进行数据库操作时,同一结果可以用很多方法来实现。我们应当选取合适的SQL代码,使其更容易明了,并且运行速度更快。
5.加强对等待事件的跟踪。在Oracle数据库中,当一个进程或者该进程所代表的寄生于该进程的session在等待某个系统资源时,就会触发一个Oracle内部的事件。该事件将会被登记到v$session_wait,v$system_
wait的Oracle内部视图上,通过编写程序分时段定期跟踪该视图,可以收集定位出系统运行期内的资源瓶颈。通过系统的结构调整可以消除或者减弱该瓶颈对系统运行的影响。同时,也可以执行Oracle数据库系统自带的诊断分析工具stat spack来跟踪分析数据库系统的运行状态。
6.跟踪、优化不良的SQL语句。在绝大多数的数据库应用中,造成应用程序反应缓慢,系统资源消耗大的直接原因是不良的SQL语句。往往一个不良的SQL语句可以导致整个数据库系统高负荷运转,甚至对外暂停服务。所以数据库优化的重点应当集中于跟踪、优化不良的SQL语句。
7.优化设置控制文件的个数、位置及其备份。建议CONTROL FILE初始化参数中指定多个文件应大于2,并将控制文件镜像到不同位置,并要把这些控制文件备份到安全的磁盘中。
8.明确列名。使用SELECT取得的列名一定要明确指定,并且应当使抽出的记录尽量少。用SORT等的场合,ORACLE将必要的列的值放到WORK领域,因此,减少列数也就节约了I/O回数。
三、结束语
Oracle数据库的优化工作是一个长期的、复杂的、循环往复的工作过程。根据笔者的实战经验,上述方法能够起到提高ORACLE数据库性能以及提高ORACIE应用程序执行效率的作用。对于Oracle数据库的探索不会停止,其也必将在各个领域发挥越来越大的作用。在众多Oracle人员的努力之下,我国Oracle数据库水平定能迈上新的台阶。
参考文献:
[1]瓮正科、王新英著,Oracle8.X For Windows NT实用教程[M].北京:清华大学出版社,1999.
[2]Gaja krishna Vaidyanatha1 Orcale 性能优化技术内幕[M].北京:机械工业出版社,2002.
[3]王珊著,数据库系统概论[M].北京:高等教育出版社,2000.2.
[4]Gunt her N.The Practical Performance Analyst,McGraw-Hill,1998.