Frage

Zur Zeit sind wir mit vier CPU-Fenster-Box mit 8 GB RAM mit MySQL 5.x auf demselben Feld installiert. Wir verwenden Weblogic Application Server für unsere Anwendung. Wir zielen für 200 gleichzeitige Benutzer für unsere Anwendung (natürlich nicht für gleiche Modul / Bildschirm). Also, was ist die optimale Anzahl von Verbindungen sollten wir in Verbindung Pool konfigurieren (min und max-Nummer) (Wir verwenden weblogic AS‘Connection-Pooling-Mechanismus)?

War es hilfreich?

Lösung

Es gibt eine sehr einfache Antwort auf diese Frage:

Die Anzahl der Verbindungen im Verbindungspool sollte die Anzahl der exec-Threads konfigurieren in WebLogic gleich sein.

Der Grund ist ganz einfach: Wenn die Anzahl der Verbindungen geringer ist als die Anzahl der Threads, vielleicht für eine Verbindung damit ein Teil des Thread warten, um den Verbindungspool einen Engpass zu machen. So sollte es sein, zumindest gleich der Anzahl der EXEC-Fäden (Faden-Pool-Größe).

Andere Tipps

Meinst du wirklich 200 gleichzeitig Benutzer oder nur für eingeloggte Benutzer, 200? In den meisten Fällen wird ein Browser-Benutzer gehen zu können, tun mehr als 1 Seite Anfrage nicht pro Sekunde. So übersetzt 200 Anwender in 200 Transaktionen pro Sekunde. Das ist eine ziemlich hohe Zahl für die meisten Anwendungen.

Unabhängig davon, als ein Beispiel, lassen Sie sich mit 200 Transaktionen pro Sekunde gehen. Sagt jedes vorderes Ende (Browser) TX 0,5 Sekunden dauert und die 0,5 Sekunden, 0,25 werden in der Datenbank ausgegeben. Also, Sie würden 0,5 benötigen * 200 oder 100 Verbindungen in dem WebLogic Thead Pool und 0,25 * 200 = 50 Verbindungen im DB-Connection-Pool.

Um sicher zu sein, würde ich die max Thread-Pool Größen mindestens 25% größer eingestellt, als Sie für Spikes in Last zu ermöglichen, erwarten. Die Minima können ein kleiner Bruchteil der maximal sein, aber der Nachteil ist, dass es länger für einige Nutzer nehmen könnte, weil eine neue Verbindung geschaffen werden müßte. In diesem Fall 50 bis 100 Verbindungen sind nicht, dass viele für einen DB, so dass wahrscheinlich eine gute Startnummer

.

Beachten Sie, dass, um herauszufinden, was Ihre durchschnittlichen Transaktionsreaktionszeiten sind, zusammen mit Ihrer durchschnittlichen DB Abfragezeit, werden Sie haben einen Leistungstest zu tun, weil Sie Ihre Zeit bei Belastung ist wahrscheinlich nicht die Zeiten sein werden Sie sehen, mit einem einzigen Benutzer.

Sizing Verbindungspool ist keine triviale Sache zu tun. Sie müssen grundsätzlich:

  • Metriken, um die Verbindung Verwendung
  • zu untersuchen
  • Failover-Mechanismen für die, wenn es keine Verbindung verfügbar

FlexyPool soll Ihnen unsere die richtige Verbindung Poolgröße figuring unterstützen.

Sie können die folgenden Artikel überprüfen:

Sie sollten die verschiedenen erwarteten Workflows Profil, um herauszufinden. Im Idealfall wird die Verbindung Pool auch dynamisch die Anzahl der Live-Verbindungen einstellen, nach dem aktuellen Verbrauch, da es ziemlich üblich ist für Last eine Funktion der aktuellen Uhrzeit in Ihrem Ziel geografisches Gebiet zu sein.

Beginnen Sie mit einer kleinen Zahl und versucht, eine angemessene Anzahl von gleichzeitigen Benutzern zu erreichen, ist es dann aufdrehen. Ich denke, es ist wahrscheinlich, dass Sie werden feststellen, dass Ihr Connection-Pooling-Mechanismus in Ihrer Skalierbarkeit als der Rest der Software nicht annähernd so instrumental ist.

Der Verbindungspool sollte in der Lage sein, zu wachsen und Shink auf tatsächlichen Bedarf basieren. Melden Sie sich die Zahlen tun musste Analyse auf dem laufenden System, entweder durch Logging-Anweisungen oder durch JMX-Überwachung. Betrachten wir die Einrichtung Warnungen für Szenarien wie „Peak erkannt: mehr als X neue Einträge in Y Sekunden zugewiesen werden musste“, „Verbindung war aus Pool für mehr als X Sekunden“, die Sie die Aufmerksamkeit auf Performance-Probleme geben können, bevor sie bekommen echte Probleme.

Dies ist etwas, das auf individueller Basis geprüft und bestimmt werden muss - es ist ziemlich unmöglich, eine genaue Antwort für Ihre persönlichen Umstände ohne innig mit ihnen vertraut zu geben

.

Es ist schwierig, diesen harten Daten für bekommen. Es ist auch abhängig von einer Reihe von Faktoren, die Sie erwähnen nicht, -

  • 200 gleichzeitiger Benutzer, aber wie viel von ihrer Aktivität Datenbankabfragen generieren? 10 Abfragen pro Seite zu laden? 1 Abfrage nur bei der Anmeldung? usw. usw.

  • Größe der Abfragen und die db offensichtlich. Einige Abfragen laufen in Millisekunden, einige in wenigen Minuten.

Sie können mysql überwachen die aktuellen aktiven Abfragen mit „SHOW PROCESS“ zu sehen. Dies könnte Ihnen ein besseres Gefühl dafür, wie viel Aktivität vor sich geht tatsächlich in der db unter Spitzenlast.

Aufgrund meiner Erfahrung auf hohe Transaktionsfinanzsysteme, wenn Sie zum Beispiel 1K-Anfragen pro Sekunde zu handhaben wollen, und Sie haben CPUs 32, Sie müssen 1000/32 offene Verbindung Umfragen zu Ihrer Datenbank haben.

Hier ist meine Formel:

  

RPS / CPU_COUNT

Wenn die meisten Fälle, die Datenbank-Engine der Lage, Ihre Anfragen auch in vielen niedrigeren Zahlen zu handhaben, aber Ihre Verbindungen im Wartemodus sein werden, wenn die Zahl gering ist.

Ich denke, es ist ziemlich wichtig zu erwähnen, dass die Datenbank sollte diese Transaktionen zu handhaben kann (basierend auf Ihrer Festplatte Geschwindigkeit, Datenbankkonfiguration und Serverleistung).

Viel Glück.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top