ITPub博客

首页 > 数据库 > Oracle > [20230320]ORA-00855 PGA_AGGREGATE_TARGET cannot be set because of insufficient p

[20230320]ORA-00855 PGA_AGGREGATE_TARGET cannot be set because of insufficient p

原创 Oracle 作者:lfree 时间:2023-03-20 20:30:36 0 删除 编辑

[20230320]ORA-00855 PGA_AGGREGATE_TARGET cannot be set because of insufficient physical memory.txt

--//http://mvelikikh.blogspot.com/2023/03/ora-00855-pgaaggregatetarget-cannot-be.html链接说明在启动数据库后设置
--//pga_aggregate_target很大遇到的情况.给出了这样的情况pga_aggregate_target设置的最大值.重复测试看看.

1.环境:
SYS@192.168.100.237:1521/orcldg> @ pr
==============================
PORT_STRING                   : x86_64/Linux 2.4.xx
VERSION                       : 19.0.0.0.0
BANNER                        : Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
BANNER_FULL                   : Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
BANNER_LEGACY                 : Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
CON_ID                        : 0
PL/SQL procedure successfully completed.

SYS@192.168.100.237:1521/orcldg> sho parameter ga%target
PARAMETER_NAME       TYPE        VALUE
-------------------- ----------- -------
pga_aggregate_target big integer 4G
sga_target           big integer 7504M

$ grep Mem /proc/meminfo
MemTotal:       16129872 kB
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
MemFree:          632896 kB
MemAvailable:    6159872 kB

--//16129872*1024 = 16516988928
--//16129872*1024 = 0x3d87d4000

(gdb) printf "0x%lx\n", (long) ksmc_physmem_pga_target(0x3d87d4000)
0xffffffffd0852999

(gdb) printf "0x%x\n", (long) ksmc_physmem_pga_target(0x3d87d4000)
0xd0852999

SYS@orcldg> oradebug setmypid
Statement processed.
SYS@orcldg>  oradebug call ksmc_physmem_pga_target 0x3d87d4000
Function returned D0852999

--//D0852999 = 3498387865
--//3498387865/1024/1024/1024 = 3.25812759343534708023G.
--//PGA_AGGREGATE_TARGET  最大设置 3498387865

--//计算公式如下:
max PAT = (TotalMemory * _pga_limit_physmem_perc / 100 - SGA_TARGET) * 100 / _pga_limit_target_perc

_pga_limit_physmem_perc: the parameter limiting total PGA and SGA (90% by default, in other words Oracle reserves
10% for OS and everything else):

_pga_limit_target_perc: the default percent of PAT for pga_aggregate_limit (200% by default):

SYS@192.168.100.237:1521/orcldg> @ hide _pga_limit_physmem_perc
NAME                    DESCRIPTION                                                        DEFAULT_VALUE SESSION_VALUE SYSTEM_VALUE ISSES ISSYS_MOD
----------------------- ------------------------------------------------------------------ ------------- ------------- ------------ ----- ---------
_pga_limit_physmem_perc default percent of physical memory for pga_aggregate_limit and SGA TRUE          90            90           FALSE IMMEDIATE

SYS@192.168.100.237:1521/orcldg> @ hide _pga_limit_target_perc
NAME                    DESCRIPTION                                                        DEFAULT_VALUE SESSION_VALUE SYSTEM_VALUE ISSES ISSYS_MOD
----------------------- ------------------------------------------------------------------ ------------- ------------- ------------ ----- ---------
_pga_limit_target_perc  default percent of pga_aggregate_target for pga_aggregate_limit    TRUE          200           200          FALSE IMMEDIATE

max PAT = (TotalMemory * _pga_limit_physmem_perc / 100 - SGA_TARGET) * 100 / _pga_limit_target_perc
        =  (16129872*1024*90/100-7504*1024*1024 ) *100/200 = 3498387865.6

--//3498387865.6与调用ksmc_physmem_pga_target函数的结果接近.
--//而实际上我的设置是pga_aggregate_target=4G.大于3498387865.6.

SYS@192.168.100.237:1521/orcldg> show spparameter pga_aggregate_target
SID      NAME                 TYPE        VALUE
-------- -------------------- ----------- ------
*        pga_aggregate_target big integer 4G

SYS@192.168.100.237:1521/orcldg> alter system set pga_aggregate_target=4G scope=memory;
alter system set pga_aggregate_target=4G scope=memory
*
ERROR at line 1:
ORA-02097: parameter cannot be modified because specified value is invalid
ORA-00855: PGA_AGGREGATE_TARGET cannot be set because of insufficient physical memory.

SYS@192.168.100.237:1521/orcldg> alter system set pga_aggregate_target=3498387866 scope=memory;
alter system set pga_aggregate_target=3498387866 scope=memory
*
ERROR at line 1:
ORA-02097: parameter cannot be modified because specified value is invalid
ORA-00855: PGA_AGGREGATE_TARGET cannot be set because of insufficient physical memory.

SYS@192.168.100.237:1521/orcldg> alter system set pga_aggregate_target=3498387865 scope=memory;
System altered.

--//原始链接有一段话:
--//http://mvelikikh.blogspot.com/2023/03/ora-00855-pgaaggregatetarget-cannot-be.html
Please note that this formula applies when the value is set while the instance is up and running. It is still possible
to set a higher value in spfile and bounce the instance.
请注意,当实例启动和运行时设置值时,适用此公式。仍然可以在spfile中设置一个更高的值并弹跳实例。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/267265/viewspace-2940623/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
熟悉oracle相关技术,擅长sql优化,rman备份与恢复,熟悉linux shell编程。

注册时间:2008-01-03

  • 博文量
    4006
  • 访问量
    7970832