亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

MySQL慢查詢?nèi)罩緎lowlog的具體使用

 更新時間:2024年06月23日 11:42:15   作者:Archie_java  
本文主要介紹了MySQL慢查詢?nèi)罩緎lowlog的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

0 慢查詢?nèi)罩径x

慢速查詢?nèi)罩居涗浀氖菆?zhí)行時間超過long_query_time秒和檢查的行數(shù)超過min_examined_row_limit的SQL語句,這些語句通常是需要進行優(yōu)化的。

官方參考文檔:https://dev.mysql.com/doc/refman/8.0/en/slow-query-log.html

1 慢查詢?nèi)罩镜呐渲脜?shù)

服務(wù)器使用以下順序的控制參數(shù)來決定是否將查詢語句寫入慢查詢?nèi)罩荆?/p>

  • 查詢必須不是管理語句(如alter、optimize table等),或者必須啟用log_slow_admin_statements參數(shù)記錄管理類語句;
  • 查詢必須至少花費了long_query_time秒,或者必須啟用log_queries_not_using_indexes,并且查詢的索引沒有行限制(如全表掃描、索引全掃描等);
  • 查詢必須至少檢索了min_examined_row_limit行;
  • 不被參數(shù)log_throttle_queries_not_using_indexes設(shè)置閾值限制寫入慢sql日志。

下面介紹這些參數(shù):

一、long_query_time

規(guī)定了查詢時間超過此參數(shù)值被定義為慢SQL,狀態(tài)變量Slow_queries記錄了慢查詢SQL的數(shù)量。long_query_time的單位為秒,可以設(shè)置成小數(shù),精確到微妙。最小值為0,最大值為31536000,即365天,默認值為10。

查看當(dāng)前設(shè)置:

mysql> show variables like 'long_query_time';
+-----------------+-----------+
| Variable_name   | Value     |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set (0.01 sec)

查看慢sql數(shù)量:

mysql> show status like 'slow_queries';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Slow_queries  | 5     |
+---------------+-------+
1 row in set (0.01 sec)

將此參數(shù)設(shè)置為5:

mysql> set global long_query_time=5;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like 'long_query_time';
+-----------------+----------+
| Variable_name   | Value    |
+-----------------+----------+
| long_query_time | 5.000000 |
+-----------------+----------+
1 row in set (0.00 sec)

二、slow_query_log

此參數(shù)決定是否激活慢sql日志,默認值是off,即關(guān)閉。

啟用慢查詢?nèi)罩荆?/p>

mysql> set global slow_query_log=on;
Query OK, 0 rows affected (0.00 sec)

三、slow_query_log_file

此參數(shù)指定慢sql日志的文件路徑和文件名,默認位置在數(shù)據(jù)目錄datadir中,默認文件名是hostname-slow.log。

mysql> show variables like 'slow_query_log_file';
+---------------------+-------------------------------+
| Variable_name       | Value                         |
+---------------------+-------------------------------+
| slow_query_log_file | /disk1/data/mysql001-slow.log |
+---------------------+-------------------------------+
1 row in set (0.00 sec)

查看慢sql日志文件:

[mysql@mysql001 log]$ tailf /disk1/data/mysql001-slow.log
/usr/sbin/mysqld, Version: 8.0.34 (MySQL Community Server - GPL). started with:
Tcp port: 3306  Unix socket: /var/lib/mysql/mysql.sock
Time                 Id Command    Argument
# Time: 2023-12-20T22:44:21.890879+08:00
# User@Host: root[root] @ localhost []  Id:     9
# Query_time: 0.009038  Lock_time: 0.000008 Rows_sent: 0  Rows_examined: 0 Thread_id: 9 Errno: 0 Killed: 0 Bytes_received: 286 Bytes_sent: 92 Read_first: 0 Read_last: 0 Read_key: 12 Read_next: 0 Read_prev: 0 Read_rnd: 0 Read_rnd_next: 1 Sort_merge_passes: 0 Sort_range_count: 0 Sort_rows: 0 Sort_scan_count: 1 Created_tmp_disk_tables: 0 Created_tmp_tables: 1 Start: 2023-12-20T22:44:21.881841+08:00 End: 2023-12-20T22:44:21.890879+08:00
SET timestamp=1703083461;
select f.title, count(*) as cnt
  from sakila.rental r
  join sakila.inventory i
    on r.inventory_id = i.inventory_id
  join sakila.film f
    on i.film_id = f.film_id
 where r.rental_date between '2005-03-01' and '2005-03-31'
 group by f.film_id
 order by cnt desc
 limit 10;

