重庆oracle认证培训机构

新闻分类

产品分类

热门关键词

联系我们

企业名称:重庆赛烽达科技有限公司

联系人:程老师

手机:13372708242

邮箱:xqzhang@saifengda.com

网址:www.cqora.com

地址:重庆石桥铺高创锦业17-3

如何设计数据库内存的大小

您的当前位置: 首 页 >> 新闻资讯 >> 行业新闻

如何设计数据库内存的大小

发布日期:2021-02-07 作者: 点击:

oracle认证培训:如何设计数据库内存的大小


oracle认证培训

SGA:是用于存储数据库信息的内存区,该信息为数据库进程所共享。它包含Oracle 服务器的数据和控制信息,它是在Oracle服务器所驻留的计算机的实际内存中得以分配,如果实际内存不够再往虚拟内存中写。


PGA:是一块包含一个服务进程的数据和控制信息的内存区域。它是Oracle在一个服务进程启动时创建的,是非共享的。一个Oracle进程拥有一个PGA内存区。一个PGA也只能被拥有它的那个服务进程所访问,只有这个进程中的Oracle代码才能读写它。因此,PGA中的结构是不需要Latch保护的。


我们重点就是设置SGA,理论上SGA可占OS系统物理内存的1/2——1/3

 

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 

如果1000m如果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.

 


本文网址:http://www.cqora.com/news/769.html

关键词:oracle培训,Oracle认证,oracle认证培训

最近浏览:

报名咨询

点击咨询报名

赛烽达QQ群

赛烽达技术群

程老师

13372708242

加微信咨询

张老师微信.jpg

xqzhang@saifengda.com