没有合适的资源?快使用搜索试试~ 我知道了~
Oracle性能调优.pdf
需积分: 32 6 下载量 189 浏览量
2020-09-08
15:26:28
上传
评论 1
收藏 307KB PDF 举报
温馨提示
Oracle性能调优 Oracle性能调优 Oracle性能调优 Oracle性能调优 Oracle性能调优 Oracle性能调优 Oracle性能调优
资源推荐
资源详情
资源评论
目 录
1. Oracle
1.1 Oracle Tuning (Oracle 性能调整)的一些总结 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 Oracle Tuning (Oracle 性能调整)的一些总结 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.3 Oracle Tuning (Oracle 性能调整)的一些总结 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.4 Oracle Tuning (Oracle 性能调整)的一些总结 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
1.5 oracle基础大全 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
http://lanmh.javaeye.com
第 2 / 53 页
1.1 Oracle Tuning (Oracle 性能调整)的一些总结 1
发表时间: 2008-06-24
关于Oracle的性能调整,一般包括两个方面,一是指Oracle数据库本身的调整,比如SGA、PGA的优化设置,二是连接Oracle的应用程
序以及SQL语句的优化。做好这两个方面的优化,就可以使一套完整的Oracle应用系统处于良好的运行状态。
本文主要是把一些Oracle Tuning的文章作了一个简单的总结,力求以实际可操作为目的,配合讲解部分理论知识,使大部分具有
一般Oracle知识的使用者能够对Oracle Tuning有所了解,并且能够根据实际情况对某些参数进行调整。关于更加详细的知识,请参见本
文结束部分所提及的推荐书籍,同时由于该话题内容太多且复杂,本文必定有失之偏颇甚至错误的地方,请不吝赐教,并共同进步。
1. SGA的设置
在Oracle Tuning中,对SGA的设置是关键。SGA,是指Shared Global Area , 或者是 System Global Area , 称为共享全局区或者系
统全局区,结构如下图所示。
对于SGA区域内的内存来说,是共享的、全局的,在UNIX 上,必须为oracle 设置共享内存段(可以是一个或者多个),因为
oracle 在UNIX上是多进程;而在WINDOWS上oracle是单进程(多个线程),所以不用设置共享内存段。
1.1 SGA的各个组成部分
下面用 sqlplus 查询举例看一下 SGA 各个组成部分的情况:
SQL> select * from v$sga;
NAME VALUE
-------------------- ----------
Fixed Size 104936
Variable Size 823164928
Database Buffers 1073741824
Redo Buffers 172032
或者
SQL> show sga
Total System Global Area 1897183720 bytes
Fixed Size 104936 bytes
Variable Size 823164928 bytes
Database Buffers 1073741824 bytes
Redo Buffers 172032 bytes
Fixed Size
oracle 的不同平台和不同版本下可能不一样,但对于确定环境是一个固定的值,里面存储了SGA 各部分组件的信息,可以看作引
导建立SGA的区域。
Variable Size
包含了shared_pool_size、java_pool_size、large_pool_size 等内存设置
http://lanmh.javaeye.com
1.1 Oracle Tuning (Oracle 性能调整)的一些总结 1
第 3 / 53 页
Database Buffers
指数据缓冲区,在8i 中包含db_block_buffer*db_block_size、buffer_pool_keep、buffer_pool_recycle 三部分内存。在9i 中包含
db_cache_size、db_keep_cache_size、db_recycle_cache_size、 db_nk_cache_size。
Redo Buffers
指日志缓冲区,log_buffer。在这里要额外说明一点的是,对于v$parameter、v$sgastat、v$sga查询值可能不一样。v$
parameter 里面的值,是指用户在初始化参数文件里面设置的值,v$sgastat是oracle 实际分配的日志缓冲区大小(因为缓冲区的分配
值实际上是离散的,也不是以block 为最小单位进行分配的),v$sga 里面查询的值,是在oracle 分配了日志缓冲区后,为了保护日
志缓冲区,设置了一些保护页,通常我们会发现保护页大小是8k(不同环境可能不一样)。参考如下内容
SQL> select substr(name,1,10) name,substr(value,1,10) value
2 from v$parameter where name = 'log_buffer';
NAME VALUE
-------------------- --------------------
log_buffer 163840
SQL> select * from v$sgastat where pool is null;
POOL NAME BYTES
----------- -------------------------- ----------
fixed_sga 104936
db_block_buffers 1073741824
log_buffer 163840
SQL> select * from v$sga;
NAME VALUE
-------------------- ----------
Fixed Size 104936
Variable Size 823164928
Database Buffers 1073741824
Redo Buffers 172032
172032 – 163840 = 8192
(以上试验数据是在 HP B.11.11 + Oracle 8.1.7.4 环境下得到的)
1.2 SGA的大小设置
在对SGA的结构进行简单分析以后,下面是关于如何根据系统的情况正确设置SGA大小的问题。
SGA是一块内存区域,占用的是系统物理内存,因此对于一个Oracle应用系统来说,SGA决不是越大越好,这就需要寻找一个系统优化
的平衡点。
1.2.1 设置参数前的准备
在设置SGA的内存参数之前,我们首先要问自己几个问题
一:物理内存多大
http://lanmh.javaeye.com
1.1 Oracle Tuning (Oracle 性能调整)的一些总结 1
第 4 / 53 页
二:操作系统估计需要使用多少内存
三:数据库是使用文件系统还是裸设备
四:有多少并发连接
五:应用是OLTP 类型还是OLAP 类型
根据这几个问题的答案,我们可以粗略地为系统估计一下内存设置。那我们现在来逐个问题地讨论,首先物理内存多大是最容易回答
的一个问题,然后操作系统估计使用多少内存呢?从经验上看,不会太多,通常应该在200M 以内(不包含大量进程PCB)。
接下来我们要探讨一个重要的问题,那就是关于文件系统和裸设备的问题,这往往容易被我们所忽略。操作系统对于文件系统,使用
了大量的buffer 来缓存操作系统块。这样当数据库获取数据块的时候,虽然SGA 中没有命中,但却实际上可能是从操作系统的文件缓
存中获取的。而假如数据库和操作系统支持异步IO,则实际上当数据库写进程DBWR写磁盘时,操作系统在文件缓存中标记该块为延迟
写,等到真正地写入磁盘之后,操作系统才通知DBWR写磁盘完成。对于这部分文件缓存,所需要的内存可能比较大,作为保守的估
计,我们应该考虑在 0.2——0.3 倍内存大小。但是如果我们使用的是裸设备,则不考虑这部分缓存的问题。这样的情况下SGA就有调
大的机会。
关于数据库有多少并发连接,这实际上关系到PGA 的大小(MTS 下还有large_pool_size)。事实上这个问题应该说还跟OLTP 类型或者
OLAP 类型相关。对于OLTP类型oracle 倾向于可使用MTS,对于OLAP 类型使用独立模式,同时OLAP 还可能涉及到大量的排序操作的查
询,这些都影响到我们内存的使用。那么所有的问题综合起来,实际上主要反映在UGA的大小上。UGA主要包含以下部分内存设置
SQL> show parameters area_size
NAME TYPE VALUE
------------------------------------ ------- --------
bitmap_merge_area_size integer 1048576
create_bitmap_area_size integer 8388608
hash_area_size integer 131072
sort_area_size integer 65536
SQL>
在这部分内存中我们最关注的通常是sort_area_size,这是当查询需要排序的时候,数据库会话将使用这部分内存进行排序,当内存大
小不足的时候,使用临时表空间进行磁盘排序。由于磁盘排序效率和内存排序效率相差好几个数量级,所以这个参数的设置很重要。
当出现大量排序时的磁盘I/O操作时,可以考虑增加sort_area_size的值。sort_area_size是Oracle用于一次排序所需的最大内存数,在
排序结束但是结果列返回之前,Oracle会释放sort_area_size大小的内存,但是会保留 sort_area_retained_size大小的内存,知道最后
一行结果列返回以后,才释放所有的内存。
会导致排序的语句有 SELECT DISTINCT , MINUS , INTERSECT , UNION 和 min()、max()、count() 操作;而不会导致排序的语句有
UPDATE , 带BETWEEN子句的SELECT 等等。
这四个参数都是针对会话进行设置的,是单个会话使用的内存的大小,而不是整个数据库使用的。偶尔会看见有人误解了这个参数以
为是整个数据库使用的大小,这是极其严重的错误。假如设置了MTS,则UGA被分配在large_pool_size,也就是说放在了共享内存里
面,不同进程(线程)之间可以共享这部分内存。在这个基础上,我们假设数据库存在并发执行server process 为100 个,根据上面
我们4 个参数在oracle8.1.7 下的默认值,我们来计算独立模式下PGA 的大致大小。由于会话并不会经常使用create_bitmap_area_size
、bitmap_merge_area_size,所以我们通常不对四个参数求和。在考虑到除这四个参数外会话所保存的变量、堆栈等信息,我们估计
为 2M,则200 个进程最大可能使用200M 的PGA。
1.2.2 一个经验公式
现在,根据上面这些假定,我们来看SGA 实际能达到多少内存。在1G 的内存的服务器上,我们能分配给SGA 的内存大约为
400—500M。若是2G 的内存,大约可以分到1G的内存给SGA,8G 的内存可以分到5G的内存给SGA。当然我们这里是以默认的排序部
http://lanmh.javaeye.com
1.1 Oracle Tuning (Oracle 性能调整)的一些总结 1
第 5 / 53 页
剩余52页未读,继续阅读
资源评论
luashin
- 粉丝: 7
- 资源: 155
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功