Heim  >  Artikel  >  Datenbank  >  Beispielcode zur MySQL-Optimierungsverbindungsoptimierung

Beispielcode zur MySQL-Optimierungsverbindungsoptimierung

黄舟
黄舟Original
2017-03-16 14:24:151392Durchsuche

MySQL Verbindungsoptimierung bezieht sich hauptsächlich auf die Parameter, die am Prozess beteiligt sind, bei dem der Client eine Verbindung zur Datenbank herstellt und die Datenbank die Datentabelle und den Index öffnet Antwort auf die Anfrage des Kunden Anpassung. Lassen Sie uns die oben erwähnte

MySQL-Optimierung Cache im Detail besprechen. In diesem Artikel wird ein sehr wichtiges Konzept erwähnt, nämlich die Verwendung von Show-Variablen zur Darstellung der Systemkompilierung oder -konfiguration Wert in my.cnf. Der Status anzeigen wird als Status-Wert bezeichnet, der die Statusinformationen der aktuell ausgeführten Dienstinstanz anzeigt, bei der es sich um einen sich dynamisch ändernden Wert handelt. Daher wird es häufig verwendet, um zu beobachten, ob das aktuelle MySQL normal läuft. Wenn dies nicht normal ist, müssen Sie die statischen -Parameter anpassen, um die Leistung von MySQL zu verbessern. Daher ist das Verständnis des Unterschieds zwischen diesen beiden Konzepten die Grundlage für die anschließende Optimierung.

MySQL-Verbindungsoptimierung

Ich erinnere mich, als ich einmal versuchte, innerhalb des Unternehmens eine Verbindung zu MySQL herzustellen, konnte ich nicht immer eine Verbindung herstellen. Nachdem wir den DBA gefunden hatten, untersuchten wir die Ursache und stellten fest, dass die aktuelle Anzahl der MySQL-Verbindungen voll war. Nach Anpassungen wurde das Problem behoben. Es gibt im Allgemeinen zwei Gründe für Fehler, die zu viele Verbindungen verursachen. Der erste ist, dass tatsächlich viele Leute eine Verbindung zu MySQL herstellen, was dazu führt, dass die Anzahl der Verbindungen erschöpft ist. Der zweite Grund ist, dass der max_connections-Wert zu klein ist.

1. Verbindungsparameter (Variablen anzeigen)


mysql> show variables like '%connect%';
+-----------------------------------------------+-----------------+
| Variable_name                 | Value      |
+-----------------------------------------------+-----------------+
| character_set_connection           | utf8      |
| collation_connection             | utf8_general_ci |
| connect_timeout                | 10       |
| disconnect_on_expired_password        | ON       |
| init_connect                 |         |
| max_connect_errors              | 100       |
| max_connections                | 151       |
| max_user_connections             | 0        |
| performance_schema_session_connect_attrs_size | 512       |
+-----------------------------------------------+-----------------+

bezieht sich auf die Parameter, die die MySQL-Dienstinstanz verwendet kann gleichzeitig akzeptieren Die maximale Anzahl gleichzeitiger Verbindungen. MySQL unterstützt tatsächlich den Algorithmus zum Hinzufügen einer zur maximalen Anzahl von Verbindungen und stellt so sicher, dass der Superadministrator auch dann noch eine Verbindung mit dem Server zur Verwaltung herstellen kann, wenn die Anzahl der Verbindungen aufgebraucht ist. max_connections

Legen Sie die maximale Anzahl gleichzeitiger Verbindungen für das angegebene Konto fest. max_user_connections

Wenn ein illegaler Host in böswilliger Absicht eine Verbindung zum MySQL-Server herstellt und die aufgetretenen Fehler den festgelegten Wert erreichen, löst MySQL alle Verbindungen vom Host auf. Es wird jedoch nach der Ausführung von max_connect_errors Flush Hosts gelöscht.

2. Verbindungsstatus (Status anzeigen)

Zu beachten ist, dass der Variablenwert (Variablen anzeigen) mit einem Kleinbuchstaben beginnt, während der Statuswert ( Status anzeigen) beginnt mit einem Großbuchstaben. Diese Unterscheidung ist hilfreich für den Speicher und die Klassifizierung


mysql> show status like '%connections%';
+-----------------------------------+-------+
| Variable_name           | Value |
+-----------------------------------+-------+
| Connection_errors_max_connections | 0   |
| Connections            | 197  |
| Max_used_connections       | 2   |
+-----------------------------------+-------+

Wenn die maximale Anzahl der Parallelitäten von MySQL größer ist als max_connections in der Systemvariablen Connection_errors_max_connections (Variablen anzeigen) In dieser Variable wird die maximale Anzahl der Parallelitäten und damit die Anzahl der Ablehnungen erfasst. Wenn der Wert von Connection_error_max_connections relativ groß ist, bedeutet dies, dass die aktuelle Systemparallelität relativ hoch ist und Sie eine Erhöhung des Werts von max_connections in Betracht ziehen sollten.

gibt die Anzahl der erfolgreich aufgebauten Verbindungen seit dem Start von MySQL an. Dieser Wert wird kontinuierlich akkumuliert. Connections

