19C PGA占用过载优化

来源:这里教程网 时间:2026-03-03 18:20:12 作者:

    数据发生hang住十分钟,无法连接scan ip,后自动恢复。

    查看alert 文件发现报错如下:

    查看当前pga内存使用量

    SELECT server, s.username, oSUSEr, NAME, VALUE / 1024 / 1024 MB, s.SID, s.serial#, spid

    FROM v$session s, v$sesstat st, v$statname sn, v$process p

    WHERE st.SID = s.SID

    AND st.statistic# = sn.statistic#

    AND sn.NAME LIKE 'session pga memory'

    AND p.addr = s.paddr

    ORDER BY VALUE DESC;

    以上count后发现pga使用9.5G左右,

    查看DB pga配置

    另外根据oracle自带优化表v$pga_target_advice进行查看建议项

    SELECT   pga_target_for_estimate / 1024 / 1024 "PGA(MB)",             pga_target_factor,              estd_pga_cache_hit_percentage,              estd_overalloc_count       FROM   v$pga_target_advice;

    第一列为pga的具体大小值

    第二列PGA_TARGET_FACTOR为“1”表示当前的pga_aggregate_target设置大小(其他数值都是以这个数据为基础的倍数),我这里是20M,通过pga_aggregate_target参数可以确认一下

    第三列表示PGA的估算得到的Cache命中率的百分比,100%为最优化值

    第四列如果为“0”表示可以消除PGA的过载

    综合以上的结论,我们最终可以将PGA的大小设置为20G及以上。

    由于修改PGA_target值需要重启数据库

    择时停机修改并优化一些19C的部分选项

     实施步骤 修改参数操作流程: show parameter spfile --备份spfile create pfile=’/home/oracle/pfile20230112.ora’ from spfile; --修改参数 恢复LGWR的post/wait通知方式 alter system set "_use_adaptive_log_file_sync"=false sid='*' scope=spfile; 关闭DRM(因DRM导致的问题非常多) alter system set "_gc_policy_time"=0 sid='*' scope=spfile; alter system set "_gc_undo_affinity"=FALSE sid='*' scope=spfile; 几个参数都是用于关闭 adaptive cursor sharing、cardinality feedback 特性,避免出现 SQL 性能不稳定、SQL 子游标过多的问题 alter system set "_optimizer_extended_cursor_sharing"='NONE' sid='*' scope=spfile; alter system set "_optimizer_extended_cursor_sharing_rel"='NONE'  sid='*' scope=spfile; alter system set "_optimizer_adaptive_cursor_sharing"=FALSE  sid='*' scope=spfile; 设置数据文件的个数 alter system set db_files=8192 sid='*' scope=spfile; 设置开启的游标数 alter system set open_cursors=1000 scope=spfile sid='*'; 单个session可以缓存多少coursor alter system set session_cached_cursors=300 scope=spfile sid='*'; 设置PGA大小 alter system set pga_aggregate_target=30G sid='*' scope=spfile; 数据库checkpoint alter system checkpoint; alter system checkpoint; alter system checkpoint; --重启数据库 su – oracle srvctl stop database -d mesdb -o immeidate srvctl start database -d mesdb --检查PDBS show pdbs alter pluggable database all open show pdbs

相关推荐