修改oracle数据库SGA和PGA大小
个人原创,允许转载,请注明出处,作者,否则追究法律责任。
SGA的大小:一般物理内存20%用作操作系统保留,其他80%用于数据库。
SGA普通数据库可以分配40%-60%之间,PGA可以分配20%-40%之间。1、以system的身份登录并查看SGA信息:SQL>show parameter sga;查看PGA信息:SQL>show parameter pga;2、修改sga_targetSQL>alter system set sga_target=436M;3、修改sga_max_sizeSQL> alter system set sga_max_size=436M scope=spfile; www.2cto.com 4、重启数据库使其生效:SQL>shutdown immediate; 注意,重启前一定先完成上述两部操作,且sga_target不得大于sga_max_size,一般保持两者相等。否则可能导致数据库无法启动。SQL>startup5、查看SGA是否生效:SQL>show parameter sgaNAME TYPE VALUE------------------------------------ ----------- -----lock_sga boolean FALSEpre_page_sga boolean FALSEsga_max_size big integer 436Msga_target big integer 436M 6,查询PGA大小SQL> show parameter workareaNAME TYPE VALUE------------------------------------ ----------- ------------------------------workarea_size_policy string AUTO SQL> show parameter pgaNAME TYPE VALUE------------------------------------ ----------- ------------------------------pga_aggregate_target big integer 90M
pga_aggregate_target默认特别小只90M
当然太小了,因为我们当前使用的是非生产环境,90M无所谓,因为我们没有什么连接,到底需要满足多少连接到底该设多大呢一般是物理内存的80%*20%是16%,一般生产里面都是16G的空间,16G*16% = 2.56G 接近3G给pga
_pga_max_size参数:是每一个会话能够分配的最大空间的数量,这个值不是固定的
SQL>select ksppinm "Name", ksppstvl/1024/1024 ||'M' "Value", ksppdesc "Desc" from x$ksppi x, x$ksppcv y where x.indx = y.indx and ksppinm ='_pga_max_size';
结果Name Value Desc------------- ------ --------------------------------------------------_pga_max_size 200M Maximum size of the PGA memory for one process从结果看这个参数是200M(默认值),也就是对每个session来讲最大只能分200M,对当前来讲每个session最多在pga空间只能分200M
7,修改PGA的自动管理方式和大小SQL> alter system set workarea_size_policy=auto scope=both;SQL> alter system set pga_aggregate_target=3072m scope=both;修改后重启数据库。
线上oracle数据库建议内存修改方式:
1),系统总内存:64G
2),目前数据库使用内存: sga:2G pga:90M3),建议调整后的大小: sga:30G pga:10G4),查看具体参数:
SQL> show parameter sga; --------------查看sga的区域大小
NAME TYPE VALUE------------------------------------ ----------- ------------------------------lock_sga boolean FALSEpre_page_sga boolean FALSEsga_max_size big integer 2Gsga_target big integer 2GSQL> show parameter pga; --------------查看pga的默认区域大小NAME TYPE VALUE------------------------------------ ----------- ------------------------------pga_aggregate_target big integer 90M
SQL> show parameter workarea; ----------查看oracle内存区域的工作方式(确保是在自动的模式下)NAME TYPE VALUE------------------------------------ ----------- ------------------------------workarea_size_policy string AUTO5),修改参数:SQL> alter system set sga_max_size=30720M scope=spfile; ---------------先修改最大pga的大小
SQL> shutdown immediate;----------- 重启,使得以上的修改生效
SQL> startupSQL> alter system set sga_target=30720M; --------- 接着修改sga的大小(该大小不能超过以上设置的最大的pga的大小。否则报错)SQL> alter system set pga_aggregate_target=10240M scope=both;
SQL> shutdown immediate;----------- 重启,使得以上的修改生效
SQL> startup6),查看修改后的效果
SQL> show parameter sga;SQL> show parameter pga;