Heim >Datenbank >MySQL-Tutorial >Codezusammenfassung des langsamen MySQL-Abfragevorgangs

Codezusammenfassung des langsamen MySQL-Abfragevorgangs

黄舟
黄舟Original
2017-03-24 13:36:111311Durchsuche

Der folgende Editor bietet Ihnen eine Zusammenfassung der MysqlSlowQuery-Operationen. Der Herausgeber findet es ziemlich gut, deshalb werde ich es jetzt mit Ihnen teilen und es allen als Referenz geben. Folgen wir dem Editor, um einen Blick darauf zu werfen

Erklärung zu langsamen MySQL-Abfragen

Das langsame Abfrageprotokoll von MySQL ist ein Typ, der von MySQL Logging bereitgestellt wird , das zum Aufzeichnen von Anweisungen verwendet wird, deren Antwortzeit den Schwellenwert in MySQL überschreitet, bezieht sich insbesondere auf SQL, dessen Laufzeit den Wert long_query_time überschreitet, der im langsamen Abfrageprotokoll aufgezeichnet wird. Der Standardwert von long_query_time ist 10, was bedeutet, dass Anweisungen länger als 10 Sekunden ausgeführt werden. Standardmäßig startet die Mysql-Datenbank das langsame Abfrageprotokoll nicht. Wir müssen diesen Parameter natürlich manuell festlegen, wenn er nicht für die Optimierung benötigt wird, wird es im Allgemeinen nicht empfohlen, ihn zu starten Das langsame Abfrageprotokoll führt zu oder mehr oder weniger zu bestimmten Auswirkungen auf die Leistung. Das langsame Abfrageprotokoll unterstützt das Schreiben von Protokolldatensätzen in Dateien und das Schreiben von Protokolldatensätzen in Datenbanktabellen. Das langsame Abfrageprotokoll wird zum Aufzeichnen einiger zu langsamer Abfrageanweisungen verwendet, was Administratoren bei der Analyse des Problems helfen kann auf nein Um es zu aktivieren, müssen Sie eine Reihe von Parametern in der Konfigurationsdatei hinzufügen, um

Grund für das Einschalten der langsamen MySQL-Abfrage

Die Datenbank ist ein Ort, an dem es leicht zu Engpässen kommen kann. Heutzutage wird Nosql so viel diskutiert, dass wahrscheinlich jeder von der Datenbank deprimiert ist. Was die Geschwindigkeit von MySQL am meisten beeinträchtigt, sind diese sehr langsamen Abfrageanweisungen, die möglicherweise unangemessen geschrieben sind oder

gemeinsame Abfragen mehrerer Tabellen unter Big Data usw. sind. Daher müssen wir diese Anweisungen herausfinden. Analysieren Sie die Gründe und optimieren Sie sie. Dies ist auch der Grund für die Veröffentlichung dieses Blog-Beitrags

Enable mysql slow query method

1) Methode 1: Melden Sie sich am MySQL-Datenbankterminal an und öffnen Sie

mysql> show variables like "%long%";    
<SPAN style="COLOR: #ff00ff"> //查看一下默认为慢查询的时间10秒 </SPAN> 
+-----------------+-----------+  
| Variable_name  | Value   |  
+-----------------+-----------+  
| long_query_time | 10.000000 |  
+-----------------+-----------+  
1 row in set (0.00 sec)  
  
mysql> set global long_query_time=1;     
<SPAN style="COLOR: #ff00ff">//设置成1秒,加上global,下次进mysql已然生效</SPAN>  
Query OK, 0 rows affected (0.00 sec)  
 
mysql> show variables like "%slow%";     
<SPAN style="COLOR: #ff00ff"> //查看一下慢查询是不是已经开启 </SPAN> 
+---------------------+---------------------------------+  
| Variable_name    | Value              |  
+---------------------+---------------------------------+  
| log_slow_queries  | OFF               |  
| slow_launch_time  | 2                |  
| slow_query_log   | OFF               |  
| slow_query_log_file | /usr/local/mysql/mysql-slow.log |  
+---------------------+---------------------------------+  
4 rows in set (0.00 sec)  
  
