Anweisungen zur Verwendung des Datenbankverbindungspools Druid

Anweisungen zur Verwendung des Datenbankverbindungspools Druid

Ersetzen Sie ihn durch den optimalen Datenbankverbindungspool, basierend auf umfassender Leistung, Zuverlässigkeit, Stabilität, Skalierbarkeit, Benutzerfreundlichkeit und anderen Faktoren.

Druide:druid-1.0.29

Datenbank Mysql.5.6.17

Ersatzziel: Ersetze C3P0 durch Druide

Ersatzgrund:

1. In Bezug auf die Leistung: hikariCP>druid>tomcat-jdbc>dbcp>c3p0. Die hohe Leistung von hikariCP beruht auf der maximalen Vermeidung von Sperrkonflikten.

2. Druid verfügt über die umfassendsten Funktionen, einschließlich SQL-Interception und anderer Funktionen, und verfügt über relativ umfassende statistische Daten und eine gute Skalierbarkeit.

3. Im Hinblick auf umfassende Leistung und Skalierbarkeit können Sie die Verwendung des Druid- oder HikariCP-Verbindungspools in Betracht ziehen, der für die Überwachung und Verfolgung von JDBC-Schnittstellen bequemer ist.

4. Sie können den PrepareStatement-Cache aktivieren, wodurch die Leistung um etwa 20 % verbessert wird.

psCache ist für die Verbindung privat, daher gibt es kein Thread-Konfliktproblem. Das Aktivieren von pscache führt nicht zu Leistungsverlusten aufgrund von Konflikten.

Der Schlüssel von psCache ist das von Prepare ausgeführte SQL und der Katalog, und der Wert entspricht dem PrepareStatement-Objekt. Durch die Aktivierung des Caching wird vor allem der Mehraufwand beim Parsen von SQL reduziert.

5. 3p0 hat eine lange Geschichte und sein Code ist äußerst komplex, was der Wartung nicht förderlich ist. Und es besteht das potenzielle Risiko einer Sackgasse.

6. Druid kann SQL- und langsame Abfrageprotokolle drucken

Druidenparameter

Konfigurationsparameter Standardwert Wert der Spieleservereinstellungen Parameter Beschreibung
Anfangsgröße 0 4 Initialisieren Sie die Anzahl der Verbindungen
minIdle 0 4 Mindestanzahl inaktiver Verbindungen
maxActive 8 8 Maximale Anzahl gleichzeitiger Verbindungen
maxWartezeit -1 Liter 60000 Die maximale Wartezeit beim Herstellen einer Verbindung in Millisekunden. Nach der Konfiguration von maxWait,
Standardmäßig sind Fair Locks aktiviert, wodurch die Parallelitätseffizienz reduziert wird.
Bei Bedarf können Sie unfaire Sperren verwenden, indem Sie die Eigenschaft useUnfairLock auf „true“ konfigurieren.
ZeitZwischenRäumungRunsMillis 60000 60000 Konfigurieren Sie das Intervall in Millisekunden für die Überprüfung, ob inaktive Verbindungen geschlossen werden müssen.
Der Destroy-Thread erkennt das Verbindungsintervall
minAusscheidbareLeerlaufzeitMillis 1800000 1800000 Konfigurieren Sie die minimale Überlebenszeit einer Verbindung im Pool in Millisekunden
Validierungsabfrage Null Wählen Sie 1 SQL wird verwendet, um festzustellen, ob die Verbindung gültig ist. Es muss sich um eine Abfrageanweisung handeln
testOnBorrow FALSCH FALSCH Führen Sie beim Beantragen einer Verbindung eine Validierungsabfrage aus, um zu prüfen, ob die Verbindung gültig ist. Diese Konfiguration verringert die Leistung.
testOnReturn FALSCH FALSCH Führen Sie beim Zurückgeben einer Verbindung eine Validierungsabfrage aus, um zu prüfen, ob die Verbindung gültig ist. Diese Konfiguration verringert die Leistung
testWhileIdle WAHR WAHR Es wird empfohlen, es auf „True“ zu konfigurieren, da dies die Leistung nicht beeinträchtigt und die Sicherheit gewährleistet. Wenn beim Beantragen einer Verbindung die Leerlaufzeit größer als timeBetweenEvictionRunsMillis ist, führen Sie validationQuery aus, um zu prüfen, ob die Verbindung gültig ist.
poolPreparedStatements FALSCH WAHR false Gibt an, ob PreparedStatement, also PSCache, zwischengespeichert werden soll.
PSCache verbessert die Leistung von Datenbanken, die Cursor unterstützen, wie beispielsweise Oracle, erheblich.
In Versionen unter MySQL 5.5 gibt es keine PSCache-Funktion, daher wird empfohlen, sie zu deaktivieren.
Die Versionen 5.5 und höher verfügen über PSCache und es wird empfohlen, es zu aktivieren.
maxPoolPreparedStatementPerConnectionSize 10 100 Um PSCache zu aktivieren, müssen Sie ihn so konfigurieren, dass er größer als 0 ist. Wenn er größer als 0 ist,
poolPreparedStatements löst automatisch die Änderung auf true aus.
Eine einzelne Verbindung verfügt über einen eigenen Anweisungscache, was bedeutet, dass maxOpenPreparedStatements für eine einzelne Verbindung gilt.

