Oracle数据库性能优化技术开发者网络Oracle
正在看的ORACLE教程是:Oracle数据库性能优化技术开发者网络Oracle。介绍:细处着手,巧处用功。高手和菜鸟之间的差别就是:高手什么都知道,菜鸟知道一些。电脑小技巧收集最新奇招高招,让你轻松踏上高手之路。
摘要: Oracle数据库是当前应用最广泛的大型数据库之一,而其性优化直接关系到系统的运行效率。本文以数据库性能优化的基本原则为出发点,阐述了在数据库设计阶段如何避免竞争和如何优化数据访问,在数据库运行阶段如何从操作系统和数据库实例级别上调整内存和I/O来达到数据库性能优化的各种技术。
关键词:Oracle数据库;性能优化;内存;I/O
1. 引言
随着网络应用和电子商务的不断发展,各个站点的访问量越来越大,数据库规模也随之不断的扩大,数据库系统的性能问题就越来越突出,因此,如何对数据库进行调优至关重要:如何使用有限的计算机系统资源为更多的用户服务?如何保证用户的响应速度和服务质量?这些问题都属于服务器性能优化的范畴。
作为全球第一大数据库厂商,Oracle数据库在国内外获得了诸多成功应用,据统计,全球93%的上市.COM公司、65家"财富全球100强"企业不约而同地采用Oracle数据库来开展电子商务。我国很多企业、政府单位及电子商务网站也采用了Oracle作为数据库服务器。Oracle数据库服务器是高度可优化的软件产品,经常性的调整可以优化应用系统的性能,防止出现系统瓶颈。
数据库性能优化的基本原则就是:通过尽可能少的磁盘访问获得所需要的数据。要评价数据库的性能,需要在数据库调节前后比较其评价指标:响应时间和吞吐量之间的权衡、数据库的可用性、数据库的命中率以及内存的使用效率,以此来衡量调节措施的效果和指导调整的方向。
对Oracle数据库进行性能调整时,应当按照一定的顺序进行,因为系统在前面步骤中进行的调整可以避免后面的一些不必要调整或者代价很大的调整。一般来说可以从两个阶段入手:
1、设计阶段:对其逻辑结构和物理结构进行优化设计,使之在满足需求条件的情况下,系统性能达到最佳,系统开销达到最小;
2、数据库运行阶段:采取操作系统级、数据库级的一些优化措施来使系统性能最佳;
2. 在系统设计开发阶段调整数据库
为了充分利用Oracle数据库的功能特性,在设计信息系统时,数据库设计人员需要根据业务情况(如访问量或客户端数量)和现有资源状况(如数据库服务器的配置)考虑系统结构和数据库的逻辑结构的设计:
2.1调整应用程序结构设计。
即应用程序采用的是传统的C/S两层体系结构,还是B/W/D三层体系结构。不同的应用程序体系结构要求的数据库资源是不同的。
2.2恰当使用分区、索引及存档功能。
如果某种业务的数据量增长非常快,可以考虑存放该业务的数据库表是否使用Oracle数据库的分区功能;对于经常访问的数据库表是否需要建立索引;对于经常访问但是当业务流程完成后不再变动的数据可采用放入历史档案的方法来实现应用系统中访问尽可能少的数据量。
2.3恰当编写访问数据的SQL语句。
良好的SQL语句可以被数据库重复使用而减少分析时间;恰当的使用索引可使访问的数据块大大减少从而减少响应时间。应用程序的执行最终将归结为数据库中的SQL语句执行,因此SQL语句的执行效率决定了Oracle数据库的性能。Oracle公司推荐使用Oracle语句优化器(Oracle Optimizer)和行锁管理器(row-level manager)来调整优化SQL语句。
2.4调整硬盘I/O
这一步是在信息系统开发之前完成的。数据库管理员可以将组成同一个表空间的数据文件放在不同的硬盘上,做到硬盘之间I/O负载均衡。在磁盘比较富裕的情况下还应该遵循以下原则:
将表和索引分开;
创造用户表空间,与系统表空间(system)分开磁盘;
创建表和索引时指定不同的表空间;
创建回滚段专用的表空间,防止空间竞争影响事务的完成;
创建临时表空间用于排序操作,尽可能的防止数据库碎片存在于多个表空间中。
2.5确定数据块大小和存储参数。
由于数据库的块大小在数据库创建以后就不能在修改(除非重建数据库),因此为了减少数据链接和行迁移,又提高磁盘空间的利用率,在设计数据库时要确定合适的数据块大小和存储参数。通常我们是根据样例数据确定数据块大小,而根据业务现状和未来发展趋势确定存储参数。
[NextPage]
3. 在数据库运行阶段调整数据库
数据库运行阶段调整数据库包括两个方面:操作系统级的调整;数据库级的调整。
3.1 操作系统级的调整
实施操作系统级调整的主要目的是减少内存交换,减少分页,使SGA(System Globle Area)可留驻内存。
3.1.1减少内存交换
内存交换(swapping)可能会造成很大的内存开销,应将它最小化。运行在Solaris Unix操作系统上的Oracle数据库,可利用vmstat或sar命令来检查交换,查看到系统级内存和硬盘I/O的使用情况,调整unix数据缓冲池的大小、每个进程所能使用的内存大小等参数。
vmstat命令
它报告Solaris上的进程、虚拟内存、磁盘、分页和CPU的活动情况。下面命令将显示系统每5秒钟做的事情的概要:
% vmstat 5
sar命令
用于监控交换、分页、磁盘和CPU活动。下面命令用于每10秒显示10次分页活动的概要:
% sar -p 10 10
若系统内存交换较多,且需要节省内存,可采用以下措施:
1) 避免运行不必要的系统daemon进程或应用程序进程;
2) 在不明显影响数据块命中率的前提下减少数据库缓冲区的数量,以释放一些内存;
3) 减少UNIX文件缓冲区的数量(特别是在使用裸设备时)。
3.1.2控制分页
少量的内存分页不会太显著地影响系统的性能,因为应用程序不必全部放在内存中。但是分页过多将会造成系统性能下降。为了检测过多的分页,可在快速响应或空闲期间运行测量,并与响应迟缓时的测量进行比较。可通过以下办法来解决:
使用vmstat或sar -p监控分页;
安装更多的内存;
将一些工作移到另一系统中;
配置系统核心使用更少的内存;
保持SGA在单个共享内存段中。
3.1.3使SGA(System Globle Area)留驻内存
SGA是对数据库数据进行快速访问的一个系统全局区,若SGA本身需要频繁地进行释放、分配,则不可能达到快速访问数据的目的,因此,要求SGA驻留内存。这时,我们可以重新配置UNIX核心,调整一些操作系统参数以达到增加共享内存的目的。
3.2 数据库级的调整
每一个Oracle实例都是由一组Oracle后台进程和SGA的一个内存区组成的。这组后台进程会自动的读写数据库的数据文件,因此,数据库性能可以被这些因素所影响:SGA各部分的分配是否合理,使用效率是否正常;I/O和锁竞争是否较多。
3.2.1 SGA的分配及使用效率
分配给每个实例的内存,即SGA的使用效率如何,会大大影响数据库系统的性能。SGA由下列部分组成:共享池、数据块缓冲区、重做日志缓冲区、大池组成。
l 共享池(Shared pool)
共享池存放库缓存(存储共享SQL和PL/SQL区)和数据字典缓存(数据库对象信息)以及会话期间信息(对于MTS)。由于这些信息是应用程序需要经常访问的,因此这些信息需要保持高的命中率。可以通过以下语句来确认共享池数据的命中率:
库缓存:
select gethitratio from v$librarycache 应大于90%
select sum(reloads)/sum(pins) from v$librarycache 应小于1
[1]
正在看的ORACLE教程是:Oracle数据库性能优化技术开发者网络Oracle。%数据字典缓存:
select sum(getmisses)/sum(gets) from v$rowcache 应小于15%
由于程序设计人员的水平参差不齐,可能存在大的匿名块,这会导致SQL不能重用,因此需要找出大的匿名块以转换为存储过程达到重用:
select * from v$sqlarea where command_type=47 and length(sql_text)>500
而对于一些应用系统非常频繁使用的SQL对象如存储过程、函数、包等,可以通过钉在内存中的方式来防止由于共享池太小被移出:
exec dbms_shared_pool.keep(对象名)
数据块缓冲区(Db block buffer):
数据块缓冲区存放用户所经常访问的数据文件的数据块内容以及用户修改的数据内容。数据库把数据文件里的内容读到内存中,下次需要时直接从内存中读取,从而减少了磁盘的I/O和响应时间。当然,一般只在比较小的数据表(如常用代码表)才缓存到内存中。
由于数据快缓冲区中不可能存放所有的数据,因此可使用LRU算法来确定移出哪些数据块,但又尽量保证有较高的数据命中率。
查看数据块命中率的SQL语句为:
select 1-(phy.value/(cur.value+con.value)) from v$sysstat cur,v$sysstat con,v$sysstat phy
where cur.name='db block gets' and con.name='consistent gets'
and phy.name='physical gets'
如果这个命中率小于0.85,就要考虑为数据块缓冲区分配更多的内存了。
重做日志缓冲区(Log buffer):
重做日志缓冲区存放从用户内存区复制来的每个DML或DDL语句的重做条目。如果这个缓冲区分配太小会导致没有足够的空间来放重做条目而等待。
3.2.2 I/O和资源竞争
由于有众多的进程要写数据文件,因此需要通过I/O调整来解决I/O瓶颈问题。如果在设计阶段有效地考虑了表空间的合理分配,就能有效地在一定程度上减少I/O竞争。在数据库运行时,由于数据的动态增长,原来分配给表或索引的空间已经用完,Oracle会自动分配空间给这些数据库对象。而这个动态分配会对系统性能有所影响,所以要求:
避免动态空间管理
表空间的本地化管理,以减少与数据字典表空间的磁盘竞争。
在系统设计和试运行阶段数据量相对较小,效率低下的SQL可能并不会影响系统响应时间,但当系统数据量增长到一定程度时,需要在系统运行时监控并找出是哪些SQL不能有效使用索引或缺少索引,并进行相应调整:建立索引;修改SQL写法。
另外,在Oracle中,需要采用一些机制来保证数据库对象在使用期间的稳定性和数据的一致性,如使用锁存器(latch)、锁(lock)等。因此争用和这些机制相关的资源会影响数据库的性能。为了减少这种资源竞争,可以通过调整数据库的相关初始化参数(如db_block_lru_latches、dml_locks)来减少资源的争用,优化数据库性能。
4. 一些常用的性能优化手段和工具
Oracle数据库系统提供了一些工具和脚本来获取数据库的性能指标和优化的方法。如使用utlbstat.sql和utlestat.sql脚本获取一段时间内数据库的内存、磁盘I/O等的情况;使用动态性能视图和数据字典视图来获取命中率和系统等待事件等信息。当然,也可以使用Oracle Enterprise Manager图形化工具来监控。
5. 结束语
Oracle数据库的性能调整相当重要,但难度也较大。数据库管理员需要综合运用上面介绍的规律,在数据库建立时,就能根据应用的需要合理设计分配表空间以及存储参数、内存使用初始化参数,对以后的数据库性能有很大的益处。只有认真分析Oracle运行过程当中出现的各种性能问题,才能保证Oracle数据库高效可靠地运行。还需要指出的是:数据库的性能调整是一个系统工程,涉及的方面很多,不能仅仅根据一个时间点的情况就断定数据库运行性能的好与坏。如何有效地进行调整,数据库管理员需要经过反反复复的过程。这些都需要在大量的实践工作中不断地积累经验,从而更好地进行数据库的调优。
上一页
[2]

