← Alle Beiträge

Thread pool-Tests zeigen, dass Änderungen der buffer size die Ergebnisse verändern

Thread pool-Tests zeigen, dass Änderungen der buffer size die Ergebnisse verändern

Database thread pool-Tests, über die Percona am 12. Oktober 2026 berichtete, zeigen, dass der Wert von connection pooling stark von Speichergröße, Verbindungszahl und der konkreten Serverimplementierung abhängt. Ein thread pool ist eine Methode, mit der ein Datenbankserver einen kontrollierten Satz von worker threads, also Ausführungseinheiten innerhalb des Servers, wiederverwendet, statt bei vielen gleichzeitig verbundenen Clients Arbeit zu frei zu erstellen oder zu planen. Ziel ist es, throughput hoch und latency vorhersehbar zu halten, wenn eine Datenbank unter Druck steht.

Die Benchmarks verglichen Percona's database server-Variante 9.7.1-1 mit dem Standard-Datenbankserver 26.7.0 und prüften außerdem den Standard-Datenbankserver 26.7.0 gegen den Standard-Datenbankserver 9.7.2. Percona erklärt, dass die Ergebnisse des Standard-Datenbankservers 26.7.0 und 9.7.2 sehr nahe beieinanderlagen. Konfigurationen ohne thread pool näherten sich ähnlichen Werten an, und Konfigurationen mit thread pool taten dasselbe über die getesteten buffer tiers von 2G, 12G und 32G hinweg. Zu den getesteten thread pool-Einstellungen gehörten thread_pool_size-Werte von 10, 20, 40, 80, 120 und 160 sowie thread_pool_oversubscribe-Werte von 2, 3 und 4. Percona merkt nur an, dass der Standard-Datenbankserver 26.7.0 bei hohen client thread counts sehr geringfügig schneller war als 9.7.2, weshalb sich die späteren Vergleiche auf den Standard-Datenbankserver 26.7.0 konzentrieren.

Der wichtigste praktische Punkt ist, dass der InnoDB buffer pool, der Speicherbereich, in dem der Datenbankserver häufig genutzte Tabellen- und Indexdaten bereithält, die Ergebnisse veränderte. Mit innodb_buffer_pool_size auf 2G sah der Standard-Datenbankserver 26.7.0 nicht denselben großen thread pool-Gewinn, der für Percona's database server gemeldet wurde, aber die pooled configuration half dennoch bei hohen Verbindungszahlen. Bei 2560 Client-Verbindungen erreichte der Standard-Datenbankserver mit thread pool 371 TPS, oder transactions per second, gegenüber 122 TPS ohne thread pool. Das entspricht etwa dem Dreifachen des non-pooled throughput. Percona berichtet, dass thread_pool_size=10 in diesem tier die beste Wahl war, während größere Einstellungen von 20, 40, 80, 120 und 160 TPS weniger stark verbesserten. Für den Standard-Datenbankserver bei 2G hatte eine Änderung von thread_pool_oversubscribe nur geringe Wirkung, obwohl ein Wert von 2 etwas besser war als 3 oder 4.

Bei 12G stieg der gesamte throughput des Standard-Datenbankservers, aber der relative Vorteil von thread pooling bei der höchsten Verbindungszahl war kleiner als bei 2G. Mit 2560 Verbindungen und innodb_buffer_pool_size=12G erreichte der Standard-Datenbankserver 1273 TPS mit thread pool und 718 TPS ohne ihn, was Percona als Verbesserung um 77 Prozent beschreibt. Bei 32G, wo der data set vollständig buffered war, schlug die pooled configuration des Standard-Datenbankservers ebenfalls das non-pooled setup: 18.975 TPS gegenüber 17.011 TPS, ein Gewinn von 11,6 Prozent für thread pool. Das latency-Ergebnis folgte derselben Richtung. Percona berichtet, dass p95 latency, also die Antwortzeit, unterhalb derer 95 Prozent der Anfragen abgeschlossen werden, von 759 ms auf 153 ms fiel, wenn der thread pool des Standard-Datenbankservers in diesem vollständig buffered Szenario aktiviert war.

