1、问题表现
系统因为访问并发量大,造成数据库连接失败,日志提取错误如下:
1.dpiStmt_execute: ORA-04036: PGA memory used by the instance exceeds PGA_AGGREGATE_LIMIT
2.dpiStmt_execute: ORA-00018: maximum number of sessions exceeded
开发工程师建议研究一下这个两个报错,oracle数据库方面sessions 与 PGA_AGGREGATE_LIMIT 这两配置的方向。
2、系统环境
服务器(虚拟机)配置:40核CPU、32G内存
操作系统:Centos 7.6 64位
Oracle版本:oracle12c 12.2.0.*
3、调优步骤
3.1系统参数调优
查询系统物理内存(≈31G)
> free
查询linux系统共享内存、消息队列、信号量的限制信息;
> ipcs -l
查询linux系统共享内存、消息队列、信号量的使用情况;
> ipcs -u
1)修改/etc/sysctl.conf 如下参数
(经多人研究确认,oracle官方建议kernel.shmmax设置为系统内存的50%,也就是≈16G,所以就按这个调优了):
kernel.shmmax
当前内存为32G 时,kernel.shmmax值设为 内存 * 50% - 1 = 16*1024*1024*1024-1 = 17179869183
kernel.shmall
当前内存为32G 时,kernel.shmall值设为 内存 * 25% = 4194304 4G
2)使/etc/sysctl.conf生效
>/sbin/sysctl -p
3.2oracle参数调优
查询oracle当前参数配置情况(processs=500;sessions=2280)
1)以dba身份登录查看sga和pga情况
SGA:System Global Area是Oracle Instance的基本组成部分,在实例启动时分配;系统全局域SGA主要由三部分构成:共享池、数据缓冲区、日志缓冲区。
SQL> show parameter sga;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
allow_group_access_to_sga boolean FALSE
lock_sga boolean FALSE
pre_page_sga boolean TRUE
sga_max_size big integer 4816M (计划改成 10000M)
sga_min_size big integer 0
sga_target big integer 4816M (计划改成 10000M)
unified_audit_sga_queue_size integer 1048576
PGA:Program Global Area是为每个连接到Oracle database的用户进程保留的内存
SQL> show parameter pga;
pga_aggregate_limit big integer 4500M (计划改成 10000M)
pga_aggregate_target big integer 1602M (计划改成 4500M)
2)修改数据库参数
(sga_target不得大于sga_max_size,一般保持两者相等)
SQL> alter system set sga_max_size=10000M scope=spfile;
SQL> alter system set sga_target=10000M scope=spfile;
SQL> alter system set pga_aggregate_limit=10000M scope=spfile;
SQL> alter system set pga_aggregate_target=5000M scope=spfile;
3)重启数据库
SQL> shutdown immediate;
SQL> startup;
4、异常处理
4.1重启数据库异常ORA-27104
报错:ORA-27104: system-defined limits for shared memory was misconfigured (原因:应该是oracle配置超出了linux内核共享内存的问题)
查看参数文件恢复参数
修改:/home/app/oracle/product/12.2/dbs/spfileORCL.ora (/home/app/oracle/product/12.2为安装目录)
找到刚刚配置的*.sga_max_size和*.sga_target参数,恢复到初始值(可参考上方ORCL.__sga_target的值)。

4.2修改配置不生效异常ORA-32001
报错:ORA-32001:write to SPFILE requested but no SPFILE is in use
修复:
查看是否有spfile文件
sql> show parameter spfile;
如果没有,需要创建
sql> create spfile from pfile;
确认是否有了
sql> show parameter spfile;

然后再重新做3.2章节的修改配置。
这篇博客记录了Oracle 12C数据库在面临并发访问时遇到的PGA_AGGREGATE_LIMIT和最大会话数问题。博主详细介绍了调优步骤,包括调整Linux系统参数如kernel.shmmax和kernel.shmall,以及优化Oracle数据库的SGA和PGA设置。在调优过程中,博主还处理了重启数据库时出现的ORA-27104和ORA-32001异常。
调优记录&spm=1001.2101.3001.5002&articleId=111149252&d=1&t=3&u=3f7a584d6cc8453e9d4aee7fdff15a09)
899

被折叠的 条评论
为什么被折叠?



