浅谈ORACLE数据库的性能和优化
2018-05-16彭明
彭明
摘要:Oracle作为优良的数据库管理工具已经在各个行业被广泛使用,并为企业创造了客观的商业价值。本文论述了如何优化Oracle性能,从而高效地管理和使用这些Oracle数据。
关键词:Oracle;性能;优化
1 Oracle数据库简介
数据库顾名思义就是数据仓库,是按某种规则和方法组织起来的“数据”的“集合”。数据集合按照人的意愿进行处理,实现数据共享、减少冗余、数据集中控制、保持数据一致性和可维护性,以确保数据的安全性和可靠性等功能。数据库管理系统Database Management System(简写DBMS),它是数据库的管理工具,用户按照工具定义设计数据库中数据存储规则和方案,并对数据进行增删改查操作。常见DBMS有:MySQL、Oracle、DB2、Sql Server等。其中Oracle在数据存取性能、安全性上表现出色,广泛应用于大中型企业的数据管理。
2 Oracle性能的概念
何为Oracle性能?Oracle性能是指Oracle事务的响应时间和并发量,并发量是单位时间内Oracle的数据吞吐量。Oracle执行大部分磁盘IO和数据处理任务,影响着关联的应用程序的数据利用率和使用效果。随着计算机技术和软件应用的更新升级,Oracle设计也朝着规模化,大型化发展,数据的存取量和并发量越来越大,对Oracle的负载和性能要求更高,Oracle性能管理和调优就成了DBA(数据库管理者)要着重考虑的事情。在压缩软硬件成本投入的情况下,最大化Oracle数据管理效果,减少资源消耗,确保数据库高效运行,这是DBA优化Oracle性能的目的。
3 Oracle优化方案
影响Oracle性能的因素很多,硬件环境、自身应用程序的配置和优化工具使用、数据库构成元素(数据文件、分区、数据表、字段等)和结构设计、SQL语句的优劣、关联的应用程序都会影响Oracle的性能。以下是我总结的几种优化方案。
3.1 硬件的优化
1.硬件环境的优化
硬件是Oracle的载体,Oracle安装和使用对硬件也有基本要求,满足基本要求,Oracle才能正常工作,更好的硬件能够提升和发挥Oracle的性能。例如:快速稳定的网络传输环境、更高效的内存、CPU处理和磁盘管理能力的服务器。
服务器可以使用磁盘阵列RAID优化Oracle性能。RAID是由多磁盘(一个阵列)组成的磁盘系统。RAID技术可以处理Oracle成倍增加了写操作和并行处理多个读操作,提高Oracle的读写性能。数据在各个阵列盘之间相互备份,保证了数据的安全性和事务日志的冗余性。
2.Oracle文件磁盘存储方案
Oracle由数据文件、控制文件、日志文件三种文件组成。Oracle分区技术决定数据文件储存路径,将每个文件分散存储,让数据均匀分布在的磁盘中,不仅减少了磁盘I/O开销,还提高了Oracle的安全性,利于故障恢复。另外,把活跃和不活跃的数据表分别存储到不同的数据文件中,让I/O资源的分配更加高效,也减少了的磁盘碎片的产生。总之,好的存储方案有效地平衡磁盘的数据存储量,优化了Oracle对磁盘的利用率,对I/O访问进行分流,提高I/O 利用率,从而减轻Oracle负载。
3.2关联Oracle的应用程序优化
应用程序的功能都是基于对数据的增删改查的处理。比如:游戲账号的登录和游戏中的人物的移动,就涉及账号表的查询和屏幕坐标数据的创建、修改。应用程序设计者在对Oracle性能方面优化要以确保数据安全和功能完善的情况下,尽量把数据本地化为原则。
(1)不必要的数据不要在Oracle中存储,记录数据可以文件的形式(TXT、DOC、XLS格式文件)储存在本地计算机中,减少了对数据库的访问(比如游戏角色的位置坐标)。
(2)优化应用程序的SQL命令,比如:执行多个查询SQL,Oracle和客户端的连接反复处于开/闭状态,开销Oracle内存资源、增加响应时间。要解决这个问题,可以使用SQL过程或者事务,让连接可以反复重用。另外,过程、函数、事务的代码中不要使用游标SQL语句,因为游标执行时,Oracle会将游标指令调入内存,降低读写能力。
(3)应用程序其它优化措施。如果是B/S结构的网站应用,开发者可以使用缓存Cookies技术,缓存Cookies不用频繁的从Oracle查询下载数据,使用本地第一次获取的数据;如果是.Net应用程序,可以采用LINQ to SQL和数据集技术,它将Oracle中的表转化为实例化类,提高了存取访问速度。另外,开发者将SQL语句写入Oracle服务器端脚本中比直接写入程序代码中编译成DLL调入内存在执行速度上要快一些。
3.3 数据表的设计优化
数据表是存储数据的最小“容器”了。基于范式设计合适的数据表,可以消除冗余,节约空间,使得数据容易维护、移植。拆分大表变为小表,让表“瘦身”,能够减少查询时间,防止小脚穿大鞋,提高Oracle性能。
1.字段设计
表由字段构成列,每个字段都有自己的属性,比如字段大小,设置合适的字段大小,对查询表时分配内存资源有一定影响,比如,姓名列设置VARCHAR2(10)比设置成VARCHAR2(50)更加合理,分配的内存空间也更小,更加节约资源开销。
2.表的瘦身
如果将数据表设计过大,那么会影响表的操作速度(增删改查),数据表过大,不仅仅指它的列多,也指它的数据行过多。举个例子,设计一个人员表,它不仅包含了基本信息(身高,祖籍,性别等),还包含了工作、学习、家庭成员情况(工作时间,工作单位,平均工资,毕业),信息量庞大,不好维护,实际使用的时候,可能只会取表的相关列,有些列使用频率可能会十分的低,过多的列会降低其访问速度。同时,表的数据行过多,单次查询周期将会增加,也降低了性能。因此,将大表横向,纵向的分割成小表,可以提高表操作速度,最大化利用Cache。
3.索引优化
索引就像书本的目录,目录能够快速的定位书页,索引也能帮助我们不用全表扫描就能快速找到表数据,提高查询效率。创建索引是数据库最基本的优化手段。
3.4 SQL语句优化
对数据的管理是通过运行SQL语句实现,SQL语句要本着简洁、低耗(时间和系统)、快速的原则,那些繁冗复杂,效率低下的SQL语句会大大浪费资源,增加网络响应时间,降低Oracle性能,因此编写SQL语句要尽量做到:SQL查询中不要出现子查询或者使用join,union的多表联合查询;将一个大的查询拆成多步执行的简单查询,尽量不要使用游标,如果使用也要及时关闭;书写过程函数尽量不要使用循环语句等。
4 总结
Oracle性能优化有助于高效、便捷、安全的使用数据,助力企业信息化建设和商业盈利。希望本文对Oracle的管理者和应用程序开发人员有所帮助。
(作者单位:锦西石化分公司信息管理部)