Benutzer-Werkzeuge

Webseiten-Werkzeuge


linux:huge_pages_linux_oracle

Huge Pages für eine Oracle Datenbank einrichten - Transparent Huge Pages deaktivieren

Ab einer gewissen Speichergrößen empfiehlt es sich Huge Pages für die Verwaltung des Speichers einzusetzen und das neue Feature Transparent Huge Pages zu deaktivieren.

Einrichtung Huge Pages:

  1. Datenbank auf die Verwendung des Parameters sga_target überprüfen - memory_target wird nicht unterstützt
  2. Anzahl der benötigten Huge Pages im OS aus der SGA Größe ermitteln
  3. HugePages im OS definieren
  4. Datenbank anpassen
    1. Numa Einstellungen prüfen und deaktivieren „_enable_NUMA_optimization“=false
    2. AMM (Automatic Memory Management) MEMORY_TARGET & MEMORY_MAX_TARGET ausschalten
    3. Indirect data buffers - Parameter USE_INDIRECT_DATA_BUFFERS=FALSE (default), dadurch memory allocation in pseudo-files under ramfs/tmpfs deaktivieren
    4. Paramter use_large_pages=true|automatic einstellen

Umstellen auf SGA_TARGET

Beim Umstellen von AMM (memory_target) Parameter darauf achten, das diese nicht auf den Wert „0“ sondern resetet werden!

Hier für eine Cluster Datenbank:

sqlplus / AS sysdba
 
SHOW parameter target
SHOW parameter MAX
 
ALTER system SET sga_target=40G scope=spfile sid='*';
ALTER system SET sga_max_size=40G scope=spfile sid='*';
 
ALTER system reset memory_target sid='*';
ALTER system reset memory_max_target sid='*';
 
exit
 
srvctl stop DATABASE -d GPIDB
srvctl START DATABASE -d GPIDB
 
sqlplus / AS sysdba
 
#check
SHOW parameter target
SHOW parameter MAX
 
#set PGA
SHOW parameter pga_aggregate_target
 
ALTER system SET pga_aggregate_target=8G scope=spfile sid='*';
 
exit

Bei Fehler mit memory_target siehe auch „ORA-00843, ORA-00849 When Trying To Change SGA_TARGET With MEMORY_MAX_TARGET=0 Being Active (Doc ID 1397761.1)“

Anzahl der Huge Pages ermitteln

Rule of thumb:

Byte Wert von „show SGA + 1%“ / 2MB = <Anzahl der Pages>

sqlplus / AS sysdba
 
sql>SHOW sga
 
 
Total System Global Area 4.2758E+10 bytes
....
 
 
sql>SELECT (4.2758E+10 * 1.01 )/ ((1024*1024)*2)  AS count_pages FROM dual;
 
COUNT_PAGES
-----------
 20592.4892

⇒ Im OS 20593 Seiten konfigurieren für sga_target=40G

Oder Verwendung des Scripts unter Shell Script to Calculate Values Recommended Linux HugePages / HugeTLB Configuration (Doc ID 401749.1)

Im OS die Huge Pages konfigurieren

⇒ Script für die Größe bei einer laufenden DB ⇒ https://oracle-base.com/articles/linux/configuring-huge-pages-for-oracle-on-linux-64 Mit „sysctl -w vm.nr_hugepages=20593“ kann die Anzahl der Huge Pages gesetzt werden.

Damit das auch noch nach dem nächsten Reboot gilt:

vi  /etc/sysctl.conf 
..
vm.nr_hugepages= 20593 
..
 
 
sysctl -w vm.nr_hugepages=20593
 
# oder einfach
 
sysctl -p

Prüfen mit:

# grep HugePages /proc/meminfo
 
HugePages_Total:   20593
HugePages_Free:    20593
HugePages_Rsvd:        0
HugePages_Surp:        0

Das auf allen Cluster Knoten in einer RAC Umgebung auch einrichten!

User Limits anpassen

vi /etc/security/limits.conf
 
oracle   soft   memlock         unlimited
oracle   hard   memlock         unlimited

DB anpassen

Den DB Parameter use_large_pages setzen:

  • false = keine Hugepages verwenden
  • true = Hugepage verwenden, falls genug da, ansonsten 4K Pages
  • only = Nur HugePages verwenden, falls zuwenige ⇒ ora-27102 : out of memory beim start der Instance
  • auto = ab 11.2.0.3 wird die Verwendung von Huge Pages automatisch erzwungen falls möglich siehe Node 1392497.1
sqlplus / as sysdba
 
sql>show parameter use_large_pages
 
sql>alter system set use_large_pages=only scope=spfile sid='*';
 
exit
 
srvctl stop database -d GPIDB
 
# grep HugePages /proc/meminfo
HugePages_Total:   20593
HugePages_Free:    20593
HugePages_Rsvd:        0
HugePages_Surp:        0
 
 
srvctl start database -d GPIDB
 
 
# grep HugePages /proc/meminfo
HugePages_Total:   20593
HugePages_Free:    17195
HugePages_Rsvd:    17083
HugePages_Surp:        0
 
 
HugePages_Total is the size of the pool of huge pages.
HugePages_Free  is the number of huge pages in the pool that are not yet
                allocated.
HugePages_Rsvd  is short for "reserved," and is the number of huge pages for
                which a commitment to allocate from the pool has been made,
                but no allocation has yet been made.  Reserved huge pages
                guarantee that an application will be able to allocate a
                huge page from the pool of huge pages at fault time.