Max_used_connections gibt die maximale Anzahl gleichzeitiger Verbindungen gleichzeitig seit dem Start von MySQL an. Wenn dieser Wert größer als max_connections ist, weist dies darauf hin, dass sich das System häufig in einem Zustand mit hoher Parallelität befindet und Sie eine Erhöhung der maximalen Anzahl gleichzeitiger Verbindungen in Betracht ziehen sollten.

3. Verbindungsthread-Parameter (Thread-Variablen und Status)


mysql> show variables like 'thread%';
+--------------------+---------------------------+
| Variable_name   | Value           |
+--------------------+---------------------------+
| thread_cache_size | 9             |
| thread_concurrency | 10            |
| thread_handling  | one-thread-per-connection |
| thread_stack    | 262144          |
+--------------------+---------------------------+

Legen Sie die Anzahl der Verbindungsthreads fest Caches. Dieser Cache entspricht dem MySQL-Thread-Cache-Pool (Thread-Cache-Pool), der inaktive Verbindungsthreads in den Verbindungspool legt und zwischenspeichert, anstatt sie sofort zu zerstören. Wenn bei einer neuen Verbindungsanforderung eine inaktive Verbindung im Verbindungspool vorhanden ist, wird diese direkt verwendet. Andernfalls muss der Thread neu erstellt werden. Das Erstellen von Threads ist ein erheblicher Systemaufwand. Dieser Teil der Thread-Verarbeitung von MySQL ähnelt der Thread-Verarbeitung von Nginx. Wenn ich in Zukunft die Thread-Verarbeitung von Nginx vorstelle, werde ich sie vergleichen. thread_cache_size

Der Standardwert ist: Ein Thread pro Verbindung bedeutet, dass für jede Verbindung ein Thread bereitgestellt oder erstellt wird, um die Anforderung zu verarbeiten, bis die Anforderung abgeschlossen ist, die Verbindung zerstört oder im Cache-Pool gespeichert wird . Wenn der Wert „no-threads“ lautet, bedeutet dies, dass immer nur ein Thread zur Verarbeitung der Verbindung bereitgestellt wird, der im Allgemeinen zum Testen auf einem einzelnen Computer verwendet wird. thread_handling

bedeutet Heap. Es ist bekannt, dass Prozesse und Threads eindeutige IDs haben Durch die spezifische Wartung des Thread-Bibliotheksbereichs müssen die Kontextinformationen des Prozesses einen Bereich im Speicher öffnen, damit das Programm schnell aktiviert werden kann. Die für jeden Thread von MySQL festgelegte Standardstapelgröße ist: 262144/1024=256kthread_stack stack

Thread-Statusinformationen anzeigen


mysql> show status like 'Thread%';
+-------------------+-------+
| Variable_name   | Value |
+-------------------+-------+
| Threads_cached  | 1   |
| Threads_connected | 1   |
| Threads_created  | 2   |
| Threads_running  | 1   |
+-------------------+-------+

Aktuelle Nummer Anzahl der Threads im Thread-PoolThread_cached

Aktuelle Anzahl der VerbindungenThread_connected

Thread_cached: 当前连接线程创建数, 如果这个值过高,可以调整threadcachesize 也就是调整线程缓存池的大小。

Thred_runnint: 当前活跃的线程数。

连接请求堆栈

MySQL在很短的时间内,突然收到很多的连接请求时,MySQL会将不能来得及处理的连接请求保存在堆栈中,以便MySQL后续处理。back_log参数设置了堆栈的大小,可以通过如下命令查看:


mysql> show variables like 'back_log';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| back_log   | 80  |
+---------------+-------+

连接异常


mysql> show status like 'Aborted%';
+------------------+-------+
| Variable_name  | Value |
+------------------+-------+
| Aborted_clients | 0   |
| Aborted_connects | 219  |
+------------------+-------+

Aborted_clients MySQL 客户机被异常关闭的次数。

Aborted_connects 试图连接到MySQL服务器而失败的连接次数。

other


mysql> show status like 'Slow%';
+---------------------+-------+
| Variable_name    | Value |
+---------------------+-------+
| Slow_launch_threads | 0   |
| Slow_queries    | 0   |
+---------------------+-------+


mysql> show variables like 'slow_launch_time';
+------------------+-------+
| Variable_name  | Value |
+------------------+-------+
| slow_launch_time | 2   |
+------------------+-------+

Slow_lunch_threads 创建线程的时间过长,超过slow_launch_time的设定值,则会记录。

可以通过使用 Connection_error%来查看连接的错误状态信息:


mysql> show status like 'Connection_error%';
+-----------------------------------+-------+
| Variable_name           | Value |
+-----------------------------------+-------+
| Connection_errors_accept     | 0   |
| Connection_errors_internal    | 0   |
| Connection_errors_max_connections | 0   |
| Connection_errors_peer_address  | 0   |
| Connection_errors_select     | 0   |
| Connection_errors_tcpwrap     | 0   |
+-----------------------------------+-------+

Connection_errors_peer_address 查找MySQL客户机IP地址是发生的错误数。

Das obige ist der detaillierte Inhalt vonBeispielcode zur MySQL-Optimierungsverbindungsoptimierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn