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.
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)“
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)
⇒ 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
Den DB Parameter use_large_pages setzen:
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
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)
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.
Seit der Version Linux 6 gibt es das ransparent Huge Pages Feature, zur Zeit wird aber abgeraten es einzusetzen.
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!
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 ...
SAP
Oracle Support
Rechner:
Transparend Huge Pages:
Transparent Huge Pages Erklärung:
Blogs: