Leistungsanalyse des MySQL-Servers

Vorwort

Ich habe kürzlich das Kapitel über die Analyse der Serverleistung von Hochleistungs-MySQL gelesen. Nachdem ich die Datensätze gelesen hatte, habe ich das Gelernte aussortiert.

1. Was ist Leistungsoptimierung?

Das Buch enthält eine einfache Erklärung dafür, dass sich unter dem normalen Betrieb des Dienstes die Antwortzeit des Dienstes verringert (die Antwortzeit wird später durch RT ersetzt).
Da wir also die Antwortzeit des Dienstes reduzieren möchten, dh die RT nach der Optimierung ist kleiner als die vorherige RT. Die Voraussetzung hier ist, dass
wir wissen, was die vorherige RT ist, dann optimieren und dann die neue RT mit der vorherigen vergleichen . Wenn der neue RT relativ klein ist, wird eine erfolgreiche Optimierung durchgeführt.

Hier ist ein weiterer wichtiger Punkt, wie die Serverleistung und die Antwortzeit gemessen oder gemessen werden können.
Gehen wir Schritt für Schritt vor. Um die Reaktionszeit zu verkürzen, müssen wir jetzt die Reaktionszeit messen und dann die aktuelle Reaktionszeit analysieren, um herauszufinden, welcher Schritt zeitaufwändiger und warum er so langsam ist, und dann das richtige Arzneimittel verschreiben, um einen bestimmten Zusammenhang zu verringern Zeitaufwändig und erzielen dann das optimierte Ergebnis.

2. Leistungsoptimierung verstehen

Im Allgemeinen bezieht sich die Leistungsoptimierung in MySQL auf die Auswahl, und die Antwortzeit kann tatsächlich in zwei Teile unterteilt werden:
Ausführungszeit und Wartezeit. Wenn Sie eine Leistungsanalyse durchführen, müssen Sie wissen, welcher Teil des Problems der Hauptteil ist. Wenn es sich hauptsächlich um die Wartezeit handelt, z. B. 90% der Ausführungszeit, 10% der Ausführungszeit, ist die Wartezeit möglicherweise zuerst das E / A-Problem.
Verschiedene Regeln zur Leistungsoptimierung:

2.1 Optimierungswürdige Abfragen:

1. Wenn der Anteil einer Antwortzeit 5% nicht überschreitet, lohnt es sich nicht zu optimieren. Unabhängig davon, wie hart Sie arbeiten, wird der Nutzen 5% nicht überschreiten
. 2. Wenn die Kosten für die Optimierung höher sind als der Nutzen, lohnt sich die Optimierung nicht. Die Optimierung nimmt viel Zeit in Anspruch. Verbessern Sie eine bereits schnelle Abfrage, dann lohnt sich die aufgewendete Zeit nicht. Man kann sagen, dass dies eine umgekehrte Optimierung ist und Zeit verschwendet wird, um nutzlose Arbeit zu leisten

2.2 Abnormale Situation:

Einige niederfrequente Abfragen sind möglicherweise nicht viele, dauern jedoch lange und wirken sich direkt auf die Benutzererfahrung aus. Solche Abfragen müssen auch gefunden und optimiert werden.

2.3 Unbekannt unbekannt

Die vom Messwerkzeug gemessene Zeit entspricht möglicherweise nicht genau der Ausführungszeit der tatsächlichen Anwendung, und es kann einen Unterschied geben. Beispielsweise hat das Messwerkzeug 9,6 Sekunden gemessen, die tatsächliche Programmdruckzeit kann
11 Sekunden betragen, die Differenz von 1400 Millisekunden wurde nicht gemessen und einige Teilaufgaben des Programms wurden nicht gemessen. Dies kann zu einer ungenauen Fehlerbehebung führen und die Optimierung beeinträchtigen. Der Fortschritt.

2.4 Versteckte Details

Hier ist ein Beispiel zum besseren Verständnis: Es gibt 10.000 Abfragen, 1-2 Abfragen sind sehr langsam und die Anrufhäufigkeit ist nicht viel und die anderen sind sehr schnell. Im Durchschnitt wird die Antwortzeit dieser 1-2 Abfragen um reduziert
Wenn Sie den Durchschnitt ermitteln, sehen Sie nichts Ungewöhnliches. Diese Art der Abfrage muss noch optimiert werden. Zu einem bestimmten Zeitpunkt kann der Server direkt angehalten oder angehalten werden, da zu viele Anrufe eingehen.

3. Analyse der Anwendung

In diesem Buch wird PHP als Beispiel verwendet, um einige spezifische Tools zur Leistungsanalyse zu beschreiben. Jede Sprache verfügt über unterschiedliche Tools zur SQL-Leistungsanalyse, daher werde ich hier nicht auf Details eingehen.

4. Anatomie der MySQL-Abfrage

4.1 Serverlastabfrage

4.1.1 Das Problem des Servers kann über das langsame Abfrageprotokoll von MySQL gefunden werden. Es wird empfohlen, pt-query-Digest
4.1.2 zu verwenden, um das Abfrageprotokoll zu analysieren, indem das TCP-Netzwerkpaket erfasst und anschließend das Kommunikationsprotokoll zwischen dem MySQL-Client und dem Server analysiert wird, um eine genaue Analyse zu erhalten.

4.2 Einzelleistungsabfrage

1. Die Verwendung von show profile
ist standardmäßig deaktiviert, kann jedoch durch Ändern von Variablen auf Sitzungsebene dynamisch aktiviert werden.

mysql>    SET profiling = 1;

Nach dem Öffnen werden alle Sätze, der Zeitaufwand und die zugehörigen Parameter gemessen und gespeichert.
Offizielle Dokumentadresse

2. Verwenden Sie die offizielle Dokumentadresse für den Status
anzeigen

show status kann verschiedene Informationen in der Sitzung anzeigen und auch globale Variablen anzeigen. Wenn Sie globale Variablen abfragen möchten, verwenden Sie show globals status.
Die grundlegende Verwendung ist wie folgt:

show status like '变量名';

Hier sind einige häufig verwendete Methoden:

--查看MySQL本次启动后的运行时间(单位:秒)

show status like 'uptime';

--查看select语句的执行数

show [global] status like 'com_select';

--查看insert语句的执行数

show [global] status like 'com_insert';

--查看update语句的执行数

show [global] status like 'com_update';

--查看delete语句的执行数

show [global] status like 'com_delete';

--查看试图连接到MySQL(不管是否连接成功)的连接数

show status like 'connections';

--查看线程缓存内的线程的数量。

show status like 'threads_cached';

--查看当前打开的连接的数量。

show status like 'threads_connected';

--查看当前打开的连接的数量。

show status like 'threads_connected';

--查看创建用来处理连接的线程数。如果Threads_created较大,你可能要增加thread_cache_size值。

show status like 'threads_created';

--查看激活的(非睡眠状态)线程数。

show status like 'threads_running';

--查看立即获得的表的锁的次数。

show status like 'table_locks_immediate';

--查看不能立即获得的表的锁的次数。如果该值较高,并且有性能问题,你应首先优化查询,然后拆分表或使用复制。

show status like 'table_locks_waited';

--查看创建时间超过slow_launch_time秒的线程数。

show status like 'slow_launch_threads';

--查看查询时间超过long_query_time秒的查询的个数。

show status like 'slow_queries';

3. Verwenden Sie die
offizielle Dokumentadresse des
langsamen Abfrageprotokolls. Standardmäßig ist das langsame Abfrageprotokoll deaktiviert. Die Variable slow_query_log ist das langsame Abfrageprotokoll, das durch Festlegen der Variablen aktiviert werden kann.

查询慢查询日志:
mysql> show variables  like '%slow_query_log%';
+---------------------+-----------------------------------------------+
| Variable_name       | Value                                         |
+---------------------+-----------------------------------------------+
| slow_query_log      | OFF                                           |
| slow_query_log_file | /xxx/mysql/DB-Server-slow.log |
+---------------------+-----------------------------------------------+

设置慢查询日志
mysql> set global slow_query_log=1;

4. Verwenden Sie die
offizielle Dokumentadresse PERFORMANCE_SCHEMA .
Nehmen Sie hier als Beispiel mysql5.6. PERFORMANCE_SCHEMA ist eine Tabelle, in der die Leistung des mysql-Servers aufgezeichnet wird. Die Standardeinstellung ist deaktiviert. Sie müssen die Einstellungen aktivieren, damit sie nützlich sind.

如下开启: 
    [mysqld]
    performance_schema=ON
查看下是否开启:
mysql>show variables like 'performance_schema';
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| performance_schema | ON    |
+--------------------+-------+

5. Andere Diagnosewerkzeuge

5.1 USER_STATISTICS

Percona Server和MariaDB是支持的,官方的mysql我试了下好像没有找到这个。据说官方分支的mysql是使用的performance
schema表。
 这个工具可以查看到什么表,什么索引使用最频繁或者最频繁等信息。
 命令:
```
mysql> show tables from information_schema like "%_STATISTICS";
```

5,2 stace

stace kann die Systemaufrufe anzeigen und ausdrucken, bei denen es sich um Linux-Befehle handelt, nicht um MySQL-Befehle.

使用方式: strace -p pid or strace command

Gemeinsame Sätze:

1.通用示例:  

#strace -o output.txt -T -tt -e trace=all -p 28979

跟踪28979进程的所有系统调用(-e trace=all),并统计系统调用的花费时间,以及开始时间(并以可视化的时分秒格式显示),最后将记录结果存在output.txt文件里面



2.统计httpd进程的耗时时间:

#strace -c -p $(pgrep -n httpd)

按crtl+c,将显示从开始到结束的时间调用



3.跟踪最占cpu的httpd的一个进程,并将信息输出到文件

#strace -t -f  -o httpd-strace  -p $(top -b -n1 | grep "httpd" | head -1 | awk '{print $1}')

um zusammenzufassen:

1. Die direkteste und effektivste Methode zur Leistungsmessung basiert auf der Antwortzeit
. 2. Beginnen Sie am besten mit der Leistungsmessung in der Anwendung.
3. Die Antwortzeit ist unterteilt in: Ausführungszeit und Wartezeit.
4. Sie müssen zunächst verstehen, ob die Ausführungszeit oder die Wartezeit zu lang ist Betroffene Leistung
5. Weniger als 5% der Reaktionszeit müssen nicht optimiert werden. Es ist erforderlich, sich um die Messerschneide zu bemühen. Wenn die Optimierungskosten höher als der Gewinn sind, lohnt sich eine Optimierung nicht.
6. Jedes Messwerkzeug hat möglicherweise einige Aufgaben oder Stellen, an denen keine Messung durchgeführt wird Versteckte Details können jedoch der Schlüssel sein, und es ist genauer, die Analyse auf mehrere Arten zu kombinieren

Ich denke du magst

Origin blog.csdn.net/sc9018181134/article/details/106183759
Empfohlen
Rangfolge