日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql slowlog中querytime分析_技术分享 | Slow Query Log 使用详解

發布時間:2023/12/10 数据库 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql slowlog中querytime分析_技术分享 | Slow Query Log 使用详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

作者:宓祥康

愛可生交付服務部團隊 DBA 擅長日志分析、問題排查等;主要負責處理 MySQL 與我司自研數據庫自動化管理平臺 DMP 的日常運維問題,對數據庫及周邊技術有濃厚的學習興趣。

本文來源:原創投稿

愛可生開源社區出品,原創內容未經授權不得隨意使用,轉載請聯系小編并注明來源。

引言

什么是 Slow Query Log?

該如何使用它?

它的存在對運維數據庫有什么幫助呢?

一、 簡介

慢查詢日志,開啟它我們可以通過參數來控制其記錄執行或查詢時間長的 SQL、全表掃描的 SQL、沒有使用索引的 SQL。沒錯,它的作用就是記錄哪些糟糕的、讓數據庫變慢的 SQL,把它們揪出來。

我們一般通過如下參數來控制 slow 的開啟與記錄:slow_query_log、slow_query_log_file、long_query_time、min_examined_row_limit、log_output、log_queries_not_using_indexes、log_throttle_queries_not_using_indexes。

slow_query_log:控制 slow_query_log 是否開啟,參數 ON|OFF

slow_query_log_file:控制文件的寫入位置,參數為文件的具體位置,如:/data/slow.log

long_query_time:設置 SQL 執行時間大于等于多少秒(可精確到微秒)時記錄到日志中

min_examined_row_limit:設置檢查的行數大于等于多少行時記錄到日志中

log_output:設置慢查詢記錄到哪里,參數 FILE|TABLE

log_queries_not_using_indexes:控制查詢過程中未使用索引或全表掃描的 SQL 是否記錄到日志中

log_throttle_queries_not_using_indexes:開啟 log_queries_not_using_indexes 后,此參數會限制每分鐘可以寫入慢速查詢日志的此類查詢的數量,參數設置 0 為不限制

二、查看方式與內容分析

慢日志分析的方式有兩種,因為慢日志文件一般較小,所以一種方式為在慢日志文件中直接使用 less 或 more 命令來查看。第二種方式則是利用 MySQL 官方提供給我們的程序:mysqldumpslow 來快速查看 slowlog 日志中記錄的慢 SQL。

對于我們詳細來分析 SQL 的話,一般采用第一種方式,查找到對應時間點的對應 SQL 來進行分析。

show master status;

# Time: 2020-11-16T08:27:16.777259+08:00

# User@Host: root[root] @ [127.0.0.1] Id: 248

# Query_time: 15.293745 Lock_time: 0.000000 Rows_sent: 0 Rows_examined: 0

SET timestamp=1605486436;

那么如何讀懂慢日志里面對這些信息呢?

show master status #慢 SQL

Time #出現該慢 SQL 的時間

query_time # SQL 語句的查詢時間(在 MySQL 中所有類型的 SQL 語句執行的時間都叫做 query_time,而在 Oracle 中則僅指 select)

lock_time: #鎖的時間

rows_sent: #返回了多少行,如果做了聚合就不準確了

rows_examined: #執行這條 SQL 處理了多少行數據

SET timestamp #時間戳

通過這些我們就可以來明確的知道一條 SQL 究竟執行了多長時間的查詢,有沒有發生鎖等待,此查詢實際在數據庫中讀取了多少行數據了。

三、如何在線安全清空 slow.log 文件

在開啟 log_queries_not_using_indexes 后,slow log 文件不僅僅會記錄慢查詢日志,還會把查詢過程中未使用索引或全表掃描的 SQL 記錄到日志中,久而久之日志的空間便會變得越來越大,那么如何在線且安全的清空這些 slow log 日志,為磁盤釋放空間呢?

MySQL 對于慢日志的輸出方式支持兩種,TABLE 和 FILE,查看方法如下:

mysql> show variables like '%log_output%';

+---------------+------------+

| Variable_name | Value |

+---------------+------------+

| log_output | FILE,TABLE |

+---------------+------------+

確認清楚輸出方式后,可以分別對不同的輸出方式選擇不同的清空方法,本次將對兩種清空方法共同介紹。

3.1 FILE 類型清空方法

查詢 slow query log 開啟狀態

mysql> show variables like '%slow_query_log%';

+---------------------+-------------------------------------+

| Variable_name | Value |

+---------------------+-------------------------------------+

| slow_query_log | ON |

| slow_query_log_file | /opt/mysql/data/3306/mysql-slow.log |

+---------------------+-------------------------------------+

關閉 slow query log

mysql> set global slow_query_log=0;

確認關閉成功

mysql> show variables like '%slow_query_log%';

+---------------------+-------------------------------------+

| Variable_name | Value |

+---------------------+-------------------------------------+

| slow_query_log | OFF |

| slow_query_log_file | /opt/mysql/data/3306/mysql-slow.log |

+---------------------+-------------------------------------+

對日志進行重命名或移除

mv /opt/mysql/data/3306/mysql-slow.log /opt/mysql/data/3306/mysql-old-slow.log

重新開啟 slow query log

mysql> set global slow_query_log=1;

執行 SQL 進行驗證

mysql> select sleep(5);

+----------+

| sleep(5) |

+----------+

| 0 |

+----------+

驗證新生成文件記錄成功

cat /opt/mysql/data/3306/mysql-slow.log

[root@DMP1 3306]# cat mysql-slow.log

/opt/mysql/base/5.7.31/bin/mysqld, Version: 5.7.31-log (MySQL Community Server (GPL)). started with:

Tcp port: 3306 Unix socket: /opt/mysql/data/3306/mysqld.sock

Time Id Command Argument

# Time: 2021-01-05T13:26:44.001647+08:00

# User@Host: root[root] @ localhost [] Id: 81786

# Query_time: 5.000397 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0

SET timestamp=1609824404;

select sleep(5);

清理舊的 slowlog 文件

mv /opt/mysql/data/3306/mysql-old-slow.log /mysqlback

3.2 TABLE 類型清空方法

先關閉 slow query log

mysql> set global slow_query_log=0;

確認關閉成功

mysql> show variables like 'slow_query_log';

+---------------------+-------------------------------------+

| Variable_name | Value |

+---------------------+-------------------------------------+

| slow_query_log | OFF |

+---------------------+-------------------------------------+

TABLE 類型的 slowlog 存放在 mysql.slow_log 表中,對 slow_log 進行重命名為 old_slow_log

mysql> use mysql

mysql> ALTER TABLE slow_log RENAME old_slow_log;

創建全新的 slow_log 文件拷貝原來 slow_log 文件的表結構

mysql> CREATE TABLE slow_log LIKE old_slow_log;

啟動 slow query log

mysql> SET GLOBAL slow_query_log = 1;

測試驗證

mysql> select sleep(5);

+----------+

| sleep(5) |

+----------+

| 0 |

+----------+

mysql> select * from slow_log \G

*************************** 1. row ***************************

start_time: 2021-01-05 13:49:13.864002

user_host: root[root] @ localhost []

query_time: 00:00:05.000322

lock_time: 00:00:00.000000

rows_sent: 1

rows_examined: 0

db: mysql

last_insert_id: 0

insert_id: 0

server_id: 874143039

sql_text: select sleep(5)

thread_id: 339487

刪除舊的 slow_log 表

mysql> drop table old_slow_log;

總結

該文章主要講述了 slow log 的開啟方式、分析方法與清空操作,熟練使用分析 slow log 文件可以實時觀察數據庫 SQL 的執行情況,并為 SQL 優化奠定基礎。

總結

以上是生活随笔為你收集整理的mysql slowlog中querytime分析_技术分享 | Slow Query Log 使用详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。