ORACLE给的建议是: OLTP系统 PGA=(Total Memory)*80%*20%。DSS系统PGA=(Total Memory)*80%*50%。
ORACLE建议一个数据库服务器,分80%的内存给数据库,20%的内存给操作系统,那怎么给一个数据库服务器配内存呢?
SQL> select * from v$pgastat;
NAME VALUE UNIT
---------------------------------------------------------------- ---------- ------------
aggregate PGA target parameter 104857600 bytes
-----这个值等于参数PGA_AGGREGATE_TARGET的值,如果此值为0,表示禁用了PGA自动管理。
aggregate PGA auto target 75220992 bytes
-----表示PGA还能提供多少内存给自动运行模式,通常这个值接近pga_aggregate_target-total pga inuse.
global memory bound 20971520 bytes
-----工作区执行的最大值,如果这个值小于1M,马上增加PGA大小
total PGA inuse 30167040 bytes
-----当前分配PGA的总大小,这个值有可能大于PGA,如果PGA设置太小.这个值接近select sum(pga_used_mem) from v$process.
total PGA allocated 52124672 bytes
-----工作区花费的总大小
maximum PGA allocated 67066880 bytes
total freeable PGA memory 0 bytes ----没有了空闲的PGA
process count 23 ----当前一个有23个process
max processes count 25
PGA memory freed back to OS 0 bytes
total PGA used for auto workareas 8891392 bytes
maximum PGA used for auto workareas 22263808 bytes
total PGA used for manual workareas 0 bytes ---为0自动管理
maximum PGA used for manual workareas 0 bytes ---为0自动管理
over allocation count 0
如果PGA设置太小,导致PGA有时大于PGA_AGGREGATE_TARGET的值,此处为0,说明PGA没有扩展大于TARGET的值,如果此值出现过,那么增加PGA大小。
bytes processed 124434432 bytes
extra bytes read/written 0 bytes
cache hit percentage 100 percent ---命中率为100%,如果太小增加PGA
recompute count (total) 6651
19 rows selected
SQL> select max(pga_used_mem)/1024/1024 M from v$process; ----当前一个process消耗最大的内存
M
----------
9.12815189
SQL> select min(pga_used_mem)/1024/1024 M from v$process where pga_used_mem>0; ---process消耗最少内存
M
----------
0.19186878
SQL> select max(pga_used_mem)/1024/1024 M from v$process ; ----process曾经消耗的最大内存
M
----------
9.12815189
SQL> select sum(pga_used_mem)/1024/1024 from v$process; ----当前process一共消耗的PGA
SUM(PGA_USED_MEM)/1024/1024
---------------------------
28.8192501068115
如何设置PGA呢?我们可以在压力测试阶段,模拟一下系统的运行,然后运行
select (select sum(pga_used_mem)/1024/1024 from v$process) /(select count(*) from v$process) from dual;得到一个process大约占用了多少的内存,然后估算系统一共会有多少连接,比如一共有500个连接,
那么Sessions=1.1*process +5=500,那么processes=450,再乘以一个process需要消耗的内存,就能大约估算出PGA需要设置多大。
最好将PGA设置的值比计算出的值大一点,PGA值设定好后,就可以根据系统的性质,如果系统为OLTOP,那么总的内存可以设置为PGA/0.16,最后也能估算出SGA的大小,建议还是多配点内存,反正便宜。
下面摘抄eygle的关于一个process能够分配的最大内存(串行操作)的规则:
10gR1之前,对于串行操作(非并行)一个process能够分配的最大的内存为min(5%pga_aggregate_target,100m)
10gR2之后,对于串行操作(非并行)一个process能够分配的最大内存有如下规则:
如果pga_aggregate_target<=500m,那么最大的内存为20%*pga_aggregate_target.
如果500m<pga_aggregate_target<=1000m,那么最大内存为100m.
如果1000m<pga_aggregate_target<=2.5G,那么最大内存为10%*pga_aggregate_target.
如果pga_aggregate_target>2.5G,那么最大内存为2.5G.
SQL> SELECT x.ksppinm NAME, y.ksppstvl VALUE, x.ksppdesc describ
2 FROM SYS.x$ksppi x, SYS.x$ksppcv y
3 WHERE x.inst_id = USERENV ('Instance')
4 AND y.inst_id = USERENV ('Instance')
5 AND x.indx = y.indx
6 AND x.ksppinm LIKE '%&par%'
7 /
NAME VALUE DESCRIB
-------------------------------------------------------------------------------- -------------------------------------------------------------------------------- --------------------------------------------------------------------------------
_smm_max_size 20480 maximum work area size in auto mode (serial)
SQL> show parameter pga
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_target big integer 100M
此处我的一个process能够分配的最大内存为20M,因为我的PGA=100M,符合上面的规则。
隐含参数_smm_max_size表示一个process能够分配最大的memory.
买了piner的《oracle高可用环境》一书,正好趁这段时间学习一下。
把看到的东西总结一下发表于此,今天先发第一章关于SGA与PGA的内容。
以后会陆续将总结在此发表,与大家共享。
SGA与PGA的结构如下图:
SGA:
查看SGA:
Sqlp> show sga
或 select * from v$sga;
Total System Global Area 289406976 bytes
Fixed Size 1248600 bytes
Variable Size 176161448 bytes
Database Buffers 109051904 bytes
Redo Buffers 2945024 bytes
Fixed Size:包括了数据库与实例的控制信息、状态信息、字典信息等,启动时就被固定在SGA中,不会改变。
Variable Size:包括了shard pool、large pool、java pool、stream pool、游标区和其他结构
Database Buffers:数据库中数据块缓冲的地方,是SGA中最大的地方,决定数据库性能
Redo Buffers:提供REDO缓冲的地方,在OLAP中不需要太大
V$sgastat记录了SGA的一些统计信息
V$sga_dynamic_components保存SGA中可以手动调整的区域的一些调整记录
Shard pool:
Shard_pool_size决定其大小,10g以后自动管理
Shard_pool中数据字典和控制区结构用户无法直接控制,与用户有关的只有sql缓冲区(library cache)。
将经常访问的过程或包用DBMS_SHARED_POOL.KEEP存储过程将该包pin在共享池中。
手工清除共享池的内容:alter system flush shard_pool;
共享池相关的几个常用的视图:
V$sqlarea 记录了所有sql的统计信息,包括执行次数、物理读、逻辑读、耗费时间等
V$sqltext_with_newline 完全显示sql语句,通过hash_value来标示语句,piece排序
V$sql_plan保存了sql的执行计划,通过工具查看
V$shared_pool_advice对共享池的预测,可以做调整SGA的参考
Data buffer:
在OLTP系统中要求data buffer 的命中率在95%以上
select sum(pins) "execution",sum(pinhits) "hits",
((sum(pinhits)/sum(pins))*100) "pinhitration",
sum(reloads) "misses",((sum(pins)/(sum(pins)
+sum(reloads)))*100) "relhitratio"
from V$librarycache
PINS
|
NUMBER
|
Number of times a PIN was requested for objects of this namespace
|
PINHITS
|
NUMBER
|
Number of times all of the metadata pieces of the library object were found in memory
|
RELOADS
|
NUMBER
|
Any PIN of an object that is not the first PIN performed since the object handle was created, and which requires loading the object from disk
|
Oracle把从data buffer中获得的数据库叫cache hit,把从磁盘获得的脚cache miss
数据缓冲区中的数据块通过脏列表(dirty list)和LRU列表(LRU list)来管理。
Data buffer可细分为:default pool、keep pool、recycle pool对应的参数为db_cache_size、 db_keep_cache_size 、db_recycle_size分别表示缓冲区大小
从9i开始oracle支持不同块大小的表空间,相应的可以为不同块大小的表空间指定不同块大小的数据缓冲区,不同块大小的数据缓冲区可以用相应的db_nk_cache_size来指定,其中n可以是2、4、6、16或32
V$db_cache_advice 对数据缓冲区的预测,可以做调整data buffer的参考
V$bh、x$bh记录了数据块在data buffer中缓冲的情况,通过这个视图可以找系统中的热点块。通过下面语句找系统中top 10 热点快所在的热点对象:
Select /*+ rule*/ owner,object_name from dba_objects
Where data_object_id in
(select obj from
(select obj from x$bh order by tch desc)
Where rownum<11);
PGA:
用来保存于用户进程相关的内存段。
从9i开始使用PGA自动管理,pga_aggregate_target参数指定session一共使用的最大PGA内存的上限。Workarea_size_policy参数用于开关PGA内存自动管理功能,auto/manual
在OLTP环境中,自动PGA管理只要设置到一定的值,如2G左右就能满足系统的要求。
自动内存管理:
从9i开始,sga_max_size参数设置SGA的内存大小,不能动态修改
从10g开始,指定了sga_target参数后,所有的SGA组件如:shared pool、 data buffer、 large pool都不用手工指定了,Oracle会自动管理。这一特性就是自动共享内存管理ASMM。如果设置了sga_target=0,就自动关闭自动共享内存管理功能。Sga_target大小不能超过sga_max_size的大小。
手动管理SGA:
Alter system set sga_target=2000m;
Alter system set db_cache_size=1000m;
Alter system set shared_pool=200m;
Alter system set sga_target=0---------关闭自动共享内存管理ASMM
11G以后sga+pga整个内存可以自动管理AMM,相关参数memory_max_target memory_target.设置好这两个参数后就不用关心SGA和PGA了
11g手动内存管理:
Alter system set memory_target=3000m;
Alter system set sga_target=2000m;
Alter system set pga_aggregate_target=1000m;
Alter system set memory_target=0;---------关闭自动内存管理AMM
SGA+PGA最好不要超过总内存的70%
分享到:
相关推荐
ADS1256提供了强大的自校准和系统校准功能,可以确保在各种PGA设定下仍然维持极高的精度。 6. 接口: 该芯片提供与SPI兼容的串行接口,方便与各种数字系统进行数据交换。 ADS1256的这些特点使它成为高精度测量...
5. **PGA操作**:PGA的增益通常通过写入特定的控制寄存器来设定。增益选择可能是一个二进制码或预定义的增益值,需要根据数据手册来确定正确的配置方式。 6. **错误处理和中断服务**:在PGA编程中,可能会遇到如...
1. **数字控制接口**:MCU通过串行或并行接口向PGA2310发送指令,设定增益值。这可能包括SPI(Serial Peripheral Interface)、I²C(Inter-Integrated Circuit)或者定制的通信协议。在MCUSCH.pdf的电路图中,可以...
寄存器2则控制增益DAC,允许用户设定所需的增益值,以优化信号的放大效果。寄存器3包含基准控制和线性化设置,它涉及到内部基准电压的选择,VEXC的使能与否,以及线性化DAC的配置,后者用于进一步减少非线性误差。 ...
2. **设置增益**:通过MCU向PGA2311发送指令,设定左右通道的增益值。 3. **输入信号**:通过MCU控制信号源,将正弦和直流信号送入PGA2311的输入端。 4. **读取输出**:监测PGA2311的输出,根据实际情况调整增益或...
3. **增益设置**:PGA2311的核心功能是提供可编程增益,程序需要根据需求设定合适的增益值,并确保其在芯片允许的范围内。 4. **状态读取**:程序可能需要读取PGA2311的状态信息,例如当前增益、故障状态等,以便...
而PGA通过数字编码的方式可以快速且准确地设定增益,使得放大器能够自动适应被测量信号的变化。 在PGA电路中,增益选择开关是关键组成部分。如在描述中提到的Sl—S'l,S2—S'2,S3—S'3等开关,它们成对动作,确保...
- **合理设定PGA目标大小**:通过`pga_aggregate_target`初始化参数,可以全局控制PGA的总内存使用。根据系统负载和应用特性,设置合适的值能有效平衡性能和资源使用。 - **监控和调整UGA**:虽然UGA大小通常由...
根据以上提到的SGA和PGA设定公式,可以将SGA设置为5GB,PGA设置为700MB,同时设置PROCESSES为1000。 - **字符集设置**:对于Windows平台下的Oracle安装,默认字符集即可满足需求。而在UNIX系统环境下,则需要手动...
权限管理也是一个重要的特性,用户可以设定不同级别的访问权限,限制特定用户对文件的访问、修改或删除。 为了进一步增强安全性,PGA私密文件管理系统可能采用了多层防护策略。除了加密之外,可能还有防火墙保护、...
- 动态调整此参数,依据Oracle实例可利用内存总量来设定。在OLTP系统中,通常建议PGA占比不超过总SGA内存的20%;而在DSS系统中,PGA的需求可能更高,应根据实际负载进行调整。 #### 三、综合考虑与实践 在调整SGA...
### 音频控制芯片PGA2311的音频增益自动控制 #### 引言 在现代生活与工作中,音频设备已经成为不可或缺的一部分。然而,在实际使用过程中,由于各种因素(如频道切换、广告插入等)会导致音量变化,严重影响用户...
con_PGA可能是PGA2310的配置文件,或者与单片机通信的接口代码,用于设定和读取PGA2310的增益值。 综合以上信息,这个项目的核心知识点包括: 1. PGA2310的使用:了解其特性,如增益范围、噪声性能和电源电压等。 2...
在远程仪器设备和测试设备中,它们的远程操作能力和稳定的增益设定,为远程测量和控制提供了可靠解决方案。 总的来说,PGA202和PGA203是面向精确、灵活和成本效益高的信号调理应用的理想选择。它们结合了数字控制的...
本应用笔记将讨论温度测量的两种设计,设计均使 用精密的、负温度系数(Negative Temperature Coefficient,...输入数字式地设定最恰当的增益。这将降低设计的总体复 杂度,使得对其他传感器所测温度进行校正成为可能。
5. **增益误差**:增益误差是输出信号的实际增益与设定增益之间的差异。PGA205AP的最大增益误差为±0.020%,这表示在全增益范围内,放大器的实际增益与期望增益的偏差非常小,确保了高精度的信号放大。 6. **共模...
VCOM信号用于设定积分电路的零电位,通常设为VREF/2。 工作原理上,选择R和C的值需考虑采样速率、最大期望增益和A/D转换时间。积分电路需要在不超出积分阶段的时间内达到所需的增益。开关的关闭时间和电容器的容差...