mysql> set slow_query_log=&#39;ON&#39;;          
<SPAN style="COLOR: #ff00ff"> //加上global,不然会报错的</SPAN> 
ERROR 1229 (HY000): Variable &#39;slow_query_log&#39; is a GLOBAL variable and should be set with SET GLOBAL 
mysql> set global slow_query_log=&#39;ON&#39;;      
<SPAN style="COLOR: #ff00ff">//这个参数设置为ON,表示启用慢查询,可以捕获执行时间超过一定数值的SQL语句。</SPAN> 
Query OK, 0 rows affected (0.28 sec)  
  
mysql> show variables like "%slow%";       
<SPAN style="COLOR: #ff00ff">//查看是否已经开启 </SPAN> 
+---------------------+---------------------------------+  
| Variable_name    | Value              |  
+---------------------+---------------------------------+  
| log_slow_queries  | ON               |  
| slow_launch_time  | 2                |  
| slow_query_log   | ON               |  
| slow_query_log_file | /usr/local/mysql/mysql-slow.log |  
+---------------------+---------------------------------+  
4 rows in set (0.00 sec)

Methode 2. Ändern Sie die MySQL-Konfigurationsdatei my.cnf

[root@www ~]# vim /etc/mysql.cnf

Fügen Sie den folgenden Inhalt in der Konfiguration des Bereichs [mysqld] hinzu
......

slow_query_log = 1
      
//开启慢查询日志,将1改为ON也可以
long_query_time = 1
      
//mysql慢查询时间,指定达到多少秒才算慢查询;这里推荐设置超过1秒的执行语句就会被记录到慢查询日志中
slow_query_log_file= /var/lib/mysql/mysql-slow.log
     
//慢查询日志路径。这里slow_query_log_file修改为log-slow-queries 也可以
//主要是上面三行内容,还可以添加下面几行细节性配置
long-queries-not-using-indexes
     
//记录没有使用索引的查询语句
min_examined_row_limit = 1000
    
 //记录查找了多达1000次而引起的慢查询
log-slow-admin-statements
     
  //记录ALTER TABLE等语句引发的慢查询
log-slow-slave-statements       
 //记录从服务器产生的慢查询


Analysetool

Das Analysetool zeichnet tatsächlich MySQL auf -slow.log Analysieren Sie die Daten und zeigen Sie sie an (tatsächlich können Sie die erforderlichen Informationen auch erhalten, indem Sie selbst ein Shell-Skript schreiben).


[root@www ~]# cat mysql-slow.log                                                                                                                                                                                                                         Der Ausführungsstatus von SQL-Anweisungen, einschließlich Ausführungszeit, Sperrzeit usw., ob Sie also ein Analysetool benötigen, hängt von Ihren persönlichen Vorlieben ab Situation: Es gibt viele Analysetools. Hier werde ich nur auf die Verwendung des MySQL-eigenen Analysetools für langsame Abfragen eingehen.

[root@www ~]# mysqldumpslow -h


/usr/local/mysql/libexec/mysqld, Version: 5.1.26-rc-log (Source distribution). started with:  
Tcp port: 3306 Unix socket: /tmp/mysql.sock  
Time         Id Command  Argument  
# Time: 100814 13:28:30  
# User@Host: root[root] @ localhost []  
# Query_time: 10.096500 Lock_time: 0.045791 Rows_sent: 1 Rows_examined: 2374192  
SET timestamp=1281763710;  
select count(distinct ad_code) as x from ad_visit_history where ad_code in (select ad_code from ad_list where media_id=15);  
# Time: 100814 13:37:02  
# User@Host: root[root] @ localhost []  
# Query_time: 10.394134 Lock_time: 0.000091 Rows_sent: 1 Rows_examined: 2374192  
SET timestamp=1281764222;  
select count(distinct ad_code) as x from ad_visit_history where ad_code in (select ad_code from ad_list where media_id=15);  
# Time: 100814 13:37:16  
# User@Host: root[root] @ localhost []  
# Query_time: 4.608920 Lock_time: 0.000078 Rows_sent: 1 Rows_examined: 1260544  
SET timestamp=1281764236;  
select count(*) as cou from ad_visit_history where ad_code in (select ad_code from ad_list where id=41) order by id desc;
Beispiel:

Das obige ist der detaillierte Inhalt vonCodezusammenfassung des langsamen MySQL-Abfragevorgangs. 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