四、log_queries_not_using_indexes

啟用該變量,會記錄期望檢索所有行的查詢語句,也就是說做表全掃描。使用索引的查詢也會被記錄。例如,使用完整索引掃描的查詢使用索引,但會記錄日志,因為索引不會限制行數(shù)。默認值是false。

五、min_examined_row_limit

參數(shù)規(guī)定了只有當(dāng)檢索的行數(shù)超過了參數(shù)值的sql語句才會被記錄到慢sql日志文件中,默認值是0,沒有限制??梢院蜕弦粋€參數(shù)log_queries_not_using_indexes搭配使用,可以避免記錄一些訪問小表的查詢。

六、log_throttle_queries_not_using_indexes

該參數(shù)限制每分鐘記錄到慢查詢?nèi)罩局械牟樵冋Z句數(shù)量,默認值是0,不限制。

七、log_slow_extra

參數(shù)log_slow_extra從MySQL 8.0.14開始可用,當(dāng)啟用時,將記錄與慢sql相關(guān)的額外信息,如狀態(tài)參數(shù)Handler_%。參數(shù)默認值為off,建議打開,將參數(shù)設(shè)置為on。

mysql> set global log_slow_extra=on;
Query OK, 0 rows affected (0.00 sec)

2 使用mysqldumpslow解釋慢查詢?nèi)罩?/h2>

MySQL慢速查詢?nèi)罩景瑘?zhí)行時間較長的查詢信息,且包含的記錄較多時,看起來比較困難??梢允褂胢ysqldumpslow解析MySQL慢速查詢?nèi)罩疚募⒖偨Y(jié)日志內(nèi)容。

一、摘要分析

mysqldumpslow會對查詢進行摘要分析,8.0版本新添的兩個分析摘要函數(shù)如下:

  • statement_digest_text():返回摘要文本;
  • statement_digest():返回摘要hashvalue。

用法如下:

mysql> select statement_digest_text("select user(),host from mysql.user where user = 'lu9up'");
+----------------------------------------------------------------------------------+
| statement_digest_text("select user(),host from mysql.user where user = 'lu9up'") |
+----------------------------------------------------------------------------------+
| SELECT SYSTEM_USER ( ) , HOST FROM `mysql` . `user` WHERE SYSTEM_USER = ?        |
+----------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> select statement_digest("select user(),host from mysql.user where user = 'lu9up'");
+-----------------------------------------------------------------------------+
| statement_digest("select user(),host from mysql.user where user = 'lu9up'") |
+-----------------------------------------------------------------------------+
| 12984e6ff7cbdbd28e2a377375af873fcd606891f82c670a74c04db83f7ac09c            |
+-----------------------------------------------------------------------------+
1 row in set (0.00 sec)

二、mysqldumpslow操作

調(diào)用語法:

mysqldumpslow [options] [log_file ...]

options:

image.png

-s指定排序方式,默認是at,根據(jù)平均時間排序,共有七種排序方式:

image.png

mysqldumpslow操作示例

使用mysqldumpslow對慢查詢?nèi)罩疚募M行分析,輸出平均執(zhí)行時間最久的兩條查詢:

[mysql@mysql001 ~]$ mysqldumpslow -s at -t 2 /disk1/data/mysql001-slow.log

Reading mysql slow query log from /disk1/data/mysql001-slow.log
Count: 1  Time=0.01s (0s)  Lock=0.00s (0s)  Rows=0.0 (0), root[root]@localhost
  select f.title, count(*) as cnt
  from sakila.rental r
  join sakila.inventory i
  on r.inventory_id = i.inventory_id
  join sakila.film f
  on i.film_id = f.film_id
  where r.rental_date between 'S' and 'S'
  group by f.film_id
  order by cnt desc
  limit N

Count: 8  Time=0.00s (0s)  Lock=0.00s (0s)  Rows=4.9 (39), root[root]@localhost
  show variables like 'S'

3 使用pt-query-digest解析慢查詢?nèi)罩?/h2>

