11G hugepage的use_large_pages参数

11G 增加参数use_large_pages,可以灵活使用hugepages.

如果参数为True(默认值),那么当系统的HugePage被使用尽,只有small pages的情况下,SGA也会继续运行。此时,Oracle实例就运行在内存使用混合模式(Mixed Mode)下。

如果参数为是Only,从含义上,表示Oracle实例只会使用HugePage作为内存使用。如果系统在AMM模式或者HugePage用尽的时候,数据库就不能启动或者报错。

还有一个参数设置use_large_pages=auto.

下面就三个参数进行测试一下区别:

1.use_large_pages=TRUE

SQL> show parameter use_large_pages

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
use_large_pages                      string      TRUE

vm.nr_hugepages = 20,将hugepages设为很小的值,测试数据库能否正常开启。虚拟机的数据库的sga也很小,只有300M.

[oracle@qht131 ~]$  grep Huge /proc/meminfo
AnonHugePages:     14336 kB
HugePages_Total:      20
HugePages_Free:       20
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
[oracle@qht131 ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.3.0 Production on Mon Apr 6 09:24:31 2020

Copyright (c) 1982, 2011, Oracle.  All rights reserved.

Connected to an idle instance.

SQL> startup
ORACLE instance started.

Total System Global Area  313159680 bytes
Fixed Size                  2227944 bytes
Variable Size             192938264 bytes
Database Buffers          113246208 bytes
Redo Buffers                4747264 bytes
Database mounted.
Database opened.
SQL> quit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
[oracle@qht131 ~]$  grep Huge /proc/meminfo
AnonHugePages:     18432 kB
HugePages_Total:      20
HugePages_Free:        8
HugePages_Rsvd:        8
HugePages_Surp:        0
Hugepagesize:       2048 kB

不过log提示如下,建议将largepagesize设置为131(262M)。

****************** Large Pages Information *****************

Total Shared Global Region in Large Pages = 40 MB (13%)

Large Pages used by this instance: 20 (40 MB)
Large Pages unused system wide = 0 (0 KB) (alloc incr 4096 KB)
Large Pages configured system wide = 20 (40 MB)
Large Page size = 2048 KB

RECOMMENDATION:
  Total Shared Global Region size is 302 MB. For optimal performance,
  prior to the next instance restart increase the number
  of unused Large Pages by atleast 131 2048 KB Large Pages (262 MB)
  system wide to get 100% of the Shared
  Global Region allocated with Large pages
***********************************************************

2.use_large_pages=ONLY

SQL> alter system set use_large_pages=only;
alter system set use_large_pages=only
                 *
ERROR at line 1:
ORA-02095: specified initialization parameter cannot be modified


SQL> alter system set use_large_pages=only scope=spfile;

System altered.

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORA-27137: unable to allocate large pages to create a shared memory segment
Linux-x86_64 Error: 12: Cannot allocate memory

use_large_pages参数必须要重启才能生效,改成only以后,数据库Open失败。

做这个测试的时候忘记先备份spfile了,不得不从alert_orcl.log中恢复参数,手动重建pfile。

SQL> startup nomount pfile='/u01/app/oracle/product/11203/dbs/initorcl.ora';
ORACLE instance started.

Total System Global Area  313159680 bytes
Fixed Size                  2227944 bytes
Variable Size             104857880 bytes
Database Buffers          201326592 bytes
Redo Buffers                4747264 bytes

SQL> create spfile from  pfile='/u01/app/oracle/product/11203/dbs/initorcl.ora';

File created.

3.测试use_large_pages=AUTO,预期是系统如果nr_hugepages设置过小,数据需要增大的hugepagesize时会自动扩大Hugepage的值。

当前值还是20: vm.nr_hugepages=20

[oracle@qht131 dbs]$  cat /proc/meminfo | grep -i  page
AnonPages:        149620 kB
PageTables:        24472 kB
AnonHugePages:     36864 kB
HugePages_Total:      20
HugePages_Free:        5
HugePages_Rsvd:        5
HugePages_Surp:        0
Hugepagesize:       2048 kB

重启数据库看是否能启动

SQL>  alter system set use_large_pages=auto scope=spfile;

System altered.

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.

Total System Global Area  313159680 bytes
Fixed Size                  2227944 bytes
Variable Size             125829400 bytes
Database Buffers          180355072 bytes
Redo Buffers                4747264 bytes
Database mounted.
Database opened.

SQL> show parameter use_large_pages

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
use_large_pages                      string      AUTO

日志文件如下:

Starting ORACLE instance (normal)
WARNING: -------------------------------
WARNING: oradism did not start up correctly.
----------------------------------------
oradism creation failed for unknown reasons 0 8 500
Oradism Spawned failed for largepages allocation
****************** Large Pages Information *****************
Parameter use_large_pages = AUTO

Total Shared Global Region in Large Pages = 40 MB (13%)

Large Pages used by this instance: 20 (40 MB)
Large Pages unused system wide = 0 (0 KB) (alloc incr 4096 KB)
Large Pages configured system wide = 20 (40 MB)
Large Page size = 2048 KB
Time taken to allocate Large Pages = 0.000000 sec

RECOMMENDATION:
  Total Shared Global Region size is 302 MB. For optimal performance,
  prior to the next instance restart increase the number
  of unused Large Pages by atleast 131 2048 KB Large Pages (262 MB)
  system wide to get 100% of the Shared
  Global Region allocated with Large pages
***********************************************************

日志有一个Warning,oradism didn't startup correctly.数据库虽然启动成功了,但是没有达到预期的效果,当前的hugepages_total还是20。由于上面的warning,oradism进程启动失改,导致没有自动的扩大hugepages的尺寸。

[oracle@qht131 trace]$ cat /proc/meminfo | grep -i  page
AnonPages:        149396 kB
PageTables:        24300 kB
AnonHugePages:     34816 kB
HugePages_Total:      20
HugePages_Free:        8
HugePages_Rsvd:        8
HugePages_Surp:        0
Hugepagesize:       2048 kB

DISM是Solaris的组件,我的系统是rehdhat,估计是要手动安装些组件。

 DISM stands for Dynamic Intimate Shared Memory and it is the Solaris component that allows Automatic memory management on Linux and Solaris.DISM is turned on by default for Oracle Database 11.2.0.1 on Oracle Solaris, which makes it important for Database Administrators (DBAs) to understand its capabilities and behavior. as it relates to the memory_target parameters.

关于dism的官方文档:

https://www.oracle.com/technetwork/articles/systems-hardware-architecture/using-dynamic-intimate-memory-sparc-168402.pdf

所以在Linuxt系统将参数 use_large_pages设为TURE和AUTO效果是一样的,默认还是用TRUE吧。

 

http://blog.itpub.net/267265/viewspace-2101170/

http://blog.itpub.net/267265/viewspace-2145480/

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页