[20221212]关于pre_page_sga参数的问题.txt
--//别人遇到的问题,无法演示链接http://blog.itpub.net/267265/viewspace-2133260/=>[20170209]理解pre_page_sga参数.txt
--//我当时的测试设置pre_page_sga=true的情况,HugePages_Rsvd是0.
--//我看了一下实际上是对方sga_target设置问题导致的.通过例子说明:
1.环境:
$ cat initxxxx.ora
db_name=xxxx
instance_name=xxxx
sga_target=0G
sga_max_size=50G
shared_pool_size=2G
pre_page_sga=true
--//注意设置sga_target=0G
# grep "^vm.nr" /etc/sysctl.conf
vm.nr_hugepages = 26000
vm.nr_overcommit_hugepages = 1300
# sysctl -p
# sysctl vm.nr_hugepages
vm.nr_hugepages = 26000
# grep "^oracle" /etc/cur': grep "^oracle" /etc/security/limits.conf | grep memlock
oracle soft memlock unlimited
oracle hard memlock unlimited
$ egrep "Max locked memory|Limit" /proc/self/limits
Limit Soft Limit Hard Limit Units
Max locked memory unlimited unlimited bytes
2.测试:
--//测试前:
# grep -i pages /proc/meminfo
AnonPages: 226424 kB
AnonHugePages: 57344 kB
HugePages_Total: 26000
HugePages_Free: 26000
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
--//没有任何程序使用hugepages.
$ export ORACLE_SID=xxxx
SYS@xxxx> startup nomount
ORACLE instance started.
Total System Global Area 5.3447E+10 bytes
Fixed Size 2265864 bytes
Variable Size 5.3284E+10 bytes
Database Buffers 134217728 bytes
Redo Buffers 26480640 bytes
# grep -i pages /proc/meminfo
AnonPages: 286296 kB
AnonHugePages: 69632 kB
HugePages_Total: 26000
HugePages_Free: 24601
HugePages_Rsvd: 24202
HugePages_Surp: 0
Hugepagesize: 2048 kB
--//可以发现当前仅仅使用了26000-24601 = 1399 ,相当于现在sga_target=1399 * 2M .
--//该实例如果全部使用应该是 26000-24601+24202 = 25601,相当于 50G+2M.
3.继续:
$ cat initxxxx.ora
db_name=xxxx
instance_name=xxxx
sga_target=50G
sga_max_size=50G
shared_pool_size=2G
pre_page_sga=true
--//注意设置sga_target=50G
--//关闭数据库实例xxxx.
--//测试前:
# grep -i pages /proc/meminfo
AnonPages: 217752 kB
AnonHugePages: 59392 kB
HugePages_Total: 26000
HugePages_Free: 26000
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
--//启动数据库实例xxxx.实际上这样启动比前面的启动慢许多.
--//启动实例后:
# grep -i pages /proc/meminfo
AnonPages: 286328 kB
AnonHugePages: 69632 kB
HugePages_Total: 26000
HugePages_Free: 473
HugePages_Rsvd: 74
HugePages_Surp: 0
Hugepagesize: 2048 kB
--//我不知道为什么HugePages_Rsvd=74.
--//我测试前以为HugePages_Free=399,HugePages_Rsvd=0.
--//还是可以说明pre_page_sga=true的情况加载大部分sga到内存的hugepages中.
$ ipcs
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00000000 68288514 oracle 640 268435456 18
0x00000000 68321283 oracle 640 53418655744 18
0x4fc32208 68354052 oracle 640 2097152 18
------ Semaphore Arrays --------
key semid owner perms nsems
0x7e7c81d8 63602688 oracle 640 1004
------ Message Queues --------
key msqid owner perms used-bytes messages
--//(268435456 + 53418655744 + 2097152 )/2048/1024 = 25601
--//alert记录如下:
************************ Large Pages Information *******************
Per process system memlock (soft) limit = UNLIMITED
Total Shared Global Region in Large Pages = 50 GB (100%)
Large Pages used by this instance: 25601 (50 GB)
Large Pages unused system wide = 399 (798 MB)
Large Pages configured system wide = 26000 (51 GB)
Large Page size = 2048 KB
********************************************************************
4.后记:
--//顺便提一下采用hugepages是大势所趋,现在服务器配置内存都很高.而且12c开始pre_page_sga缺省设置就是true.
--//还采用原来的方式会导致PageTables消耗很大的内存.
--//另外注意一点如果设置vm.nr_hugepages 很大,会导致内存的大量浪费,比sga_max_size大一点点就ok了.
--//测试完成修改/etc/sysctl.conf里面的vm.nr_hugepages参数略.
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/267265/viewspace-2927697/ ,如需转载,请注明出处,否则将追究法律责任。