问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Oracle内存结构研究-SGA篇

发布网友 发布时间:2023-05-04 08:24

我来回答

1个回答

热心网友 时间:2023-10-27 02:16

一、概述
在《Oracle内存结构研究-PGA篇》一文中提到,PGA是一个服务器进程的专用的私有内存区,而SGA则是共享内存区。
SGA由多个部分组成:
1,
固定SGA(Fixed SGA)
2,
块缓冲区(Db cache)
3,
重做日志缓冲区(Redo log buffer)
4,
Java池(Java pool)
5,
大池(Large pool)
6,
共享池(Shared pool)
7,
流池(Stream pool)
有如下参数控制共享池相关组件大小:
1,
JAVA_POOL_SIZE:控制Java池大小。
2,
SHARED_POOL_SIZE:9i中控制共享池中占用最大的部分,10g以上控制共享池大小。
3,
LARGE_POOL_SIZE:控制大池大小。
4,
DB_*K_CACHE_SIZE:控制不同块大小的缓冲区大小。
5,
LOG_BUFFER:控制重做日志缓冲区大小。
6,
SGA_TARGET:10g以上控制自动SGA内存管理的总内存大小。
7,
SGA_MAX_SIZE:控制SGA可以达到的最大大小,改变需重启数据库。
下面将详细介绍各个部分的作用和推荐设置。
二、SGA各组件作用
1,
固定SGA:
顾名思义,是一段不变的内存区,指向SGA中其他部分,Oracle通过它找到SGA中的其他区,可以简单理解为用于管理的一段内存区。
2,
块缓冲区:
查询时,Oracle会先把从磁盘读取的数据放入内存,以后再查询相关数据时不用再次读取磁盘。插入和更新时,Oracle会现在该区中缓存数据,之后批量写到硬盘中。通过块缓冲区,Oracle可以通过内存缓存提高磁盘的I/O性能。
块缓冲区中有三个区域:
默认池(Default pool):所有数据默认都在这里缓存。
保持池(Keep pool):用来缓存需要多次重用的数据。
回收池(Recycle pool):用来缓存很少重用的数据。
原来只有一个默认池,所有数据都在这里缓存。这样会产生一个问题:大量很少重用的数据会把需重用的数据“挤出”缓冲区,造成磁盘I/O增加,运行速度下降。后来分出了保持池和回收池根据是否经常重用来分别缓存数据。
这三部分内存区需要手动确定大小,并且之间没有共享。例如:保持池中已经满了,而回收池中还有大量空闲内存,这时回收池的内存不会分配给保持池。
9i开始,还可以设置db_nk_cache。9i之前数据库只能使用相同的块大小。9i开始同一个数据库可以使用多种块大小(2KB,4KB,8KB,16KB,32KB),这些块需要在各自的db_nk_cache中缓存。如果为不同的表空间指定了不同的块大小,需要为其设置各自的缓冲区。
3,
重做日志缓冲区(Redo log buffer):
数据写到重做日志文件之前在这里缓存,在以下情况中触发:
每隔3秒
缓存达到1MB或1/3满时
用户提交时
缓冲区的数据写入磁盘前
4,
Java池(Java pool):
在数据库中运行Java代码时用到这部分内存。例如:编写Java存储过程在服务器内运行。需要注意的是,该内存与常见的Java编写的B/S系统并没关系。用JAVA语言代替PL/SQL语言在数据库中写存储过程才会用到这部分内存。
5,
大池(Large pool):
下面三种情况使用到大池:
并行执行:存放进程间的消息缓冲区
RMAN:某些情况下用于磁盘I/O缓冲区
共享服务器模式:共享服务器模式下UGA在大池中分配(如果设置了大池)
6,
共享池(Shared pool)
共享池是SGA中最重要的内存段之一。共享池太大和太小都会严重影响服务器性能。
SQL和PL/SQL的解释计划、代码,数据字典数据等等都在这里缓存。
SQL和PL/SQL代码在执行前会进行“硬解析”来获得执行计划及权限验证等相关辅助操作。“硬解析”很费时间。对于响应时间很短的查询,“硬解析”可以占到全部时间的2/3。对于响应时间较长的统计等操作,“硬解析”所占用的时间比例会下降很多。执行计划及所需的数据字典数据都缓存在共享池中,让后续相同的查询可以减少很多时间。
不使用“绑定变量”导致:
系统需要花费大量的资源去解析查询。
共享池中的代码从不重用,系统花费很大代价管理这部分内存。
关于共享变量的优缺点讨论已经超过了这篇文章的范畴,简单来讲,响应时间短的查询要使用共享变量,响应时间长的统计不使用共享变量。
需要注意的是,SHARED_POOL_SIZE参数在9i中控制共享池中占用最大的部分,10g以上控制共享池总大小。
7,
流池(Stream pool)
9iR2以上增加了“流”技术,10g以上在SGA中增加了流池。流是用来共享和复制数据的工具。
三、SGA设置
没有通用的设置,所有设置都要根据系统的负载、业务需求和硬件环境来进行调整。这里只是总结出大体的设定,避免因SGA设置不当引起的问题。
1,自动SGA内存管理
在Oracle 10g中引入了自动SGA内存管理特性,DBA可以设定SGA_TARGET告诉Oracle可用的SGA内存为多大,由Oracle根据系统负载来动态调整各组件大小,相应的数定会保存在控制文件中,使数据库重启后也记得各组件大小。
需要注意一下几点:
要使用自动SGA内存管理,STATISTICS_LEVEL参数必须设为TYPICAL或ALL,系统自动收集相应的信息用来动态调整SGA设定。
可以设定某个组件的值,Oracle使用此值为该组件的最小大小
可动态调整的参数:
DB_CACHE_SIZE,SHARED_POOL_SIZE,LARGE_POOL_SIZE,JAVA_POOL_SIZE。
需手动设置的参数:
LOG_BUFFER,STREAMS_POOL,DB_NK_CACHE_SIZE,DB_KEEP_CACHE_SIZE,DB_RECYCLE_CACHE_SIZE。
2,手动SGA内存管理
1)
32bit和64bit*
在32位的操作系统中,Oracle最大可用内存为1.75g,也就是说SGA+PGA=1.75g,超过这一*的内存将不会被Oracle用到。
32位的Oracle可以装到64位的操作系统上,64位的Oracle不可以装到32位的操作系统上。
2)
查看Oracle版本:
SQL select * from v$version;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Proction
CORE
10.2.0.1.0
Proction
TNS for 32-bit Windows: Version 10.2.0.1.0 - Proction
NLSRTL Version 10.2.0.1.0 _ Proction
3)
各组件设置:
JAVA_POOL_SIZE:如果没用到数据库端java的系统,30MB足够。
LOG_BUFFER:默认为MAX(512KB,128KB*CPU个数)。一般系统1MB足够,运行大型事务的系统可以设为2MB,让1/3满写入日志文件时可以继续写入缓冲,再大也没有意义。
SHARED_POOL_SIZE:过大过小都会严重影响系统性能,1GB内存可以设为100MB,2GB内存可设为150MB,4GB内存可设为300MB。共享池命中过低首先要调整的是应用程序而不是扩大共享池。使用绑定变量可以减少共享池需求、提高命中率,减少共享池管理负担和LATCH竞争。
LARGE_POOL_SIZE:使用专用服务模式可设为30MB,除非必要,不然不建议使用共享服务器模式。
DB_CACHE_SIZE:除去上述内存外其他可用内存都分配给该区域。
总结
32位Oracle:
1G内存:SHARED_POOL_SIZE=100MB,DB_CACHE_SIZE=0.5GB;
2G内存:SHARED_POOL_SIZE=150MB,DB_CACHE_SIZE=1.25GB;
64位Oracle
4G内存:SHARED_POOL_SIZE=200MB,DB_CACHE_SIZE=2.5GB;
8G内存:SHARED_POOL_SIZE=400MB,DB_CACHE_SIZE=5GB;
12G内存:SHARED_POOL_SIZE=500MB,DB_CACHE_SIZE=8GB
再次强调,以上只是避免因SGA设置不当引起问题的大体设置,需要根据具体的系统负载和业务逻辑结合Stackpack等工具细调。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
怎样移动手机应用的位置 不戴安全套但没有射精会怀孕吗 青岛哪所学校空乘专业就业率高 属牛的是什么星座1985年 m.xzw.com m.xingzuo360.cn 敏卡·凯利基本信息 想问一下eve用什么船刷古斯塔斯怪比较好?如果能有配置图就更好了... EVE加达里恐惧古斯塔斯小型控制塔一个月要多少燃料块 eve古斯塔斯据点需要打建筑么? 对煮饭手艺好的 应该用什么词语修饰 去哪里搜上海中小学教师招聘信息呢,怎么找都找不到呀,大家来帮帮忙吧... wifi连上但是上不了网 重启路由器后可以上一段时间 过一会又不行了 又要重启 是什么原因 无线网一会好一会不好怎么回事? 手机连笔记本wifi只能用一会儿 怎么解决啊 床前明月光 疑是地上霜 李白在哪个季节写下的这首诗 床前明月光疑是地上霜是什么季节 床前明月光,疑是地上霜什么季节 华硕(ASUS) 顽石四代FL5700U 15.6英寸笔记本电脑 (i7-7500U 4G 1TB 小米电视和华为电视哪个广告少 色彩造型基础学什么东西 老师说我这个人要教育一下,我这人不蠢是什么意思? “教育”究竟是什么意思 必修的意思必修的意思是什么 什么东西必学? 用交流电给蓄电池充电,蓄电池发出什么电? 北师大版小学四年级上册数学《商不变的规律》教案三篇 人的眼睛为什么有黑白之分? 黑白的眼睛能这样写吗 或许是生活赋予了枷锁什么意思 “做自己”并不是一件容易的事 如何理解职场中人主导自我意志? 乐家扁桃仁巧克力糖250克有多大 乐家扁桃仁和紫皮糖哪个好吃 乐家杏仁糖好吃还是扁桃仁好吃 免税店买的兰蔻小白管防晒为啥几乎没味道 十二星座长颜草团子简笔画 建行大学生龙卡信用卡如何注销 阔绰的读音阔绰的读音是什么 孟宁傅延修的小说叫什么名字? 结婚当天可以抱别人孩子吗 结婚为什么不能抱别人的孩子? 工商银行需要什么条件 梦见被咒的预兆 梦见我被巫婆下了咒的预兆 事业单位年度考核个人工作总结教师数学5篇 银行卡转入余额宝显示银行反馈此卡不可用 梦见别人帮打蜘蛛的预兆 梦见同事帮我打死一只剧毒蜘蛛的预兆 成立一个省级科技中心学历会查吗 山东省科技服务发展推进中心是什么级别 江苏省国际科技交流与合作中心是什么级别单位