linux:huge_pages_linux_oracle
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
linux:huge_pages_linux_oracle [2014/11/04 12:23] – [Transparent Huge Pages ausschalten] gpipperr | linux: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 " | ||
+ | - 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 " | ||
+ | |||
+ | 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 | ||
+ | |||
+ | |||
+ | </ | ||
+ | |||
+ | Bei Fehler mit memory_target siehe auch " | ||
+ | |||
+ | |||
+ | === 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> | ||
+ | |||
+ | COUNT_PAGES | ||
+ | ----------- | ||
+ | | ||
+ | |||
+ | </ | ||
+ | |||
+ | => 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:// | ||
+ | Mit " | ||
+ | |||
+ | Damit das auch noch nach dem nächsten Reboot gilt: | ||
+ | <code bash> | ||
+ | |||
+ | vi / | ||
+ | .. | ||
+ | vm.nr_hugepages= 20593 | ||
+ | .. | ||
+ | |||
+ | |||
+ | sysctl -w vm.nr_hugepages=20593 | ||
+ | |||
+ | # oder einfach | ||
+ | |||
+ | sysctl -p | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | Prüfen mit: | ||
+ | |||
+ | <code bash> | ||
+ | |||
+ | # grep HugePages / | ||
+ | |||
+ | HugePages_Total: | ||
+ | HugePages_Free: | ||
+ | HugePages_Rsvd: | ||
+ | HugePages_Surp: | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | Das auf allen Cluster Knoten in einer RAC Umgebung auch einrichten! | ||
+ | |||
+ | User Limits anpassen | ||
+ | |||
+ | <code bash> | ||
+ | |||
+ | vi / | ||
+ | |||
+ | oracle | ||
+ | oracle | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | === 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> | ||
+ | |||
+ | exit | ||
+ | |||
+ | srvctl stop database -d GPIDB | ||
+ | |||
+ | # grep HugePages / | ||
+ | HugePages_Total: | ||
+ | HugePages_Free: | ||
+ | HugePages_Rsvd: | ||
+ | HugePages_Surp: | ||
+ | |||
+ | |||
+ | srvctl start database -d GPIDB | ||
+ | |||
+ | |||
+ | # grep HugePages / | ||
+ | HugePages_Total: | ||
+ | HugePages_Free: | ||
+ | HugePages_Rsvd: | ||
+ | HugePages_Surp: | ||
+ | |||
+ | |||
+ | HugePages_Total is the size of the pool of huge pages. | ||
+ | HugePages_Free | ||
+ | allocated. | ||
+ | HugePages_Rsvd | ||
+ | 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 | ||
+ | the pool above the value in / | ||
+ | maximum number of surplus huge pages is controlled by | ||
+ | / | ||
+ | | ||
+ | | ||
+ | </ | ||
+ | Auf den Wert von HugePages_Rsvd achten! | ||
+ | siehe auch https:// | ||
+ | |||
+ | |||
+ | ==Fehler: " | ||
+ | |||
+ | <code bash> | ||
+ | |||
+ | adrci | ||
+ | show alert | ||
+ | |||
+ | ... | ||
+ | ****************************************************************** | ||
+ | Large Pages are not compatible with specified SGA memory parameters | ||
+ | use_large_pages = " | ||
+ | memory_max_target, | ||
+ | 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 " | ||
+ | |||
+ | <code bash> | ||
+ | |||
+ | #Merken wo das SPFILE zur Zeit liegt: | ||
+ | |||
+ | srvctl config database -d GPI | ||
+ | .... | ||
+ | Spfile: +DATA01/ | ||
+ | ... | ||
+ | |||
+ | #Backup SPfile suchen, letzes Backup in meine Fall unter | ||
+ | #/ | ||
+ | |||
+ | |||
+ | sqlplus / as sysdba | ||
+ | |||
+ | sql> | ||
+ | |||
+ | sqlplus> | ||
+ | |||
+ | # Memory Parameter wie oben beschrieben anpassen | ||
+ | |||
+ | sqlplus> | ||
+ | sqlplus> | ||
+ | |||
+ | 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 " | ||
+ | |||
+ | Abfragen mit " | ||
+ | |||
+ | **numa** kann auch komplett auf OS Level ausgeschaltet werden, in der Boot Konfiguration "/ | ||
+ | |||
+ | 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 / | ||
+ | |||
+ | CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=y | ||
+ | # CONFIG_TRANSPARENT_HUGEPAGE is not set | ||
+ | |||
+ | grep AnonHugePages / | ||
+ | |||
+ | #alternativ falls aktiviert | ||
+ | cat / | ||
+ | cat / | ||
+ | |||
+ | #bzw falls ein Redhat | ||
+ | cat / | ||
+ | always [never] | ||
+ | |||
+ | # Das heißt es ist ausgeschaltet! | ||
+ | |||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | === Dauerhaft ausschalten === | ||
+ | A) | ||
+ | / | ||
+ | <code bash> | ||
+ | ... | ||
+ | if test -f / | ||
+ | echo never > / | ||
+ | fi | ||
+ | if test -f / | ||
+ | echo never > / | ||
+ | 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) | ||
+ | * http:// | ||
+ | |||
+ | |||
+ | Rechner: | ||
+ | * http:// | ||
+ | |||
+ | |||
+ | Transparend Huge Pages: | ||
+ | |||
+ | * http:// | ||
+ | * http:// | ||
+ | * https:// | ||
+ | |||
+ | |||
+ | * Oracle Support Document 1557478.1 (ALERT: Disable Transparent HugePages on SLES11, RHEL6, OEL6 and UEK2 Kernels) | ||
+ | * | ||
+ | |||
+ | Transparent Huge Pages Erklärung: | ||
+ | * http:// | ||
+ | |||
+ | Blogs: | ||
+ | |||
+ | * http:// |
linux/huge_pages_linux_oracle.txt · Zuletzt geändert: 2018/11/04 17:49 von gpipperr