Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3716688
  • 博文数量: 715
  • 博客积分: 1860
  • 博客等级: 上尉
  • 技术积分: 7745
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-07 08:51
个人简介

偶尔有空上来看看

文章分类

全部博文(715)

文章存档

2023年(75)

2022年(134)

2021年(238)

2020年(115)

2019年(11)

2018年(9)

2017年(9)

2016年(17)

2015年(7)

2014年(4)

2013年(1)

2012年(11)

2011年(27)

2010年(35)

2009年(11)

2008年(11)

分类: Oracle

2021-08-06 17:27:49


oracle 11.2.0.4,64G rhel7.6,分配了32G给sga 8G给pga,关闭透明大页(必备动作),hugepage设置了16390,交付使用后,用久了就内存不足,最终导致宕机。还提示

471说明dbw有问题


其实查看diag的trc文件,很多后台都是DEAD的。

什么原因呢?
来看看sar吧,看到出问题前

内存不足了

诊断内存问题三兄弟:top、ps、/proc/meminfo

看top


看进程
  1. Solaris: ps -eo user,pid,ppid,vsz,rss,time,comm | sort +4 -5 -n -r | head -50
  2. Linux: ps aux | sort +5 -6 -n -r | head -50
  3. AIX: ps aux | sort +5 -6 -n -r | head -50
  4. HP-UX: ps -elf | sort +9 -10 -n -r | head -50


看数据库会话

  1. SET LINESIZE 120
  2. SET PAGESIZE 120
  3. COLUMN spid HEADING 'OSpid' FORMAT a8
  4. COLUMN pid HEADING 'Orapid' FORMAT 999999
  5. COLUMN sid HEADING 'Sess id' FORMAT 99999
  6. COLUMN serial# HEADING 'Serial#' FORMAT 999999
  7. COLUMN status HEADING 'Status' FORMAT a8
  8. COLUMN pga_alloc_mem HEADING 'PGA alloc' FORMAT 99,999,999,999
  9. COLUMN pga_used_mem HEADING 'PGA used' FORMAT 99,999,999,999
  10. COLUMN username HEADING 'Oracle user' FORMAT a12
  11. COLUMN osuser HEADING 'OS user' FORMAT a12
  12. COLUMN program HEADING 'Program' FORMAT a20


  13. select * from (
  14. SELECT p.spid,
  15.        p.pid,
  16.        s.sid,
  17.        s.serial#,
  18.        s.status,
  19.        round(p.pga_alloc_mem/1024/1024) alloc_m,
  20.        round(p.pga_used_mem/1024/1024) used_m,
  21.        s.username,
  22.        s.osuser,
  23.        s.program
  24. FROM v$process p, v$session s
  25. WHERE s.paddr( + ) = p.addr
  26. ORDER BY p.pga_alloc_mem DESC) where rownum<21;


看/proc/meminfo,直接cat 这个文件

hugepage配置了,但是没用上。

突然想起前几天看到了use_large_pages 这个参数,

就将其设置为 ONLY,结果启动实例提示ORA-27123错误

百度了一下,与 hugetlb_shm_group 有关(幸运)


  1. 用root解决
  2. # id -g oracle
  3. 获取使用huge的用户ID
  4. 临时处理
  5. # echo ID > /proc/sys/vm/hugetlb_shm_groug
  6. 永久生效
  7. # echo "vm.hugetlb_shm_group = "ID >> /etc/sysctl.conf

重启实例后




参考:
如何在 Oracle Linux 中向 Hugetlb_shm_group 添加非 root 组(文档 ID 2491966.1)


使用大页内存,oracle官方正规解决方法:

1. 设置 /etc/security/limits.conf
*   soft   memlock    60397977
*   hard   memlock    60397977
oracle重新登录后 ulimit -l 确认

2. 禁用自动内存管理 (AMM) ,计算所需数量
./hugepages_settings.sh 文档401749.1

3. 置 /etc/sysctl.conf
 vm.nr_hugepages = 1496
 
4.重启服务器后检查
 grep HugePages /proc/meminfo

为确保配置有效,HugePages_Free值应小于HugePages_Total。

如果所有 Oracle 数据库实例的 PRE_PAGE_SGA 为“false”,也应该有一些HugePages_Rsvd。HugePages_Rsvd计算保留供使用的空闲页面(请求 SGA,但尚未触及/映射)。PRE_PAGE_SGA 确定在实例启动时是否读入所有 SGA 页。如果参数设置为“true”,则为 SGA 的每个页面预构建 OS 页表条目,从而导致这些页面的 HugePages 保留。对于 12.1 之前的 Oracle 数据库版本,PRE_PAGE_SGA 的默认值为“false”。因此HugePages_Rsvd将高于 0。但自 12c 以来,PRE_PAGE_SGA 默认为“true”,这将导致HugePages_Rsvd为 0。

Hugepages_Free和HugePages_Rsvd的总和可能小于您的总 SGA 组合,因为实例根据需要动态和主动分配页面



参考:
Oracle Linux 64 位上的 HugePages(文档 ID 361468.1)


不起作用的原因:
1. huge page过小
2. NUMA 已启用 numactl --show
3. _db_block_cache_protect 设置为 TRUE

参考:
Oracle 不使用 Hugepages(文档 ID 803238.1)

阅读(2172) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~