ORACLE数据库优化理论探讨

2022-09-13 版权声明 我要投稿

数据库作为系统的核心, 其设计和应用对系统执行的效率和稳定性具有重大影响。因此在软件系统开发中, 数据库设计应遵循必要的数据库范式理论, 以减少冗余、保证数据的完整性与正确性。只有在合适的数据库产品上设计出合理的数据库模型, 才能降低整个系统的编程和维护难度, 提高系统的实际运行效率。本文主要从以下角度分析数据库性能优化技术。

1 ORACLE数据库的系统性能评估参数

DBA应该根据信息系统的类型注意考虑相关的数据库参数。

1.1 在线事务处理信息系统 (OLTP)

系统有频繁的Insert、Update操作, 需要确保数据库的并发性、可靠性和最终用户的速度, 考虑以下参数:数据库回滚段是否足够?建立索引、聚集、散列的必要性?系统全局区 (SGA) 大小是否合适?SQL语句是否高效?

1.2 数据仓库系统 (Data Warehousing)

主要任务是从ORACLE的大量数据中进行查询, 总结数据之间的相关规律。涉及以下参数:是否采用B*-索引或者bitmap索引?是否采用并行SQL查询?是否采用PL/SQL函数编写存储过程?是否需要建立并行数据库提高数据库的查询效率?

2 ORACLE数据库优化、参数调整

2.1设计数据结构和应用程序需要注意考虑是否应用O R A C L E数据库的分区功能;哪些频繁访问的数据库表应该建立索引;根据所需要的数据库资源决定应用程序采用Client/Server还是Browser/Web/Database体系结构

2.2 应用程序最终将通过SQL语句执行, SQL语句的执行效率是ORACLE数据库性能的决定因素

同一功能可以通过不同的SQL语句来实现, 但是不同的SQL语句执行效率不一样。SQL语句的调整需要注意以下几点。

(1) 尽量使用索引, 创建索引可以提高系统的性能。

第一, 通过创建唯一性索引, 可以保证数据库表中每一行数据的唯一性。

第二, 加快数据的检索速度。

第三, 加速表和表之间的连接, 有利于实现数据的参考完整性。

第四, 在使用分组和排序子句进行数据检索时, 减少查询中分组和排序的时间。

第五, 通过使用索引, 可以在查询的过程中, 使用优化隐藏器, 提高系统的性能。

(2) 选择联合查询的联合次序。

程序员首先需要选择要查询的主表, 因为主表需要对整个表数据进行扫描, 所以主表应该数据量最小。

(3) 子查询中尽量用where (NOT) exists代替IN或NOT IN语句。

(4) 尽量将视图查询转换为对数据表的直接查询以下几点。

(5) SHARED_POOL_RESERVED_SIZE参数, 该参数在SGA共享池中开辟一个连续的内存空间, 方便存放大的SQL程序包。

(6) DBMS_SHARED_POOL程序能够将某些频繁使用的存储过程“锁”在SQL区中, 方便随时利用, 大大提高最终用户的响应时间。

3 服务器内存的调整

在信息系统运行时可以对内存进行优化配置, DBA根据数据库运行状况对数据库系统全局区 (SGA区) 的数据缓冲区、日志缓冲区和共享池的大小进行调整;包括调整程序全局区 (PGA区) 的大小。值得注意的是, SGA区不能太大, 否则会占用操作系统使用的内存, 造成虚拟内存的页面交换, 影响系统运行。SGA的调整包括以下几点。

(1) 共享池:包括共享SQL区和数据字典缓冲区, 前者主要用于存放用户SQL命令, 后者主要用于存放数据库运行的动态信息。DBA通过执行语句:select (sum (pinsr eloa d s) ) /s u m (p i n s) "Li b C a c h e"f r om v$librarycache;查询共享SQL区的使用率。如果使用率<90%, 应该适当增加共享池的大小。通过执行语句:select (sum (getsget m i s s es-u s a ge-f i xed) ) /s u m (get s) "R ow Cache"from v$rowcache;查询数据字典缓冲区的使用率, 同样, 如果结果<90%, 应该适当增加共享池的大小。

(2) 数据缓冲区。通过语句:S E LE C T name, value FROM v$sysstat WHE RE name IN ('db block gets', 'consistent gets''physical reads') ;查询数据缓冲区的使用情况。使用命中率=1- (physical reads/ (db block gets+consistent gets) ) 。如果结果<90%应该适当增加数据缓冲区的大小。

(3) 日志缓冲区。执行语句:select name value from v$sysstat where name in ('redo entr ies', 'r edo log space r equests') ;查看日志缓冲区的使用。根据结果可以计算日志缓冲区的申请失败率:申请失败率=requests/entries, 结果如果大于0, 说明日志缓冲区开设过小, 应该增加日志缓冲区。

ORACLE数据库性能恶化表现为响应时间和等待时间过长。造成恶化的原因可能是多个因素共同影响, 要求DBA具备全面的专业技术和知识, 快速发现影响数据库性能的原因。同时, 可以利用优秀的数据库管理工具优化数据库性能:包括ORACLE数据库在线数据字典;操作系统工具;SQL语言跟踪工具;ORACLE Enterprise Manager (OEM) 图形用户管理界面;EXPLAIN PLAN—SQL语言优化命令, 帮助程序员写出高效的SQL语言。

总之, 应该从实际应用的角度, 不断开发应用较为全面的ORACLE数据库的优化技术, 争取消耗最低的成本, 得到最大的收益。

摘要:Oracle数据库是一种具有高可靠性、高安全性、高兼容性的大型关系数据库, 得到广泛应用, 要使Oracle数据库满足应用需求, 有效管理和利用数据, 较好地为业务服务, 对Oracle数据库优化显得尤为重要。

关键词:数据库,优化,ORACLE,SQL

参考文献

[1] 魏亚楠, 宋义秋.oracle数据库应用系统的性能优化[J].制造业自动化, 2010 (8) .

[2] 王雷, 曾蕴波, 王璐.Oracle数据库的性能调整与优化方法探析[J].航天器工程, 2008 (6) .

[3] 钟小权, 叶猛.Oracle数据库的SQL语句优化[J].计算机与现代化, 2011 (3) .

注:本文为网友上传,旨在传播知识,不代表本站观点,与本站立场无关。若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:iwenmi@163.com。举报文章