pt-query-digest是Percona Toolkit的一個工具,用于分析MySQL的慢查詢?nèi)罩疚募?、通用查詢?nèi)罩疚募投M制日志文件中的查詢,也可以分析SHOW PROCESSLIST命令輸出的結(jié)果和tcpdump抓取的MySQL協(xié)議數(shù)據(jù)(如:網(wǎng)絡(luò)流量包)。默認情況下,對所有分析的查詢按摘要分組,分析結(jié)果按查詢時間降序輸出。

官方參考文檔:https://docs.percona.com/percona-toolkit/pt-query-digest.html

3.1 安裝pt-query-digest

一、下載Percona Toolkit:

[mysql@mysql001 ~]$ wget percona.com/get/pt-query-digest

二、賦權(quán)

[mysql@mysql001 ~]$ chmod +775 pt-query-digest

完成賦權(quán)后就可以正常使用了。

3.2 語法和選項

語法:

pt-query-digest [OPTIONS] [FILES] [DSN]

選項:

optition namecomment
–ask-pass連接MySQL時提示輸入密碼。
–continue-on-error即使出現(xiàn)錯誤,也要繼續(xù)解析,默認值時yes。該工具不會永遠繼續(xù):一旦任何進程導(dǎo)致100個錯誤,它就會停止。
–create-review-table使用–review選項將分析結(jié)果輸出到表中時,如果表不存在,創(chuàng)建它,默認值是yes。
–create-history-table使用–history選項將分析結(jié)果輸出到表中時,如果表不存在,創(chuàng)建它,默認值是yes。
–defaults-file指定mysql的參數(shù)文件名,必須給出一個絕對路徑名。
–explain使用此DSN對示例查詢運行EXPLAIN并打印結(jié)果。
–filter該選項是一個Perl代碼字符串或包含Perl代碼的文件,使用此參數(shù)對要分析的文件進行過濾后再分析,將不符合Perl代碼的時間全部忽略。
–review保存分析結(jié)果到表中,有重復(fù)的查詢在表中時,不會再記錄。只保存分析過的sql語句,不包含分析結(jié)果。
–history保存分析結(jié)果到表中,有重復(fù)的查詢在表中時,也會記錄,但時間不一樣。與review不同,不僅保存分析的sql語句,也包含分析結(jié)果。
–limit將輸出限制為給定的百分比或SQL語句數(shù)量。
–max-line-length把輸出行的長度修剪到這個長度,0表示不裁剪。
–order-by按此屬性和聚合函數(shù)對事件進行排序,默認為Query_time:sum。
–output指定分析結(jié)果的輸出格式。
–since指定分析從什么時間開始的sql語句。
–until指定分析的sql語句的截至?xí)r間。
–type指定日志文件的類型,可以是genlog、binlog、slowlog、tcpdump、rawlog等。

選項的具體使用細則參考官方文檔:https://docs.percona.com/percona-toolkit/pt-query-digest.html#options

3.3 用法示例

1)直接分析慢查詢文件

[mysql@mysql001 output]$ pt-query-digest /disk1/data/mysql001-slow.log > slow`date +"%Y%m%d"`.log
[mysql@mysql001 output]$ ll
total 20
-rw-rw-r-- 1 mysql mysql 17819 Dec 20 22:51 slow20231220.log

2)分析網(wǎng)絡(luò)流量包

從3306端口抓取1000個流量包輸出到文件mysql.tcp.txt:

tcpdump -s 65535 -x -nn -q -tttt -i any -c 1000 port 3306 > mysql.tcp.txt

分析抓取的網(wǎng)路流量包:

pt-query-digest --type tcpdump mysql.tcp.txt> slow_report9.log

3)分析pocesslist的輸出

pt-query-digest --processlist h = host1

4)保存分析過的sql語句到表中

pt-query-digest --review h=192.168.131.99 --no-report mysql001-slow.log

默認保存的表是percona_schema.query_review。

5)保存分析結(jié)果到表中

pt-query-digest --history h=192.168.131.99 --no-report mysql001-slow.log

默認保存的表是percona_schema.query_history。

到此這篇關(guān)于MySQL慢查詢?nèi)罩緎lowlog的具體使用的文章就介紹到這了,更多相關(guān)MySQL慢查詢?nèi)罩緎lowlog內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論