Welche Standardgröße des Verbindungspools stellt Spring Boot HikariCP bereit, wenn der Container geladen wird?
Natürlich verwende ich die folgenden Eigenschaften, um die maximale CP-Größe einzurichten, aber ich habe mich gefragt, was die Standard-CP-Größe ist, wenn wir in der Datei „application.properties“ keine Zahl angeben.
spring.datasource.hikari.minimumIdle=5
spring.datasource.hikari.maximumPoolSize=20
spring.datasource.hikari.idleTimeout=30000
spring.datasource.hikari.poolName=SpringBootJPAHikariCP
spring.datasource.hikari.maxLifetime=2000000
spring.datasource.hikari.connectionTimeout=30000
Und wenn ich eine maximale Poolgröße eingebe application.properties
als 100 und ich verwende nur 20, wirkt sich das auf meine Anwendungsleistung aus?
maximalePoolSize
Standard: 10
Die HicariCP-Dokumentation enthält Standardeigenschaften:
https://github.com/brettwooldridge/HikariCP
Lesen Sie hier mehr über die Poolgröße:
Maximale Größe des Verbindungspools
Bezüglich der maximalen Poolgröße zum Beispiel PostgreSQL empfiehlt folgende Formel:
pool_size = ((core_count * 2) + effective_spindle_count)
core_count
ist die Anzahl der CPU-Kerne
effective_spindle_count
ist die Anzahl der Festplatten in einem RAID
Aber laut diesen Dokumenten:
Wir glauben jedoch, dass es weitgehend datenbankübergreifend anwendbar sein wird.
Das bedeutet, dass diese Formel im Allgemeinen auf andere Datenbanken anwendbar ist.
Auch zum Beispiel über Oracle Sie können diesen Artikel lesen und das Video ansehen
Die Formel, die sich seit Jahren bei vielen Benchmarks bewährt hat, lautet, dass für einen optimalen Durchsatz die Anzahl der aktiven Verbindungen irgendwo in der Nähe liegen sollte
Verbindungen = ((Kernanzahl * 2) + effektive_Spindelanzahl).
Die Anzahl der Kerne sollte keine HT-Threads enthalten, auch wenn Hyperthreading aktiviert ist. Die effektive Spindelanzahl ist null, wenn der aktive Datensatz vollständig zwischengespeichert ist, und nähert sich der tatsächlichen Anzahl von Spindeln, wenn die Cache-Trefferrate fällt. … Bisher gibt es noch keine Analyse, wie gut die Formel mit SSDs funktioniert.
Die Berechnung der Poolgröße zur Vermeidung von Deadlocks ist eine ziemlich einfache Formel für die Ressourcenzuweisung:
pool size = Tn x (Cm - 1) + 1
Wo,
- Tn ist die maximale Anzahl von Threads
- Cm ist die maximale Anzahl gleichzeitiger Verbindungen, die von einem einzelnen Thread gehalten werden.
Stellen Sie sich beispielsweise drei Threads (Tn=3) vor, von denen jeder vier Verbindungen benötigt, um eine Aufgabe auszuführen (Cm=4). Die Poolgröße, die erforderlich ist, um sicherzustellen, dass ein Deadlock niemals möglich ist, ist:
pool size = 3 x (4 - 1) + 1 = 10
Ein weiteres Beispiel: Sie haben maximal acht Threads (Tn=8), von denen jeder drei Verbindungen benötigt, um eine Aufgabe auszuführen (Cm=3). Die Poolgröße, die erforderlich ist, um sicherzustellen, dass ein Deadlock niemals möglich ist, ist:
pool size = 8 x (3 - 1) + 1 = 17
Dies ist nicht unbedingt die optimale Poolgröße, aber das Minimum, das erforderlich ist, um Deadlocks zu vermeiden.
In einigen Umgebungen kann die Verwendung eines JTA (Java Transaction Manager) die Anzahl der erforderlichen Verbindungen drastisch reduzieren, indem dieselbe Verbindung von getConnection() an einen Thread zurückgegeben wird, der bereits eine Verbindung in der aktuellen Transaktion enthält.
Wir sind immer wieder erstaunt über die internen Webanwendungen, denen wir begegnet sind, mit einigen Dutzend Front-End-Benutzern, die regelmäßige Aktivitäten ausführen, und einem Verbindungspool von 100 Verbindungen. Stellen Sie Ihre Datenbank nicht übermäßig bereit.
Sehen baeldung.com/spring-boot-hikari für einige Details
– Wim Deblauwe
6. März 2019 um 15:30 Uhr
Es wäre auch toll zu wissen, warum der Aktor nicht die Standardwerte unter Aktor/Umgebung anzeigt. Hier gefragt stackoverflow.com/questions/63358741/…
– ka3ak
11. August 2020 um 13:10 Uhr