MySQL适合初学者学习数据库技能。1.安装MySQL服务器和客户端工具。2.理解基本SQL查询,如SELECT。3.掌握数据操作:创建表、插入、更新、删除数据。4.学习高级技巧:子查询和窗口函数。5.调试和优化:检查语法、使用索引、避免SELECT*,并使用LIMIT。

MySQL通过表结构和SQL查询高效管理结构化数据,并通过外键实现表间关系。1.创建表时定义数据格式和类型。2.使用外键建立表间关系。3.通过索引和查询优化提高性能。4.定期备份和监控数据库确保数据安全和性能优化。

MySQL是一个开源的关系型数据库管理系统,广泛应用于Web开发。它的关键特性包括:1.支持多种存储引擎,如InnoDB和MyISAM,适用于不同场景;2.提供主从复制功能,利于负载均衡和数据备份;3.通过查询优化和索引使用提高查询效率。

SQL用于与MySQL数据库交互,实现数据的增、删、改、查及数据库设计。1)SQL通过SELECT、INSERT、UPDATE、DELETE语句进行数据操作;2)使用CREATE、ALTER、DROP语句进行数据库设计和管理;3)复杂查询和数据分析通过SQL实现,提升业务决策效率。

MySQL的基本操作包括创建数据库、表格,及使用SQL进行数据的CRUD操作。1.创建数据库:CREATEDATABASEmy_first_db;2.创建表格:CREATETABLEbooks(idINTAUTO_INCREMENTPRIMARYKEY,titleVARCHAR(100)NOTNULL,authorVARCHAR(100)NOTNULL,published_yearINT);3.插入数据:INSERTINTObooks(title,author,published_year)VA

MySQL在Web应用中的主要作用是存储和管理数据。1.MySQL高效处理用户信息、产品目录和交易记录等数据。2.通过SQL查询,开发者能从数据库提取信息生成动态内容。3.MySQL基于客户端-服务器模型工作,确保查询速度可接受。

构建MySQL数据库的步骤包括:1.创建数据库和表,2.插入数据,3.进行查询。首先,使用CREATEDATABASE和CREATETABLE语句创建数据库和表,然后用INSERTINTO语句插入数据,最后用SELECT语句查询数据。

MySQL适合初学者,因为它易用且功能强大。1.MySQL是关系型数据库,使用SQL进行CRUD操作。2.安装简单,需配置root用户密码。3.使用INSERT、UPDATE、DELETE、SELECT进行数据操作。4.复杂查询可使用ORDERBY、WHERE和JOIN。5.调试需检查语法,使用EXPLAIN分析查询。6.优化建议包括使用索引、选择合适数据类型和良好编程习惯。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

记事本++7.3.1
好用且免费的代码编辑器