Dieser Artikel führt Sie hauptsächlich in die Methode zum Überprüfen der Anzahl von MySQL-Server-Threads ein. Er analysiert die zugehörigen Befehle, Konfigurationen, Parameter und die damit verbundenen Verwendungsfähigkeiten zum Überprüfen der Anzahl von MySQL-Threads in Form von Beispielen beziehen Sie sich darauf. Ich hoffe, es kann Ihnen helfen.
MySQL-Neustartbefehl:
/etc/init.d/mysql restart
Die Anzahl der Threads des MySQL-Servers muss in einem angemessenen Bereich liegen, um den Zustand sicherzustellen und Laufruhe des MySQL-Servers. Threads_created gibt die Anzahl der erstellten Threads an. Durch Anzeigen von Threads_created können Sie den Prozessstatus des MySQL-Servers anzeigen.
mysql> show global status like 'Thread%'; +-------------------+-------+ | Variable_name | Value | +-------------------+-------+ | Threads_cached | 46 | | Threads_connected | 2 | | Threads_created | 570 | | Threads_running | 1 | +-------------------+-------+
Wenn wir thread_cache_size in der MySQL-Serverkonfigurationsdatei festlegen, wird der Thread des Servers, der diesen Client verarbeitet, zwischengespeichert, um zu antworten Zerstörung (vorausgesetzt, die Anzahl der Caches erreicht nicht die Obergrenze).
Threads_created gibt die Anzahl der erstellten Threads an. Wenn festgestellt wird, dass der Wert Threads_created zu groß ist, bedeutet dies, dass der MySQL-Server Threads erstellt hat, was ebenfalls relativ ressourcenintensiv ist. Sie können die Thread_cache_size entsprechend erhöhen Geben Sie den Wert in der Konfigurationsdatei ein und fragen Sie den Server ab
thread_cache_size-Konfiguration:
mysql> show variables like 'thread_cache_size'; +-------------------+-------+ | Variable_name | Value | +-------------------+-------+ | thread_cache_size | 64 | +-------------------+-------+
Der Server im Beispiel ist recht fehlerfrei.
Analysieren Sie mehrere MySQL-Parameter in Bezug auf die Anzahl der Verbindungen
MySQL-Variablen und -Status sind leistungsstarke Tools für Verwaltung und Wartung, genau wie Oracles SP-Datei und v$-Tabelle.
MySQL zeichnet viele Konfigurationsinformationen über Systemvariablen auf, beispielsweise die maximale Anzahl von Verbindungen max_connections:
mysql> show variables like '%connect%'; +--------------------------+-----------------+ | Variable_name | Value | +--------------------------+-----------------+ | character_set_connection | utf8 | | collation_connection | utf8_general_ci | | connect_timeout | 10 | | init_connect | SET NAMES utf8 | | max_connect_errors | 10 | | max_connections | 200 | | max_user_connections | 0 | +--------------------------+-----------------+ 7 rows in set (0.00 sec)
Dieser Parameter bezieht sich auf die Anzahl Anzahl der gleichzeitig verbundenen Clients beträgt der Standardwert in Version 5.1 151. Die tatsächliche Anzahl der unterstützten Verbindungen beträgt dann diesen Wert plus eins, also 152, da eine Verbindung für die Anmeldung durch den Systemadministrator reserviert werden muss, um sie anzuzeigen Information. Die Größe dieses Parameters sollte auf der Grundlage vieler Faktoren berücksichtigt werden, z. B. der Anzahl der von der verwendeten Plattform unterstützten Thread-Bibliotheken (Windows kann nur bis zu 2048 unterstützen), der Serverkonfiguration (insbesondere der Speichergröße) und den von jeder Verbindung belegten Ressourcen (Speicher und Last) Wie viel, die vom System benötigte Reaktionszeit usw. Im Allgemeinen können Linux-Systeme problemlos Hunderte von Parallelitäten unterstützen. Dieser Parameter kann im globalen oder Sitzungsbereich geändert werden:
mysql> set global max_connections=151; Query OK, 0 rows affected (0.00 sec) mysql> show variables like '%connect%'; +--------------------------+-----------------+ | Variable_name | Value | +--------------------------+-----------------+ | character_set_connection | utf8 | | collation_connection | utf8_general_ci | | connect_timeout | 10 | | init_connect | SET NAMES utf8 | | max_connect_errors | 10 | | max_connections | 151 | | max_user_connections | 0 | +--------------------------+-----------------+ 7 rows in set (0.00 sec)
Es ist jedoch zu beachten, dass die Erhöhung der Anzahl der Verbindungen viele Kettenreaktionen nach sich zieht , die in die Praxis umgesetzt werden muss Vermeiden Sie die negativen Folgen davon.
Schauen wir uns zunächst die Statusausgabe an:
mysql> status -------------- mysql Ver 14.14 Distrib 5.1.49, for pc-linux-gnu (i686) using readline 5.1 Connection id: 255260 Current database: mysql Current user: root@localhost SSL: Not in use Current pager: stdout Using outfile: '' Using delimiter: ; Server version: 5.1.49-log MySQL Community Server (GPL) Protocol version: 10 Connection: Localhost via UNIX socket Server characterset: utf8 Db characterset: utf8 Client characterset: utf8 Conn. characterset: utf8 UNIX socket: /var/lib/mysql/mysql.sock Uptime: 161 days 3 hours 42 min 38 sec Threads: 14 Questions: 160655492 Slow queries: 71 Opens: 8124 Flush tables: 3 Open tables: 64 Queries per second avg: 11.538 --------------
Hier ist eine Open tables
Ausgabe von 64, was bedeutet, dass die Tabelle aktuell ist In der Datenbank geöffnet Die Zahl beträgt 64. Es ist zu beachten, dass es sich bei diesen 64 nicht um die tatsächlichen 64 Tabellen handelt. Da MySQL ein Multithread-System ist, können mehrere verschiedene gleichzeitige Verbindungen dieselbe Tabelle öffnen, was eine unabhängige Zuordnung von Sitzungen für verschiedene erfordert Speicherplatz zum Speichern dieser Informationen, um Konflikte zu vermeiden. Daher führt eine Erhöhung der Anzahl der Verbindungen zu einer Erhöhung der Anzahl der von MySQL benötigten Dateideskriptoren. Darüber hinaus wird für MyISAM-Tabellen auch ein gemeinsamer Indexdateideskriptor erstellt.
Auf MySQL-Datenbankebene gibt es also mehrere Systemparameter, die die Anzahl der Tabellen bestimmen, die gleichzeitig geöffnet werden können, und die zu verwendenden Dateideskriptoren, nämlich table_open_cache, max_tmp_tables und open_files_limit.
mysql> show variables like 'table_open%'; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | table_open_cache | 64 | +------------------+-------+ 1 row in set (0.00 sec)
Der Parameter table_open_cache beträgt hier 64, was bedeutet, dass alle MySQL-Threads insgesamt 64 Tabellen gleichzeitig öffnen können. Wir können die historischen Aufzeichnungen des Systems über die Anzahl der geöffneten Tabellen erfassen und vergleichen Sie sie mit diesem Parameter. Entscheiden Sie, ob die Größe dieses Parameters erhöht werden soll. Eine Möglichkeit, die aktuelle Anzahl offener Tabellen zu überprüfen, ist die Verwendung des oben genannten Befehls status
. Darüber hinaus können Sie den Wert dieser Systemvariablen direkt abfragen:
mysql> show status like 'open%'; +--------------------------+-------+ | Variable_name | Value | +--------------------------+-------+ | Open_files | 3 | | Open_streams | 0 | | Open_table_definitions | 8 | | Open_tables | 8 | | Opened_files | 91768 | | Opened_table_definitions | 0 | | Opened_tables | 0 | +--------------------------+-------+ 7 rows in set (0.00 sec) mysql> show global status like 'open%'; +--------------------------+-------+ | Variable_name | Value | +--------------------------+-------+ | Open_files | 3 | | Open_streams | 0 | | Open_table_definitions | 10 | | Open_tables | 11 | | Opened_files | 91791 | | Opened_table_definitions | 1211 | | Opened_tables | 8158 | +--------------------------+-------+ 7 rows in set (0.00 sec)
Open_tables ist hier die Anzahl der aktuell geöffneten Tabellen. Die aktuell geöffneten Tabellen können über den Befehl „Flush Tables“ geschlossen werden. Bei den global betrachteten Opened_tables handelt es sich um einen historischen kumulativen Wert. Wenn dieser Wert zu groß ist und der Befehl flush tables
nicht häufig ausgeführt wird, können Sie erwägen, die Größe des Parameters table_open_cache zu erhöhen.
Schauen Sie sich als Nächstes den Parameter max_tmp_tables an:
mysql> show variables like 'max_tmp%'; +----------------+-------+ | Variable_name | Value | +----------------+-------+ | max_tmp_tables | 32 | +----------------+-------+ 1 row in set (0.00 sec)
Dieser Parameter gibt die Anzahl der temporären Tabellen an, die von einer einzelnen Clientverbindung geöffnet werden können. Überprüfen Sie die aktuell geöffneten temporären Tabelleninformationen:
mysql> show global status like '%tmp%table%'; +-------------------------+-------+ | Variable_name | Value | +-------------------------+-------+ | Created_tmp_disk_tables | 10478 | | Created_tmp_tables | 25860 | +-------------------------+-------+ 2 rows in set (0.00 sec)
Sie können diese beiden Werte auch vergleichen, um den Erstellungsort der temporären Tabelle zu bestimmen. Wählen Sie im Allgemeinen BLOB und aus TEXT-Spalten, Group Wenn das Datenvolumen von by- und Distinct-Anweisungen 512 Bytes überschreitet oder wenn die Daten einer während der Vereinigung ausgewählten Spalte 512 Bytes überschreiten, wird zusätzlich eine temporäre Tabelle direkt auf der Festplatte erstellt, wenn die temporäre Tabelle im Speicher liegt größer wird, kann es auch sein, dass MySQL automatisch auf die Festplatte verschoben wird (bestimmt durch die Parameter tmp_table_size und max_heap_table_size).
继续原来的讨论,增加table_open_cache或 max_tmp_tables 参数的大小后,从操作系统的角度看,mysqld进程需要使用的文件描述符的个数就要相应的增加,这个是由 open_files_limit参数控制的。但是这个参数是OS限制的,所以我们设定的值并不一定总是生效。如果OS限制MySQL不能修改这个值,那 么置为0。如果是专用的MySQL服务器上,这个值一般要设置的尽量大,就是没有报Too many open files错误的最大值,这样就能一劳永逸了。当操作系统无法分配足够的文件描述符的时候,mysqld进程会在错误日志里记录警告信息。
mysql> show variables like 'open_files%';+------------------+-------+| Variable_name | Value |+------------------+-------+| open_files_limit | 1024 |+------------------+-------+1 row in set (0.00 sec) mysql> show variables like 'open_files%'; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | open_files_limit | 1024 | +------------------+-------+ 1 row in set (0.00 sec)
对应的,有两个状态变量记录了当前和历史的文件打开信息:
mysql> show global status like '%open%file%'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | Open_files | 3 | | Opened_files | 91799 | +---------------+-------+ 2 rows in set (0.01 sec)
MySQL为每个连接分配线程来处理,可以通过threads_connected参数查看当前分配的线程数量:
mysql> show status like '%thread%'; +------------------------+--------+ | Variable_name | Value | +------------------------+--------+ | Delayed_insert_threads | 0 | | Slow_launch_threads | 0 | | Threads_cached | 0 | | Threads_connected | 14 | | Threads_created | 255570 | | Threads_running | 2 | +------------------------+--------+ 6 rows in set (0.00 sec)
比较这个threads_connected参数和前面提到的max_connections参数,也可以作为目前的系统负载的参照,决定是否需要修改连接数。
如果查看每个thread的更详细的信息,可以使用processlist
命令:
mysql> show processlist; +--------+-----------+--------------------+----------+-------------+----------+----------------------------------------------------------------+------------------+ | Id | User | Host | db | Command | Time | State | Info | +--------+-----------+--------------------+----------+-------------+----------+----------------------------------------------------------------+------------------+ | 8293 | repl | 192.168.0.33:47208 | NULL | Binlog Dump | 11574424 | Has sent all binlog to slave; waiting for binlog to be updated | NULL | | 140991 | mogile | 192.168.0.33:41714 | mogilefs | Sleep | 0 | | NULL | | 140992 | mogile | 192.168.0.33:41715 | mogilefs | Sleep | 3 | | NULL | | 140993 | mogile | 192.168.0.33:41722 | mogilefs | Sleep | 2 | | NULL | | 140994 | mogile | 192.168.0.33:41723 | mogilefs | Sleep | 1 | | NULL | | 140995 | mogile | 192.168.0.33:41724 | mogilefs | Sleep | 3 | | NULL | | 254914 | mogile | 192.168.0.33:43028 | mogilefs | Sleep | 11074 | | NULL | | 254915 | mogile | 192.168.0.33:43032 | mogilefs | Sleep | 11091 | | NULL | | 255144 | mogile | 192.168.0.33:47514 | mogilefs | Sleep | 11090 | | NULL | | 255157 | mogile | 192.168.0.33:47535 | mogilefs | Sleep | 11087 | | NULL | | 255162 | mogile | 192.168.0.33:47549 | mogilefs | Sleep | 11074 | | NULL | | 255260 | root | localhost | mysql | Query | 0 | NULL | show processlist | | 255352 | maopaodev | 192.168.0.78:55399 | maopaodb | Sleep | 3172 | | NULL | | 255353 | maopaodev | 192.168.0.78:55400 | NULL | Sleep | 8926 | | NULL | +--------+-----------+--------------------+----------+-------------+----------+----------------------------------------------------------------+------------------+ 14 rows in set (0.00 sec)
执行这个命令需要有Process_priv权限,具体的权限分配信息可以查看mysql.user表。
对于影响系统运行的thread,可以狠一点,用kill connection
|query threadid
的命令杀死它。
相关推荐:
Das obige ist der detaillierte Inhalt vonSo überprüfen Sie die Anzahl der Threads im MySQL-Server. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!