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