Was ist der Vorteil des Thread-Pools in MySQL / MariaDB?

8

MariaDB-Thread-Pool
MySQL-Thread-Pool
Ich habe das offizielle Dokument des MySQL / MariaDB-Thread-Pools gelesen, bin aber immer noch verwirrt. Soweit ich weiß, hat der Thread-Pool zwei Vorteile:
1. Zu viele Verbindungen begrenzen, zu viele Verbindungen können zu zu vielen Kontextwechseln führen, aber es scheint, dass die Option "--max-Verbindungen" auch Verbindungen einschränken kann ~
2. Verbundenen alten Thread wiederverwenden : Wenn eine neue Verbindung hergestellt wird, könnte nicht verwendeter alter Thread wiederverwendet werden, aber es scheint, dass die Option "--thread_cache_size" auch alten Thread wiederverwenden könnte

Was ist der Vorteil des Thread-Pools?

Blattschwert
quelle

Antworten:

7

Der Hauptvorteil des Thread-Pools besteht darin, dass die Anzahl der ausgeführten Vorgänge im thread_pool_sizeAllgemeinen auf den Wert begrenzt wird, der im Allgemeinen auf die Anzahl der CPUs auf dem Server oder die Anzahl der von MySQL verwendeten CPUs festgelegt wird. Es verhindert Kontextwechsel und Konfliktprobleme mit anderen internen Strukturen. Dies ist besonders hilfreich, wenn viel mehr Abfragen ausgeführt werden müssen als CPUs verfügbar sind.

Das Begrenzen von Verbindungen mit max-connectionswürde die Anzahl der ausgeführten Abfragen begrenzen, indem die Anzahl der Verbindungen begrenzt wird. Alle Verbindungen, die dieses Limit überschreiten, werden jedoch mit einem Fehler abgelehnt. Bei Verwendung des Thread-Pools sind mehr Verbindungen zulässig, die Abfragen werden jedoch vom Thread-Pool in die Warteschlange gestellt. Eine andere zu berücksichtigende Sache ist, dass Verbindungen nicht immer Abfragen ausführen, so dass das Einschränken der Verbindungen das Ausführen von Abfragen nicht effektiv einschränkt.

Bis zum Punkt über den Thread-Cache hilft es, wenn Thread pro Verbindung verwendet wird, aber der Thread-Pool macht sein eigenes Ding mit der Wiederverwendung von Threads.

max-connections kann weiterhin verwendet werden, um die Verbindungen zu begrenzen, dient jedoch eher als Schutzmaßnahme mit einem Wert von etwa 10000 als als Begrenzung für den Arbeitsaufwand für den Server.

Wenn Sie beispielsweise 100 Clients haben, die Abfragen mit einem gewünschten Limit von 10 gleichzeitig ausgeführten Abfragen ausführen möchten, können durch Festlegen des Verbindungslimits auf 10 nur 10 Clients eine Verbindung zu den anderen Clients herstellen, die mit einem Fehler abgelehnt werden. Es würden höchstens 10 Abfragen gleichzeitig ausgeführt, aber es ist wahrscheinlich, dass im Durchschnitt weniger als 10 Abfragen gleichzeitig ausgeführt werden. Ohne Einschränkung der Verbindungen würden, wenn alle 100 Clients gleichzeitig eine Abfrage ausführen möchten, 100 Threads gleichzeitig ausgeführt, was zu Konfliktproblemen führen könnte, die zu einem geringeren Durchsatz führen als bei 10 Verbindungen.

Wenn Sie stattdessen eine Thread-Pool-Größe von 10 verwenden würden, könnten alle 100 Clients eine Verbindung herstellen und ihre Abfragen ausführen. Wenn alle Clients versuchen, eine Abfrage gleichzeitig auszuführen, stellt der Thread-Pool die Abfragen in die Warteschlange und führt im Allgemeinen 10 parallel aus, was einen höheren Durchsatz als die 100 gleichzeitigen Abfragen im vorherigen Beispiel haben kann.

G-Nugget
quelle