HugePages_Surp  is short for "surplus," and is the number of huge pages in
                the pool above the value in /proc/sys/vm/nr_hugepages. The
                maximum number of surplus huge pages is controlled by
                /proc/sys/vm/nr_overcommit_hugepages.
 
 

Auf den Wert von HugePages_Rsvd achten! siehe auch https://www.kernel.org/doc/Documentation/vm/hugetlbpage.txt

Fehler: "ORA-27125: unable to create shared memory segment" bei set use_large_pages=only
adrci 
show alert
 
...
******************************************************************
Large Pages are not compatible with specified SGA memory parameters
use_large_pages = "ONLY" cannot be used with memory_target,
memory_max_target, or use_indirect_data_buffers parameters
Large Pages are compatible with sga_target and shared_pool_size
******************************************************************
..

Die Ursache sind falsch auf 0 gesetzte MEMORY TARGET Parameter!

Lösung, Mit Backup PFILE SPFILE „reparieren“ und Memory Parameter reseten und nicht auf den wert 0 setzen!

#Merken wo das SPFILE zur Zeit liegt:
 
srvctl config database -d GPI
....
Spfile: +DATA01/ISORCL7/spfileISORCL7.ora
...
 
#Backup SPfile suchen, letzes Backup in meine Fall unter 
#/u01/app/oracle/flash_recovery_area/GPIDB1/init_GPIDB1_1.ora
 
 
sqlplus / as sysdba
 
sql>create spfile='+DATA01/GPIDB/spfileGPIDB1.ora' from pfile='/u01/app/oracle/flash_recovery_area/GPIDB/init_GPIDB_1.ora';
 
sqlplus>startup
 
# Memory Parameter wie oben beschrieben anpassen
 
sqlplus>shutdown immediate
sqlplus>exit
 
exit
 
srvctl start database -d GPIDB

Bei Fehler mit memory_target: siehe auch ORA-00843, ORA-00849 When Trying To Change SGA_TARGET With MEMORY_MAX_TARGET=0 Being Active (Doc ID 1397761.1)

Numa Support prüfen und bei Bedarf ausschalten

siehe Oracle Support Document 736173.1 (NUMA FAQ)

In 11g per Default off, siehe hidden Parameter „_enable_NUMA_support“ sollte auf „FALSE“ stehen

Abfragen mit „init.sql num“ in SQL*Plus, siehe dazu Script unter init.sql.

numa kann auch komplett auf OS Level ausgeschaltet werden, in der Boot Konfiguration „/boot/grub/grub.conf: numa=off“ setzen und Boot Konfiguration neu schreiben lassen.

Ein Kunde hat im Zusammenhang mit dem Oracle Resource Manager und einem 6.5 Linux berichtet das nur so der Resource Manager betrieben werden kann.

Transparent Huge Pages ausschalten

Seit der Version Linux 6 gibt es das ransparent Huge Pages Feature, zur Zeit wird aber abgeraten es einzusetzen.

Testen ob im Einsatz

Test hier auf einem Oracle Linux Server release 6.5 - hier ist das per Default ausgeschaltet

cat /boot/config-`uname -r`| grep TRANSPARENT_HUGEPAGE
 
CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=y
# CONFIG_TRANSPARENT_HUGEPAGE is not set
 
grep AnonHugePages /proc/meminfo
 
#alternativ falls aktiviert
cat /sys/kernel/mm/transparent_hugepage/enabled
cat /sys/kernel/mm/transparent_hugepage/defrag
 
#bzw falls ein Redhat
cat /sys/kernel/mm/redhat_transparent_hugepage/enabled
always [never] 
 
# Das heißt es ist ausgeschaltet!

Dauerhaft ausschalten

A) /etc/rc.local anpassen und rebooten:

...
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
 echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
 echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
...

Quellen

SAP

  • SAP Note 1672954 - Oracle 11g: Usage of hugepages on Linux
  • SAP Note 1871318 - Linux: Disable Transparent HugePages for Oracle Database

Oracle Support

  • Oracle Support Document 361468.1 (HugePages on Oracle Linux 64-bit)
  • Oracle Support Document 361323.1 (HugePages on Linux: What It Is… and What It Is Not…)
  • Oracle Support Document 1392497.1 (USE_LARGE_PAGES To Enable HugePages)
  • Shell Script to Calculate Values Recommended Linux HugePages / HugeTLB Configuration (Doc ID 401749.1)
  • ASMM versus AMM and LINUX x86-64 Hugepages Support (Doc ID 1134002.1)
  • Oracle Support Document 1392497.1 (USE_LARGE_PAGES To Enable HugePages)

Rechner:

Transparend Huge Pages:

  • Oracle Support Document 1557478.1 (ALERT: Disable Transparent HugePages on SLES11, RHEL6, OEL6 and UEK2 Kernels)

Transparent Huge Pages Erklärung:

Blogs:

Cookies helfen bei der Bereitstellung von Inhalten. Durch die Nutzung dieser Seiten erklären Sie sich damit einverstanden, dass Cookies auf Ihrem Rechner gespeichert werden. Weitere Information
"Autor: Gunther Pipperr"
linux/huge_pages_linux_oracle.txt · Zuletzt geändert: 2018/11/04 17:49 von Gunther Pippèrr