詳解MySQL--慢查詢
簡介
開啟慢查詢日誌,可以讓MySQL記錄下查詢超過指定時間的語句,通過定位分析效能的瓶頸,才能更好的優化資料庫系統的效能。
一、配置慢查詢
1、引數說明
slow_query_log : 慢查詢開啟狀態(預設關閉)
slow_query_log_file : 慢查詢日誌存放的位置(這個目錄需要MySQL的執行帳號的可寫許可權, 一般設定為MySQL的資料存放目錄)
long_query_time : 查詢超過多少秒才記錄(預設10秒)
2.檢視慢查詢相關引數
show variables like 'slow_query%';
+---------------------------+----------------------------------+
| Variable_name | Value |
+---------------------------+----------------------------------+
| slow_query_log | OFF |
| slow_query_log_file | /mysql/data/localhost-slow.log |
+---------------------------+----------------------------------+
show variables like 'long_query_time';
+-----------------+-----------+
| Variable_name | Value |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
3.配置慢查詢
它有兩種配置方式,一種是全域性變數配置,一種是配置檔案配置
(1)全域性變數配置
--將 slow_query_log 全域性變數設定為“ON”狀態
set global slow_query_log='ON';
--設定慢查詢日誌存放的位置
set global slow_query_log_file='/usr/local/mysql/data/slow.log';
--查詢超過1秒就記錄
set global long_query_time=1;
(2)修改配置檔案my.cnf(linux環境下)
slow_query_log = ON
slow_query_log_file = /usr/local/mysql/data/slow.log
long_query_time = 1
總結:
(1)通過全域性變數配置好後,需要關閉會話後重新開啟查詢才有效,通過配置檔案需要重啟Mysql伺服器後才有效
(2) 因為開啟慢查詢會影響效能,一般建議通過全域性變數配置,這樣重啟伺服器又是預設關閉慢查詢狀態。
二、mysqldumpslow工具
mysqldumpslow是Mysql自帶的一個工具,有了它我們可以不用去上面的log檔案去找,如果資料平凡操作,那麼去log查下日誌也是比較繁瑣的一件事。
1、主要命令
--s:是表示按照何種方式排序
--c:訪問次數
--l:鎖定時間
--r:返回記錄
--t:查詢時間
--al:平均鎖定時間
--ar:平均返回記錄數
--at:平均查詢時間
--t:即為返回前面多少條的資料
--g:後面搭配一個正則匹配模式,大小寫不敏感
2、舉例
--1.得到返回記錄集最多的10個SQL
mysqldumpslow -s -r -t 10 /logs/mysql-slow.log
--2.得到訪問次數最多的10個SQL
mysqldumpslow -s -c -t 10 /logs/mysql-slow.log
--3.得到按照時間排序的前10條裡面含有做連結的查詢語句
mysqldumpslow -s t -t 10 -g "left join" /logs/mysql-slow.log
--4.另外建議在使用這些命令時結合|和more使用,否則又可能出現爆屏情況
mysqldumpslow -s r -t 10 /logs/mysql-slow.log | more
三、show profile
Show profiles是5.0.37之後新增的,要想使用此功能,要確保版本在5.0.37之後。
1、開啟 show profile
show variables like "profiling";--預設是關閉的
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| profiling | OFF |
+---------------+-------+
--開啟
set profiling=1;
2、執行指定SQL
我這裡執行幾條SQL語句,然後執行
show profiles;--會列出所有在這個開啟期間執行的SQL,並附上QUERY ID
+----------+------------+----------------------------+
| Query_ID | Duration | Query |
+----------+------------+----------------------------+
| 1 | 0.00168025 | select * from vhr.employee |
| 2 | 0.06573200 | select * from vhr.hr |
+----------+------------+----------------------------+
--我們可以看到顯示最近操作的兩條語句,列表大小由profiling_history_size會話變數控制, 預設值為15.最大值為100
3、診斷具體SQL
show profile cpu,block io for queryid --對應2中的query_id
SHOW PROFILE CPU FOR QUERY 1;--查詢query_id為1的具體資訊
+----------------------+----------+----------+------------+
| Status | Duration | CPU_user | CPU_system |
+----------------------+----------+----------+------------+
| starting | 0.000194 | 0.000000 | 0.000000 |
| checking permissions | 0.000012 | 0.000000 | 0.000000 |
| Opening tables | 0.000030 | 0.000000 | 0.000000 |
| init | 0.000053 | 0.000000 | 0.000000 |
| System lock | 0.000011 | 0.000000 | 0.000000 |
| optimizing | 0.000003 | 0.000000 | 0.000000 |
| statistics | 0.000014 | 0.000000 | 0.000000 |
| preparing | 0.000010 | 0.000000 | 0.000000 |
| executing | 0.000001 | 0.000000 | 0.000000 |
| Sending data | 0.001213 | 0.000000 | 0.000000 |
| end | 0.000014 | 0.000000 | 0.000000 |
| query end | 0.000012 | 0.000000 | 0.000000 |
| closing tables | 0.000019 | 0.000000 | 0.000000 |
| freeing items | 0.000070 | 0.000000 | 0.000000 |
| cleaning up | 0.000025 | 0.000000 | 0.000000 |
+----------------------+----------+----------+------------+
需要注意的結論:
1 converting HEAP to MyISAM : 查詢結果太大,記憶體都不夠用了,往磁碟上搬了;
2 creating tmp table : 建立臨時表,拷貝資料到臨時表,然後再刪除;
3 copying to tmp table on disk :把記憶體中臨時表複製到磁碟,危險!!!
4 locked
注:以上四個中若出現一個或多個,表示sql 語句 必須優化。
希望本文對你有所幫助~~感興趣可以加入我們。642830685,技術大牛解惑答疑,同行一起交流。
相關文章
- 深入mysql慢查詢設定的詳解MySql
- mysql5.7.10開啟慢查詢詳解MySql
- MySQL 慢查詢分析工具~pt-query-digest 詳解MySql
- 慢查詢
- MySQL慢查詢MySql
- MySQL 慢查詢MySql
- mysql慢查詢,死鎖解決方案MySql
- SQL Server查詢慢的解決方案SQLServer
- mongodb慢查詢分析MongoDB
- DNS 查詢原理詳解DNS
- 詭異的”慢查詢“
- MySQL:慢查詢日誌MySql
- MySQL 慢查詢優化MySql優化
- MongoDB慢查詢與索引MongoDB索引
- SQL慢查詢排查思路SQL
- MySQL--基礎知識點--65--組合查詢MySql
- MySQL--操作簡記(聯結表,組合查詢(UNION))MySql
- 詳解css媒體查詢CSS
- rails的介面查詢詳解AI
- 詳解二分查詢
- MyBatis使用四(查詢詳解)MyBatis
- oracle連線查詢詳解Oracle
- 遇到慢查詢怎麼辦?一文解讀MySQL 8.0查詢分析工具MySql
- 瑞士軍刀redis - 慢查詢Redis
- MySQL 慢查詢那點事MySql
- 【mysql】explain命令分析慢查詢MySqlAI
- [Mysql]慢查詢最佳化MySql
- 如何使用 MySQL 慢查詢日誌進行效能優化 - Profiling、mysqldumpslow 例項詳解MySql優化
- 20、聯表查詢JoinON詳解
- PostgreSQL 原始碼解讀(20)- 查詢語句#5(查詢樹Query詳解)SQL原始碼
- 分分鐘解決MySQL查詢速度慢與效能差MySql
- oracle 剩餘表空間查詢慢,解決辦法Oracle
- 慢查詢日誌開啟分析
- 慢查詢分析調優工具~mysqldumpslowMySql
- MySQL慢查詢分析工具之mysqldumpslowMySql
- 資料庫查詢慢的原因資料庫
- Mysql 慢查詢優化實踐MySql優化
- HighgoDB查詢慢SQL和阻塞SQLGoSQL