Benutzer-Werkzeuge

Webseiten-Werkzeuge


linux:huge_pages_linux_oracle

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
linux:huge_pages_linux_oracle [2014/11/06 15:56] gpipperrlinux:huge_pages_linux_oracle [2018/11/04 17:49] (aktuell) – [Im OS die Huge Pages konfigurieren] gpipperr
Zeile 1: Zeile 1:
 +====== 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:====
 +
 +  - Datenbank auf die Verwendung des Parameters sga_target überprüfen - memory_target wird nicht unterstützt
 +  - Anzahl der benötigten Huge Pages im OS aus der SGA Größe ermitteln
 +  - HugePages im OS definieren
 +  - Datenbank anpassen
 +    - Numa Einstellungen prüfen und deaktivieren "_enable_NUMA_optimization"=false
 +    - AMM (Automatic Memory Management) MEMORY_TARGET & MEMORY_MAX_TARGET ausschalten
 +    - Indirect data buffers - Parameter USE_INDIRECT_DATA_BUFFERS=FALSE (default), dadurch memory allocation in pseudo-files under ramfs/tmpfs deaktivieren
 +    - 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:
 +
 +<code sql>
 +
 +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
 +
 +
 +</code>
 +
 +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>
 +
 +<code sql>
 +
 +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
 +
 +</code>
 +
 +=> 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:
 +<code bash>
 +
 +vi  /etc/sysctl.conf 
 +..
 +vm.nr_hugepages= 20593 
 +..
 +
 +
 +sysctl -w vm.nr_hugepages=20593
 +
 +# oder einfach
 +
 +sysctl -p
 +
 +</code>
 +
 +
 +Prüfen mit:
 +
 +<code bash>
 +
 +# grep HugePages /proc/meminfo
 +
 +HugePages_Total:   20593
 +HugePages_Free:    20593
 +HugePages_Rsvd:        0
 +HugePages_Surp:        0
 +
 +</code>
 +
 +
 +Das auf allen Cluster Knoten in einer RAC Umgebung auch einrichten!
 +
 +User Limits anpassen
 +
 +<code bash>
 +
 +vi /etc/security/limits.conf
 +
 +oracle   soft   memlock         unlimited
 +oracle   hard   memlock         unlimited
 +
 +</code>
 +
 +
 +=== 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
 +
 +<code bash>
 +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.
 +                
 +                
 +</code>
 +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==
 +
 +<code bash>
 +
 +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
 +******************************************************************
 +..
 +</code>
 +
 +
 +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!
 +
 +<code bash>
 +
 +#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
 +
 +</code>
 +
 +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 [[[http://orapowershell.codeplex.com/SourceControl/latest#sql/init.sql|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
 +
 +<code bash>
 +
 +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!
 +
 +
 +</code>
 +
 +
 +=== Dauerhaft ausschalten ===
 +A)
 +/etc/rc.local anpassen und rebooten:
 +<code bash>
 +...
 +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
 +...
 +</code>
 +
 +===== 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) 
 +  * http://docs.oracle.com/cd/E37670_01/E37355/html/ol_config_hugepages.html
 +
 +
 +Rechner:
 +  * http://www.peuss.de/node/67
 +
 +
 +Transparend Huge Pages:
 +
 +  * http://notes-on-technology.blogspot.de/2012/10/redhattransparenthugepage-can-hurt-java.html
 +  * http://lwn.net/Articles/423592/
 +  * https://blogs.oracle.com/linux/entry/performance_issues_with_transparent_huge
 + 
 +
 +  * Oracle Support Document 1557478.1 (ALERT: Disable Transparent HugePages on SLES11, RHEL6, OEL6 and UEK2 Kernels)
 +  * 
 +
 +Transparent Huge Pages Erklärung:
 +  * http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/Documentation/vm/transhuge.txt?id=HEAD
 +
 +Blogs:
 +
 +  * http://blog.yannickjaquier.com/linux/tmpfs-vs-ramfs-vs-transparent-huge-pages.html
linux/huge_pages_linux_oracle.txt · Zuletzt geändert: 2018/11/04 17:49 von gpipperr