Der direkte Vergleich zwischen Percona's database server-Variante 9.7.1-1 und dem Standard-Datenbankserver 26.7.0 zeigt, warum Administratoren nicht annehmen sollten, dass identische Einstellungsnamen identisches Verhalten bedeuten. Mit innodb_buffer_pool_size=2G verwendete Percona für jeden Server die thread pool-Einstellungen mit der besten Leistung: thread_pool_size=10 für beide, thread_pool_oversubscribe=4 für Percona's database server und thread_pool_oversubscribe=2 für den Standard-Datenbankserver. Der Standard-Datenbankserver startete bei 40 Verbindungen schneller, aber Percona betrachtet niedrige Verbindungszahlen nicht als guten Test für thread pool-Effizienz. Bei 2560 Verbindungen lieferte Percona's database server 2304 TPS gegenüber 371 TPS des Standard-Datenbankservers, ein 6,2-facher Unterschied zugunsten von Percona's database server.

Mit einem 12G buffer pool war die Form ähnlich. Der Standard-Datenbankserver war bei den niedrigeren Verbindungspunkten 40 und 80 schneller, aber bei 2560 Verbindungen übertraf der thread pool von Percona's database server den Standard-Datenbankserver. Das 32G-tier kehrte das Ergebnis um. Im vollständig buffered Fall änderte sich die beste Percona database server-Konfiguration zu thread_pool_size=160 und thread_pool_oversubscribe=2, während die beste des Standard-Datenbankservers bei thread_pool_size=10 und thread_pool_oversubscribe=2 blieb. Percona interpretiert dies als Hinweis darauf, dass in seinem Server eine Erhöhung von innodb_buffer_pool_size erfordern kann, thread_pool_size zu erhöhen, damit der thread pool optimal arbeitet.

Bei 32G hatte der Standard-Datenbankserver das stärkere thread pool-Ergebnis: 19.054 TPS gegenüber 15.519 TPS für Percona's database server, ein Unterschied von 22 Prozent. Auch latency begünstigte den Standard-Datenbankserver in diesem tier. Bei deaktiviertem thread pooling berichtet Percona, dass beide Server eine ähnliche p95 latency hatten, wobei der Standard-Datenbankserver etwas kürzer war. Mit aktiviertem thread pool war die p95 latency des Standard-Datenbankservers etwa 25 Prozent besser, mit 177 ms gegenüber 235 ms für Percona's database server. In den 2G- und 12G-tiers zeigte Percona's database server jedoch eine etwas niedrigere p95 latency als der Standard-Datenbankserver.

Für IT-Teams lautet die Lehre nicht, dass eine thread pool-Einstellung universell richtig ist. Sie lautet, dass connection management, memory sizing und workload shape gemeinsam getestet werden müssen. Perconas Ergebnisse zeigen, dass die eigene thread pool-Implementierung empfindlicher auf thread_pool_size und thread_pool_oversubscribe reagiert und dass diese Einstellungen den größten Effekt auf die Leistung hatten. Der Standard-Datenbankserver zeigte weniger dramatische Unterschiede, wenn diese Parameter geändert wurden, und sein klarster thread pooling-Nutzen erschien erst bei hohen Verbindungszahlen wie 1280 und 2560. Percona's database server zeigte Vorteile deutlich früher, bei 80 oder mehr Verbindungen.

Dies ist für Geschäftssysteme wichtig, weil überlastete Datenbanken oft schrittweise versagen, bevor sie sichtbar ausfallen: Antwortzeiten steigen, queues bauen sich auf, und Anwendungsnutzer sehen langsame Seiten, bevor jemand einen eindeutigen Ausfall sieht. Ein managed setup kann helfen, indem es Messung zur Routine statt zur gelegentlichen Maßnahme macht. Für Leser, die ihren eigenen Datenbankbetrieb überprüfen, bietet AEU Data europäische cloud- und Dateninfrastruktur, eine relevante Grundlage, wenn Teams Datendienste mit disziplinierter betrieblicher Kontrolle betreiben müssen.

Die sichere Schlussfolgerung ist, vor Änderungen an Produktionseinstellungen Benchmarks durchzuführen. Testen Sie mit Verbindungszahlen, die der realen Anwendung ähneln, vergleichen Sie throughput und p95 latency und wiederholen Sie den Test bei realistischen Speichergrößen. Thread pools können eine Datenbank vor übermäßiger concurrency schützen, aber diese Benchmarks zeigen, dass ihr Wert vom Server, dem buffer pool und der workload abhängt, nicht allein vom Namen des Features.

Auch verfügbar in: EnglishItalianoShqip