Und so geht's:

Der Datenbankverbindungspool erstellt während der Initialisierung initialSize-Verbindungen und wenn ein Datenbankvorgang stattfindet, wird eine Verbindung aus dem Pool genommen. Wenn die Anzahl der aktuell im Pool verwendeten Verbindungen gleich maxActive ist, wird eine Weile gewartet, bis andere Vorgänge eine Verbindung freigeben. Wenn die Wartezeit maxWait überschreitet, wird ein Fehler gemeldet. Wenn die Anzahl der aktuell verwendeten Verbindungen maxActive nicht erreicht, wird festgestellt, ob eine inaktive Verbindung vorhanden ist. Wenn dies der Fall ist, wird die inaktive Verbindung direkt verwendet. Wenn nicht, wird eine neue Verbindung hergestellt. Nachdem die Verbindung verwendet wurde, wird sie nicht physisch geschlossen, sondern in den Pool gelegt und wartet auf die Wiederverwendung durch andere Vorgänge. Gleichzeitig gibt es im Verbindungspool einen Mechanismus, der ermittelt, ob die aktuelle Gesamtzahl der Verbindungen kleiner als miniIdle ist. Dann wird eine neue inaktive Verbindung hergestellt, um sicherzustellen, dass die Anzahl der Verbindungen miniIdle beträgt. Wenn eine Verbindung im aktuellen Verbindungspool nach einer Leerlaufzeit von timeBetweenEvictionRunsMillis immer noch nicht verwendet wird, wird sie physisch geschlossen. Einige Datenbankverbindungen haben Timeout-Begrenzungen (MySQL-Verbindungen werden nach 8 Stunden getrennt) oder die Verbindung zum Verbindungspool kann aufgrund von Netzwerkunterbrechungen und anderen Gründen ungültig werden. In diesem Fall kann durch Setzen eines testWhileIdle-Parameters auf true sichergestellt werden, dass der Verbindungspool regelmäßig die Verfügbarkeit von Verbindungen erkennt. Nicht verfügbare Verbindungen werden verworfen oder neu aufgebaut, und das aus dem Verbindungspool erhaltene Verbindungsobjekt ist im besten Fall garantiert verfügbar. Um absolute Verfügbarkeit sicherzustellen, können Sie natürlich auch testOnBorrow auf „true“ setzen (d. h. die Verfügbarkeit des Verbindungsobjekts beim Abrufen prüfen), dies wirkt sich jedoch auf die Leistung aus.

