Zusätzliche Optimierungen für gestreckte FMW-Cluster konfigurieren
Obwohl nicht alle für diese Topologie obligatorisch sind, verbessern sie die Performance und verbessern das Verhalten bestimmter Funktionen und Szenarien.
Timeouts in Oracle WebLogic Server (WLS) konfigurieren
Für Transaktionen in der Datenbank, für Transaktionsverzweigungen, Aufrufe der Enterprise JavaBean-(EJB-)Methode, Webservices usw. sind Timeoutlimits angegeben. Die gestreckten Oracle Fusion Middleware-Cluster-Deployments reagieren besonders auf Timeouteinstellungen, da mehrere Vorgänge an einem anderen Speicherort auf die Datenbank zugreifen müssen. Konfigurieren Sie die Timeouts wie folgt:
- Sie machen die Latenz im System aus.
Möglicherweise müssen Sie die Timeouts in diesen Systemtypen aufgrund der damit verbundenen Latenzen erhöhen. Im gestreckten Clustermodell werden Domaineinstellungen für beide Sites freigegeben. Daher müssen Timeouts verwendet werden, die für das Worst-Case-Szenario verantwortlich sind.
- Sie laufen in der Aufrufkette über verschiedene Ebenen hinweg ordnungsgemäß ab.
Timeouts müssen in den verschiedenen Schichten des Systems so konfiguriert werden, dass sich die entsprechenden umschließenden Tiers ordnungsgemäß verhalten. Beispiel: Wenn der Datenbank-Timeout auf einen Wert gesetzt ist, der niedriger ist als der globale WLS-Timeout, kann eine Transaktions-ID aus der Datenbank "entfernt" werden, bevor die Arbeit an anderen Verzweigungen abgeschlossen ist.
Dies sind die wichtigsten Timeoutparameter in verschiedenen Layern:
- Timeout bei globaler Transaktion
Das Timeout für globale Oracle WebLogic Server-Transaktionen bestimmt die maximale Dauer (in Sekunden), die eine verteilte Transaktion (eine globale Transaktion) aktiv bleiben darf, bevor sie automatisch von Oracle WebLogic Server zurückgesetzt wird. Konfigurieren Sie den globalen Transaktionstimeout in der WebLogic Remotekonsole, indem Sie im Abschnitt Services des Bearbeitungsbaums die Option JTA (Java Transaction API) auswählen und Timeout in Sekunden angeben.
- XA-Transaktionstimeouts
Der XA-Transaktionstimeout in den XA-Datenquellen wird in Oracle WebLogic Server verwendet, um einen Transaktionsverzweigungstimeout für Datenquellen festzulegen. Standardmäßig ist dieser Wert auf 0 (Null) gesetzt. Daher wird das globale Transaktionstimeout WebLogic verwendet. Sie können diesen Wert jedoch einrichten, wenn Sie über lang laufende Transaktionen verfügen, die den Standard-Timout-Wert in der XA-Ressource überschreiten. Dieser Wert wird für jede XA-Datenquelle auf der Registerkarte Transaktion konfiguriert.
- Verteiltes Sperr-Timeout
Das verteilte Lock-Timeout in der Datenbank gibt an, wie lange verteilte Transaktionen auf gesperrte Ressourcen warten (in Sekunden). Sie können den Parameter (
distributed_lock_timeout) mit den entsprechendenSQL ALTER-Anweisungen ändern.
Legen Sie das verteilte Sperr-Timeout der Datenbank so lange fest, dass die langsamste Transaktion unter Berücksichtigung von Netzwerkverzögerungen zwischen den Sites ausgeführt werden kann. Danach legen Sie die XA-Datenquelle und die globalen Transaktions-Timeouts mit der folgenden Regel auf niedrigere Werte fest:
distributed_lock_timeout >= XA DS Timeout >= Global Transaction TimeoutAnwendungen können zusätzliche Timeoutparameter verwenden. Beispiel: Oracle SOA und BPEL haben die folgenden zusätzlichen Timeoutparameter, die Sie berücksichtigen müssen:
- syncMaxWaitTime
syncMaxWaitTime ist die maximale Zeit, die ein synchroner Client auf eine Antwort wartet. Diese Einstellung legt fest, wie lange ein Anforderungs- und Antwortvorgang dauern kann, bevor ein Timeout auftritt. Wenn der BPEL-Prozess innerhalb dieser Zeit keine Antwort erhält, verläuft die Aktivität nicht erfolgreich. So ändern Sie diesen Wert in Oracle Enterprise Manager Fusion Middleware Control:
- Klicken Sie mit der rechten Maustaste auf SOA-infra, und wählen Sie SOA-Administration aus.
- Wählen Sie BPEL-Eigenschaften.
- Wählen Sie Weitere BPEL-Konfigurationseigenschaften aus.
- Aktualisieren Sie den Wert syncMaxWaitTime (in Sekunden).
- Timeout für EJBs
Wenn die BPEL-EJBs-Methoden beteiligt sind, gibt dies den Transaktionstimeout in Sekunden an (Standardwert ist 300 für alle BPEL-EJBs). Ändern Sie den Timeout wie folgt:
- Wählen Sie in der Monitoringstruktur der WebLogic Remotekonsole die Option Deployments und dann Application Management aus.
- Blenden Sie die Anwendung soa_infra ein, und blenden Sie Konfiguration und Sub-Deployment ein.
- Blenden Sie das Modul ein, und wählen Sie das spezifische BPEL-EJB.
Global Transaction Timeout > BPEL EJB's transaction timeout > syncMaxWaitTime - Timeout für Webservices-Clients
Der Webserviceclient muss mit einem Timeout konfiguriert werden, der mit der schlechtesten Latenz ausreichend zulässig ist. Beispiel: Wenn ein Anruf 3 Sekunden bis Site 1 dauert, aber 10 Sekunden bis Site 2 dauert, sollte der Timeout auf mindestens 10 Sekunden eingestellt werden, um die langsamere Site zu verarbeiten.
- Timeout bei BPEL-Prozessen
Wenn der BPEL-Prozess bestimmte Request-Reply-(synchrone) und In-Only-Empfang-(asynchrone) Timeouts verwendet, müssen Sie diese auf der Grundlage des Worst-Case-Szenarios definieren: Wenn der Aufruf an die Site mit der höchsten Datenbanklatenzzeit erfolgt. Diese Timeout-Einstellungen werden im BPEL-Prozess definiert und können nicht für jede Site unterschiedlich festgelegt werden. Weitere Informationen zum Konfigurieren von Ereignissen und Timeouts in BPEL-Prozessen finden Sie im Oracle Fusion Middleware Developer's Guide for Oracle SOA Suite. Siehe Abschnitt "Mehr entdecken".
Sessionreplikation konfigurieren
Einige Anwendungen (Webanwendungen, Konsolen wie Oracle SOA Composer, BPM Composer, BPM Workspace usw.) verwenden HTTP-Sessionobjekte intensiv.
Einer der Vorteile des gestreckten Cluster-Deployments von Oracle Fusion Middleware (FMW) ist die Möglichkeit eines nahtlosen Failovers zwischen Sites. Die regionsübergreifende Sessionreplikation kann jedoch zu einer Verschlechterung der Performance im System führen. Oracle empfiehlt, zwei verschiedene Replikationsgruppen (eine für jede Region) zu definieren, um die Replikation über die beiden Sites hinweg zu minimieren.
So konfigurieren Sie Sessionreplikationsgruppen:
- Wählen Sie in der WebLogic Remotekonsole "Baum bearbeiten" die Optionen Umgebung, Server aus.
- Wählen Sie Servername aus, und wählen Sie dann die Registerkarte Cluster aus.
- Geben Sie für jeden Server in Region 1 denselben Namen für die Replikationsgruppe ein (Beispiel: Region1RepGroup).
- Wiederholen Sie die Schritte für die Server in Region 2. Verwenden Sie für alle Server einen gemeinsamen Namen, der sich jedoch von dem in Region 1 verwendeten Namen unterscheidet (Beispiel: Region2RepGroup).
Beachten Sie, dass die Verwendung von Replikationsgruppen die beste Methode ist, um den Status nur auf Server auf derselben Site zu replizieren, aber keine deterministische Methode ist. Wenn ein einzelner Server auf einer Site verfügbar ist und andere auf der anderen verfügbar sind, erfolgt die Replikation über die Regionen hinweg und wird für diese Session fortgesetzt, auch wenn die Server auf derselben Site wieder online sind.
In-Place-Neustart für JMS konfigurieren
Die persistenten Speicher sind für die ordnungsgemäße Funktion der Oracle WebLogic Server-(WLS-)Server von entscheidender Bedeutung. Wenn beim In-Place-Neustart ein Fehler im persistenten Speicher auftritt, versucht der JMS-Service, auf demselben Server neu zu starten, bevor er versucht, auf einen anderen Server zu migrieren. Diese Methode ist schneller als die Migration des gesamten JMS-Service auf einen anderen Server und kann Probleme oft schnell lösen.
Um einen In-Place-Neustart für persistente JMS-Speicher zu konfigurieren, müssen der zugehörige JMS-Server und der persistente Speicher auf ein migrierbares Ziel ausgerichtet sein. Dieses migrierbare Ziel muss Bei Fehler neu starten verwenden, was standardmäßig nicht aktiviert ist. So konfigurieren Sie diese Eigenschaft:
- Verbindung zur WebLogic Remotekonsole herstellen
- Wählen Sie im Baum bearbeiten die Optionen Umgebung, Migrierbare Ziele aus.
- Wählen Sie ein migrierbares Ziel aus, und aktivieren Sie Bei Fehler neu starten.
- Wählen Sie Speichern aus, und speichern Sie die Änderungen.
Oracle FMW SOA Suite JMS-Adapter konfigurieren
Oracle empfiehlt die Verwendung der Clustersyntax (Beispiel: cluster:t3s://cluster_name), um die Konfiguration zu vereinfachen. Dieser Ansatz vereinfacht die Konfiguration, indem der Adapter die aktuelle Liste der aktiven Server im Cluster dynamisch abrufen kann, um einen effizienten JNDI-Kontextabruf sicherzustellen.
Wenn das System den JMS-Adapter intensiv und mit großen Payloads verwendet, wird empfohlen, die JNDI-URL so zu konfigurieren, dass nur die lokalen Server in jeder Region einbezogen werden. Das bedeutet, dass Server in Region 1 für Konfigurationen in Region 1 und Server in Region 2 für Konfigurationen in Region 2 angegeben werden. Dieses Setup stellt die Affinität zum Standortkontext sicher, optimiert die Performance und reduziert die Latenz.
Oracle FMW SOA Suite-Dateiadapter konfigurieren
Dieser Mechanismus stellt sicher, dass dieselbe Datei nur von einem Server gleichzeitig verarbeitet wird und dass zwei Adapterinstanzen nicht gleichzeitig in dieselbe Datei schreiben.
In der gestreckten Clustertopologie von Oracle Fusion Middleware (FMW) arbeitet jede Site unabhängig und verarbeitet Dateien mit ihrem eigenen dedizierten Shared Storage. Standardmäßig verwenden beide Sites jedoch dieselbe Datenquelle, dasselbe Schema und dieselben Tabellen für Dateisperren und Mutex-Mechanismen.
Bei ausgehenden Vorgängen ist die Verwendung einer gemeinsamen Datenbanktabelle angemessen, da eine eindeutige Sequenz als Mutex verwendet wird, um zu verhindern, dass nebenläufige Schreibvorgänge Dateien überschreiben.
Für eingehende Vorgänge können jedoch Szenarios "unter Verarbeitung" auftreten. File Adapter-Instanzen in jeder Site können eine Datei als "blockiert" markieren. Wenn auf beiden Sites derselbe Dateiname vorhanden ist, kann dieser Mechanismus die Verarbeitung in beiden Speicherorten blockieren. Die Datei wird jedoch nur in einem dieser Speicherorte verwendet. Um diese Situationen zu vermeiden, gibt es mehrere Alternativen:
- Site-spezifische Dateibenennungskonventionen implementieren Verwenden Sie eindeutige IDs in Dateinamen basierend auf der Site, um die Wahrscheinlichkeit von Namenskollisionen und nachfolgendes Blockieren zu verringern.
- Konfigurieren Sie separate Schemas für jede Region für die File Adapter Lock- und Mutex-Tabellen, um sicherzustellen, dass Dateisperren und Mutex-Mechanismen unabhängig voneinander funktionieren, wodurch das Blockieren zwischen Standorten verhindert wird.
- Verwenden Sie eine separate Datenbank für die File Adapter Lock- und Mutex-Tabellen, um sicherzustellen, dass die Dateiverarbeitungsmetadaten separat verwaltet werden.
Um den Dateiadapter so zu konfigurieren, dass verschiedene Datenbanken oder separate Schemas in jeder Region verwendet werden, müssen Sie den entsprechenden Schemaeigentümer und die entsprechenden Tabellen erstellen und eine neue Datenquelle einrichten. Die Server in Region 1 verwenden weiterhin die ursprüngliche Datenquelle. Nur der Deployment-Plan in Region 2 wird zur Verwendung der neuen Datenquelle geändert.
Die Server in Region 1 verwenden die ursprüngliche Datenquelle, während die Server in Region 2 die neue verwenden.
Oracle Fusion Middleware Oracle SOA Suite In-Memory SOA konfigurieren
Dies verbessert die Performance und Skalierbarkeit dieser Geschäftsprozesse, da Lese- und Schreibvorgänge aus dem Cache ausgeführt werden.
Die BPEL-Statusinformationen werden in den Oracle Coherence-Cache gespeichert und daraus abgerufen. Der Prozessstatus wird nur dann in die Datenbank geschrieben, wenn ein Fehler auftritt, oder in regelmäßigen Abständen mit einem Write-Behind-Thread.
In-Memory-SOA wird in der gestreckten Clustertopologie von Oracle Fusion Middleware nicht unterstützt, wobei die Nutzung des Coherence-Caches minimal sein muss, da es sehr empfindlich auf Verzögerungen reagiert.
Tuning konfigurieren WebLogic Database Leasing
Das Datenbank-Leasing ist ein Kernmechanismus zur Unterstützung der automatischen Servicemigration, insbesondere für geclusterte Singleton-Services wie JMS-Server oder JTA Transaction Recovery Service. Sie dient zur Verwaltung und Koordination der Eigentümerschaft dieser Singleton-Services über mehrere Server in einem Cluster hinweg. Dieser Mechanismus verwendet eine Datenbank als zentralen Punkt, um zuverlässig zu verfolgen und zu steuern, welcher Server in einem Cluster zu einem bestimmten Zeitpunkt "besitzt" oder einen bestimmten Singleton-Service verwaltet. Dazu wird ein Releasedatensatz in der Datenbank gespeichert, der vom Eigentümerserver regelmäßig aktualisiert (erneut verlängert) wird. Siehe Leasing für migrierbare Services in Cluster für Oracle WebLogic Server verwalten.
Die Konfiguration für die zuvor in dieser Dokumentation bereitgestellten GridLink-Datenquellen garantiert automatische Neuverbindungen, wenn ein Datenbank-Failover oder ein Switchover stattfindet. Alle Server, die mit Datenbankleasing oder mit persistenten JDBC-Speichern konfiguriert sind, können jedoch bei einem Datenbankausfall, Switchover oder Failover heruntergefahren werden. Wenn ein kritisches Subsystem (wie der JTA-Service) ausfällt, wird der Server auf den Status FAILED gesetzt und vom Node Manager automatisch neu gestartet.
Die Zeit, die benötigt wird, um in den Status FAILED zu gelangen, ist variabel. Sie hängt davon ab, wann die relevanten Prüfungen ausgelöst werden, und kann aus verschiedenen Gründen auftreten:
- Wenn der Server die Leasing-Tabelle nach der Gesamtanzahl der Wiederholungen nicht aktualisieren kann.
- Wenn der Server nach verschiedenen Wiederholungen und In-Place-Neustarts nicht auf den persistenten JTA JDBC-Speicher zugreifen kann.
Ein Datenbank-Switchover kann einige Minuten dauern. Der automatische Neustart von WLS-Servern aufgrund des Zugriffsverlusts auf den persistenten JTA JDBC-Speicher dauert ca. 8-9 Minuten, sodass er bei einem typischen Switchover oder Failover der Datenbank nicht ausgelöst wird. Ein Server kann jedoch in den Status FAILED übergehen, da ein Leasing in weniger als 2 Minuten mit der Standard-Leasingkonfiguration verloren geht. Daher kann ein Neustart von Oracle WebLogic Server bei einem Oracle Data Guard-Switchover oder -Failover automatisch ausgelöst werden, wenn dieser WebLogic-Server Datenbankleasing verwendet.
Es gibt zwei Parameter, um die Resilienz von Datenbankausfällen für Server mit Datenbankleasing zu verbessern. Diese Parameter sind database-leasing-basis-connection-retry-count (standardmäßig 1 Wiederholung) und database-leasing-basis-connection-retry-delay (standardmäßig 1 Sekunde). Die Erhöhung dieser Parameter verlängert die Zeit, bevor ein Leasingfehler auftritt. Dadurch können die WebLogic-Server längere Datenbankausfälle tolerieren, ohne dass sie automatisch neu gestartet werden. Sie stellen einfach eine erneute Verbindung zur Datenbank her, sobald sie wieder verfügbar ist. Obwohl Verbindungsversuche nicht erfolgreich sind, während die Datenbank heruntergefahren ist, werden die WebLogic-Server nicht neu gestartet.
Daher wird in einem gestreckten Cluster empfohlen, die Werte für "Anzahl Wiederholungen der Datenbank-Leasing-Verbindung" und "Timeout" zu erhöhen, um den WebLogic-Server widerstandsfähiger gegen die Datenbankausfälle zu machen. Um diese Eigenschaften zu ändern, verwenden Sie WLST-Befehle. Beispiel:
$ORACLE_COMMON_HOME/common/bin/wlst.sh
connect('weblogic','password','t3s://ADMINVHN:9002')
edit()
startEdit()
cd('/Clusters/' + 'My_Cluster')
cmo.setDatabaseLeasingBasisConnectionRetryCount(10)
cmo.setDatabaseLeasingBasisConnectionRetryDelay(10000L)
save()
activate()
disconnect()
exit()Tipp:
Wenn ein Server den Status FAILED erreicht, versucht der Node Manager standardmäßig zwei Neustarts für den Server. Wenn der Server nicht ordnungsgemäß hochgefahren werden kann, wird er als FAILED_NOT_RESTARTABLE markiert. Sie können die Anzahl der Neustarts auf der Registerkarte Zustand des Servers optimieren. Mit dem Parameter Max. Neustarts innerhalb des Intervalls definieren Sie, wie oft der Node Manager den Server innerhalb des unter Neustartintervall angegebenen Intervalls neu starten kann.Coherence konfigurieren
Beispiel: Oracle SOA Suite verwendet Oracle Coherence, um Composite-Deployments und Metadaten-(MDS-)Updates in einem Cluster zu propagieren.
Oracle Coherence unterstützt sowohl Multicast- als auch Unicast-Kommunikation für Cluster Member Discovery und Messaging. Unicast eignet sich besonders in Umgebungen, in denen Multicast nicht verfügbar ist oder nicht unterstützt wird, z. B. in mehreren Data Centern oder Cloud-Regionen. Mit dem Feature für bekannte Adressen (WKA) können Cluster-Member das Cluster erkennen und verknüpfen, ohne sich auf Multicast zu verlassen. Wenn WKA konfiguriert ist, ist die gesamte Multicast-Kommunikation deaktiviert. Standardmäßig verwenden Oracle Fusion Middleware-Produkte Unicast mit einer vordefinierten WKA-Liste für Coherence.
Oracle Coherence ist empfindlich auf Verzögerungen bei der Clusterbildung und bei der Reaktion auf Heartbeats von Cluster-Membern. Allerdings haben aktuelle Versionen eine verbesserte Toleranz gegenüber Kommunikationsverzögerungen durch Features wie allowable variance. Die allowable variance definiert die zulässigen Timingvariationen in der Netzwerkkommunikation in einem Coherence-Cluster. Dieser konfigurierbare Parameter (maximum-time-variance), der standardmäßig auf 16 ms gesetzt wird, legt die maximal zulässige Latenz für Roundtrip Time-(RTT-)UDP-Kommunikationen fest. Coherence passt diesen Wert dynamisch an, indem es auf beobachtete Netzwerklatenzen oder Inkonsistenzen reagiert und die Clusterstabilität und -performance aufrechterhält, indem größere Abweichungen beim erwarteten Timing berücksichtigt werden. Die Meldung Increasing allowable variance to XX gibt eine solche Anpassung an. Siehe Operational Configuration Elements in Developing Applications with Oracle Coherence.
Mit dieser Verbesserung von Oracle Coherence werden keine Fehler bei der Clusterbildung gemeldet, wenn die Latenz innerhalb der empfohlenen Limits für die FMW-gestreckte Clustertopologie (<10 ms RTT) bleibt. Dennoch können lange Verzögerungen bei Cluster-Heartbeats zu Konflikten bei Bereitstellungen und schlechten Reaktionszeiten auf Ausfälle führen.
Wenn Fehler in der Coherence-Clusterbildung oder bei Operationen auftreten, können Sie die folgenden Coherence-Netzwerktimeoutparameter anpassen:
<multicast-listener><join-timeout-milliseconds>. Obwohl es ursprünglich für Multicast-Konfigurationen konzipiert wurde, wirkt sich Join-Timeout auch in Unicast aus. Es bestimmt, wie lange der anfängliche Knoten dauert, um ein Cluster zu bilden, und danach, wie lange jeder Knoten nach dem Cluster sucht, bevor er versucht, sich selbst zu bilden (wenn er sich auf der WKA-Liste befindet). Der Standardwert ist 3000. In einem unzuverlässigen Netzwerk müssen Sie diesen Wert möglicherweise erhöhen, um einen längeren Zeitraum zu versuchen, ein Cluster zu finden, bevor Sie ein neues starten.<packet-publisher><packet-delivery><resend-milliseconds>. Das Intervall für das erneute Senden des Pakets gibt die minimale Zeit in Millisekunden an, die der Paketherausgeber auf ein entsprechendes ACK-Paket wartet, bevor ein Paket erneut gesendet wird. Dies sollte ein paar Vielfache der RTT sein, 10x sollte in Ordnung sein. Der Standardwert ist 200.<packet-publisher><packet-delivery><timeout-milliseconds>. Bei Paketen, die eine Bestätigung erfordern, wird die maximale Zeit in Millisekunden angegeben, die ein Paket erneut gesendet wird. Nach Ablauf dieses Timeouts bestimmt Coherence, ob der Empfänger als beendet betrachtet wird. Der Standardwert von 5 Minuten sollte ausreichen. Sie können ihn jedoch erhöhen, um Timeouts beim Beitritt zum Cluster zu vermeiden.<packet-publisher><packet-delivery><heartbeat-milliseconds>Dieser Parameter ist das Heartbeat-Intervall für die TCP-Ring-Todeserkennung. Der Standard-Heartbeat-Wert ist 1 Sekunde. Sie können den Wert erhöhen, um den Netzwerkverkehr zu lindern. Dies verlängert jedoch auch die Erkennung ausgefallener Member.<tcp-ring-listener><ip-timeout>und<ip-attempts>. Dies ist der Zeitraum und die Versuche, bevor festgestellt wird, dass ein Computer, der Cluster-Mitglieder hostet, nicht erreichbar ist. IP-Timeout sollte im Bereich von 10x der RTT oder höher liegen, mit einem Minimum von 5s.<cluster-config><tcp-ring-listener><enabled>. Sie können sogar die TCP-Ring-Todeserkennung deaktivieren, um den Netzwerkverkehr zu lindern, aber auch die Erkennung von ausgefallenen Mitgliedern dauert länger. Um die Erkennung von Todesfällen zu deaktivieren, setzen Sie sie auf "false". Wenn diese Option deaktiviert ist, verwendet ein Cluster Member das Timeoutintervall für das erneute Senden des Paketherausgebers, um festzustellen, dass ein anderes Member nicht mehr auf UDP-Pakete reagiert (standardmäßig 5 Minuten).
Um die Standardkonfigurationseinstellungen zu ändern, verwenden Sie eine Coherence-Override-Datei. Erstellen Sie eine Datei mit dem Namen custom-coherence-override-<name>.xml, und stellen Sie sicher, dass sie konsistent und für alle Server im Cluster zugänglich ist. Geben Sie diese Datei in der java-Eigenschaft tangosol.coherence.override an. Sie können sie in der Eigenschaft EXTRA_JAVA_PROPERTIES java in der Datei setUserOverrides.sh festlegen. Beispiel:
EXTRA_JAVA_PROPERTIES="${EXTRA_JAVA_PROPERTIES} -Dtangosol.coherence.override=/u01/oracle/config/coherence_custom/custom-coherence-override.xml"Beispiel für eine Coherence-Override-Datei zur Optimierung von Parametern:
<?xml version='1.0'?>
<!--
This is a custom operational configuration override
-->
<coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config"
xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-operational-config coherence-operational-config.xsd"
>
<cluster-config>
<multicast-listener>
<join-timeout-milliseconds>5000</join-timeout-milliseconds>
</multicast-listener>
<tcp-ring-listener>
<ip-timeout>20s</ip-timeout>
<ip-attempts>3</ip-attempts>
</tcp-ring-listener>
<packet-publisher>
<packet-delivery>
<resend-milliseconds>200</resend-milliseconds>
<timeout-milliseconds>650000</timeout-milliseconds>
</packet-delivery>
</packet-publisher>
</cluster-config>
</coherence>
Beispiel für eine Coherence-Override-Datei zur Optimierung des tcp-Ring-Intervalls:
<?xml version='1.0'?>
<coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config"
xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-operational-config coherence-operational-config.xsd">
<cluster-config>
<packet-publisher>
<packet-delivery>
<heartbeat-milliseconds>5000</heartbeat-milliseconds>
</packet-delivery>
</packet-publisher>
</cluster-config>
</coherence>Beispiel für eine Kohärenzüberschreibungsdatei zur Deaktivierung der TCP-Ring-Todeserkennung:
<?xml version='1.0'?>
<coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config"
xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-operational-config coherence-operational-config.xsd">
<cluster-config>
<tcp-ring-listener>
<enabled>false</enabled>
</tcp-ring-listener>
</cluster-config>
</coherence>
Net Service Performance konfigurieren
Einige Standardkonfigurationen des Betriebssystems sind möglicherweise nicht optimiert, und es wird sehr wichtig, einige Parameter anzupassen, um die Datenübertragung effizienter zu gestalten. Diese Anpassungen werden besonders wichtig, wenn eine hohe Latenz zwischen JDBC-Clients und -Servern besteht. Die Server mit der höchsten Latenz beim Datenbankzugriff sollten die Konfiguration von Netzwerkpuffern und Oracle Net Services-Einstellungen steuern, um die Performance zu optimieren.
Eine der Hauptmetriken bei der Bestimmung der optimalen Konfiguration ist das Bandwidth-Delay-Produkt (BDP). Es stellt die maximale Datenmenge dar, die zu einem bestimmten Zeitpunkt in einem Netzwerk übertragen werden kann. Er wird berechnet, indem die Kapazität (Bandbreite) eines Netzwerklinks mit der Roundtrip-Verzögerungszeit (Latenz) multipliziert wird:
BDP = Bandwidth × Round-Trip Time (RTT)- RTT: In OCI können Sie das durchschnittliche RTT zwischen Regionen von der Seite Regionsübergreifende Latenz in der OCI-Konsole abrufen. Alternativ können Sie die Roundtrip-Zeit (RTT) mit Befehlen wie Ping von einem Host auf einen anderen über einige Minuten bestimmen und die zurückgegebenen Antwortzeiten verwenden.
- Bandbreite: Es gibt keine garantierte Bandbreite zwischen OCI-Regionen, und OCI bietet kein spezifisches OCI-Bandbreitenmessungstool. Für präzise Bandbreitenmessungen können Sie Tools wie iPerf verwenden, um Tests durchzuführen. Die getestete Bandbreite zwischen Frankfurt und Amsterdam beträgt etwa 2–2,5 Gbit/s.
Die TCP-Socket-Puffereinstellungen steuern, wie viele Pakete gleichzeitig über das Netzwerk gesendet werden. Um einen optimalen Durchsatz zu erzielen, wird empfohlen, die Socket-Puffergröße auf mindestens den BDP zu setzen. In vielen Fällen kann die Einstellung der Puffergröße auf das Doppelte des BDP die Performance weiter verbessern, insbesondere in Netzwerken mit hoher Latenz. Übermäßig große Puffer können jedoch zu einer erhöhten Speicherauslastung führen. Daher ist es ratsam, die Puffergröße im Bereich des BDP auf das Dreifache des BDP einzustellen:
BDP ≤ Socket Buffer Size ≤ 3 × BDPI/O-Puffergrößen in der Datenbank konfigurieren
SEND_BUF_SIZE auf Serverseite in der Regel aus.
Wenn der Datenbankserver große Anforderungen empfängt, legen Sie auch den Parameter RECV_BUF_SIZE fest. Es wird empfohlen, sie auf Oracle Net Services-Ebene in der Datenbank und nicht auf Betriebssystemebene zu optimieren, sodass normale TCP-Sessions wie SSH usw. keinen zusätzlichen Speicher verwenden.
Um diese Parameter für den Datenbankserver zu konfigurieren, legen Sie die Größe des Pufferspeichers in den Dateien listener.ora oder sqlnet.ora fest.
-
Geben Sie in der Datei
listener.oradie Buffer Space-Parameter für eine bestimmte Protokolladresse oder für eine Beschreibung an. Im Folgenden finden Sie ein Beispiel für die Einstellungen für eine typische Oracle RAC-Listener-Konfiguration in einem Base Database-System in Oracle Cloud Infrastructure (OCI):LISTENER_SCAN2=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN2)))) LISTENER_SCAN1=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN1)))) LISTENER_SCAN3=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN3)))) (…) LISTENER=(DESCRIPTION=(SDU=65535)(SEND_BUF_SIZE=10485760)(RECV_BUF_SIZE=10485760)(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER)))) -
Wenn die Parameter in
sqlnet.orafestgelegt sind, werden sie global auf alle Listener angewendet. Im Folgenden finden Sie ein Beispiel für die Einstellungen in der Dateisqlnet.ora:RECV_BUF_SIZE=10485760 SEND_BUF_SIZE=10485760
I/O-Puffergrößen in Middle Tier-Knoten konfigurieren
Das Linux-Betriebssystem verwendet die automatische Optimierung sowohl für den Empfang als auch für den Absenderpuffer.
Für den Empfangspuffer wird die automatische Optimierung durch den Parameter /proc/sys/net/ipv4/tcp_moderate_rcvbuf bestimmt. Wenn der Parameter den Wert 1 hat, ist die automatische Optimierung aktiviert. Bei der automatischen Optimierung wird die Empfängerpuffergröße (und die TCP-Fenstergröße) für jede Verbindung dynamisch aktualisiert, wobei die maximale Puffergröße 4 MB beträgt.
Für den Absenderpuffer ist die automatische Optimierung ebenfalls standardmäßig aktiviert. Die automatische Optimierung des Empfangspuffers kann zwar über den Parameter tcp_moderate_rcvbuf gesteuert werden, die automatische Optimierung des Sendepuffers hat jedoch keinen direkten Umschalter. Wenn Sie nur feste Puffergrößen festlegen, wird die automatische Optimierung des Sendepuffers deaktiviert.
Diese automatischen Optimierungsprozesse werden von mehreren Kernel-Parametern gesteuert, die Speicherzuweisung für das Senden und Empfangen von Daten verwalten:
- Pro Verbindungspuffergröße
Die Speicherzuweisung für jede TCP-Verbindung wird durch zwei Parameter definiert:
/proc/sys/net/ipv4/tcp_rmem, das den für TCP-Empfangspuffer reservierten Speicher angibt./proc/sys/net/ipv4/tcp_wmem, das den für TCP-Sendepuffer reservierten Speicher angibt.
Beide Parameter akzeptieren drei Werte:
- Minimale Puffergröße: die kleinste Puffergröße, die einem TCP-Socket zugewiesen ist.
- Standardpuffergröße: Die anfängliche Puffergröße, die einem TCP-Socket beim Erstellen zugewiesen wird.
- Maximale Puffergröße: die größte Puffergröße, die automatisch einem TCP-Socket zugewiesen werden kann.
Diese Einstellungen legen die Grenzen für Auto-Tuning-Mechanismen fest und helfen, die Speicherauslastung, insbesondere in Zeiten von Speicherstress, auszugleichen.
- Puffergrößen pro Anwendung
Anwendungen können bestimmte Puffergrößen anfordern. Diese Anforderungen unterliegen jedoch den durch die folgenden Parameter definierten Grenzwerten:
/proc/sys/net/core/rmem_maxist das maximale Empfangsfenster, in dem der obere Grenzwert für die Empfangspuffergröße festgelegt wird, die Anwendungen anfordern können./proc/sys/net/core/wmem_maxist das maximale Sendefenster, in dem der obere Grenzwert für die Sendepuffergröße festgelegt wird, die Anwendungen anfordern können.
So passen Sie I/O-Puffergrößen an:
Die automatische TCP-Optimierung bleibt mit Begrenzungen aktiviert, die für das Bandbreitenverzögerungsprodukt Ihres Netzwerks skaliert sind. Dadurch wird der Durchsatz verbessert, ohne die Systemspeichernutzung zu stark zu dimensionieren.
Größe der Sessiondateneinheit konfigurieren
Oracle Net Services wartet, bis diese Einheiten gefüllt sind, bevor sie über das Netzwerk gesendet werden. Jeder dieser Puffer ist eine Session Data Unit (SDU). Durch die Anpassung der SDU-Größe an die Datenmenge, die Oracle Net Services bereitgestellt wird, können Performance, Netzwerkauslastung und Speicherverbrauch in einem gestreckten Oracle Fusion Middleware-Cluster mit höheren Latenzzeiten als 5 ms RTT verbessert werden.
Die SDU-Größe kann von 512 Byte auf 2 MB eingestellt werden. In Oracle Database 23ai beträgt die Standard-SDU-Größe 64 KB (65.536 Byte). Frühere Datenbankreleases setzen ihre Standard-SDU-Größe auf 8 KB.
Die tatsächlich verwendete SDU-Größe wird zur Verbindungszeit zwischen dem Client und dem Server ausgehandelt und ist der kleinere der beiden Werte. Um eine SDU-Größe zu konfigurieren, die sich von der Standardgröße unterscheidet, muss das SDU sowohl auf dem Client- als auch auf dem Servercomputer konfiguriert werden. Oracle empfiehlt, das SDU auf den maximal möglichen Wert (64k) zu setzen.
Clients und Server verhandeln das SDU zur Verbindungszeit. Durch die Konfiguration beider Seiten wird sichergestellt, dass das beabsichtigte SDU verwendet wird.