Der Hauptvorteil des Thread-Pools besteht darin, dass die Anzahl der ausgeführten Vorgänge im thread_pool_size
Allgemeinen 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-connections
wü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.