Wenn Sie eine SQL-Überwachung durchführen möchten, können Sie den folgenden Code hinzufügen:

Log4j2Filter log4j2 = neuer Log4j2Filter(); 
log4j2.setResultSetLogEnabled(false); 
log4j2.setStatementSqlPrettyFormat(false); 
log4j2.setStatementExecutableSqlLogEnable(true); 
 
log4j2.setDataSourceLogEnabled(false); 
log4j2.setConnectionLogEnabled(false); 
log4j2.setStatementLogEnabled(false); 
log4j2.setResultSetLogEnabled(false); 
ret.setProxyFilters(Arrays.asList(log4j2));

Die Leerlauferkennung, der Verbindungsaufbau und die Bereinigung abgebrochener Verbindungen werden von diesen drei Threads verwaltet.

Daemon-Thread [Thread zur Bereinigung abgebrochener Verbindungen] 
Daemon-Thread [Druid-ConnectionPool-Create-1184124073] 
Daemon-Thread [Druid-ConnectionPool-Destroy-1184124073]

Zusammenfassen

Dies ist der gesamte Inhalt dieses Artikels zur Verwendung des Datenbankverbindungspools Druid. Ich hoffe, er wird für alle hilfreich sein. Interessierte Freunde können sich auf Folgendes beziehen: Detaillierte Erläuterung der MySQL-Vorbereitungsprinzipien und anderer verwandter Themen. Wenn Sie Fragen haben, können Sie jederzeit eine Nachricht hinterlassen und der Herausgeber wird Ihnen rechtzeitig antworten.

Das könnte Sie auch interessieren:
  • Java-Entwicklung, Druid-Datenverbindungspool, Maven, einfaches Konfigurationsverfahren, Beispiel
  • Lösung für Online-Ausnahmen, die durch den Alibaba Druid-Datenverbindungspool verursacht werden
  • Einführung in den Java-Datenbankverbindungspool Druid
  • Detaillierte Konfiguration der Datenbank Alibaba Connection Pool Druid
  • Spring Boot integriert den Druid-Datenbankverbindungspool
  • Beispiel für die Implementierung des Druid-Datenverbindungspools in Java

<<:  Detaillierte Erläuterung häufig verwendeter Nginx-Umschreibregeln

>>:  Detaillierte Erklärung dieses Zeigeproblems in JavaScript

Artikel empfehlen

Unterschied zwischen den Methoden querySelector und getElementById in JS

Inhaltsverzeichnis 1. Übersicht 1.1 Verwendung vo...

Erläuterung der Schritte für Tomcat zur Unterstützung des https-Zugriffs

So ermöglichen Sie Tomcat die Unterstützung des h...

Wie wird eine SQL-Anweisung in MySQL ausgeführt?

Inhaltsverzeichnis 1. Analyse der MySQL-Architekt...

Zusammenfassung der praktischen Methoden von CSS3 (empfohlen)

1. Abgerundeter Rand: CSS- CodeInhalt in die Zwis...

Detaillierte Erklärung, wie Sie den Speicherverbrauch in MySql reduzieren können

Vorwort Standardmäßig initialisiert MySQL einen g...

Eine bunte Katze unter Linux

Freunde, die das Linux-System verwendet haben, mü...

Docker-Lernen: Die spezifische Verwendung von Container-Containern

Container sind ein weiteres Kernkonzept von Docke...

js implementiert ein einfaches Warenkorbmodul

In diesem Artikelbeispiel wird der spezifische Co...

JavaScript zur einfachen Verknüpfung von Provinzen und Gemeinden

In diesem Artikel wird der spezifische Code für J...

Detailliertes Tutorial zur Installation von SonarQube mit Docker

Inhaltsverzeichnis 1. Ziehen Sie das Bild 1.1 Zie...

Grafisches Tutorial zur Offline-Installation und Konfiguration von MySQL 8.0.2

Die Offline-Installationsmethode von MySQL_8.0.2 ...