MySQL慢日志輸出問(wèn)題及快速解決方法
最近在使用MySQL慢日志的過(guò)程中發(fā)現(xiàn)即使慢SQL的時(shí)間已經(jīng)設(shè)置為1秒,但是小于1秒的SQL依然被輸出到了慢日志文件中,先說(shuō)原因:?jiǎn)⒂昧?log_queries_not_using_indexes
如果你在配置中開啟了
log_queries_not_using_indexes = ON
那么 即使查詢執(zhí)行時(shí)間遠(yuǎn)小于 long_query_time,只要它沒(méi)走索引,也會(huì)被記入慢日志!
解決方法
檢查是否啟用了該選項(xiàng):
SHOW VARIABLES LIKE 'log_queries_not_using_indexes';
如果返回 ON,而你不希望記錄未使用索引但很快的查詢,請(qǐng)關(guān)閉它:
SET GLOBAL log_queries_not_using_indexes = OFF;
并在配置文件中確保:
[mysqld] log_queries_not_using_indexes = 0
變量作用域
如果上面的配置依然無(wú)法解決問(wèn)題,檢查long_query_time 設(shè)置未全局生效(會(huì)話 vs 全局),執(zhí)行
SHOW SESSION VARIABLES LIKE 'long_query_time';
如果不是1(需要設(shè)置的時(shí)間),執(zhí)行
SET GLOBAL long_query_time = 1;
注意:SET GLOBAL 只影響新建立的連接,不影響已有連接。
查詢變量值
經(jīng)過(guò)上面的配置后,查詢變量是否生效,執(zhí)行
SHOW GLOBAL VARIABLES LIKE 'long_query_time'; SHOW SESSION VARIABLES LIKE 'long_query_time'; SHOW VARIABLES LIKE 'log_queries_not_using_indexes'; SHOW VARIABLES LIKE 'slow_query_log'; SHOW VARIABLES LIKE 'long_query_time'; SHOW VARIABLES LIKE 'slow_query_log_file';
開啟慢日志
1、在線開啟
-- 嘗試設(shè)置日志文件路徑(MySQL 8.0 支持動(dòng)態(tài)修改,5.7 可能不支持) SET GLOBAL slow_query_log_file = '/var/log/mysql/mysql-slow.log'; -- 記錄超過(guò) 1 秒的查詢 SET GLOBAL long_query_time = 1; SET GLOBAL slow_query_log = 'ON';
雖然在線開啟了,但 MySQL 重啟后會(huì)恢復(fù)默認(rèn)。要永久生效,需用到下面的方法。
2、修改配置文件,編輯 my.cnf(通常位于 /etc/my.cnf 或 /etc/mysql/my.cnf),需要重啟
[mysqld] slow_query_log = 1 slow_query_log_file = /var/log/mysql/mysql-slow.log long_query_time = 1 log_queries_not_using_indexes = 0 # 可選:是否記錄未使用索引的查詢
修改后無(wú)需立即重啟(需先執(zhí)行1、在線開啟),但下次啟動(dòng)時(shí)會(huì)沿用配置。
到此這篇關(guān)于解決MySQL慢日志輸出問(wèn)題的文章就介紹到這了,更多相關(guān)mysql慢日志輸出內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL雙層游標(biāo)嵌套循環(huán)實(shí)現(xiàn)方法
要實(shí)現(xiàn)逐行獲取數(shù)據(jù),需要用到MySQL中的游標(biāo),一個(gè)游標(biāo)相當(dāng)于一個(gè)for循環(huán),這里需要用到2個(gè)游標(biāo),如何在MySQL中實(shí)現(xiàn)游標(biāo)雙層循環(huán)呢,下面小編給大家分享MySQL雙層游標(biāo)嵌套循環(huán)方法,感興趣的朋友跟隨小編一起看看吧2024-05-05
Navicat無(wú)法連接MySQL報(bào)錯(cuò)1251的解決方案
這篇文章主要為大家詳細(xì)介紹了Navicat無(wú)法連接MySQL報(bào)錯(cuò)1251的解決方案,文中解決方法介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2023-12-12
MySQL錯(cuò)誤代碼:1052?Column?'xxx'?in?field?list?is
今天在工作中寫sql語(yǔ)句時(shí)遇到了個(gè)sql錯(cuò)誤,為記錄并不再重復(fù)出錯(cuò),下面這篇文章主要給大家介紹了關(guān)于MySQL錯(cuò)誤代碼:1052?Column?'xxx'?in?field?list?is?ambiguous的原因和解決方法,需要的朋友可以參考下2023-04-04
Lost connection to MySQL server at ''reading authorization p
這篇文章主要介紹了Lost connection to MySQL server at 'reading authorization packet', system error: 0錯(cuò)誤解決方法,需要的朋友可以參考下2014-08-08
MySQL 5.7增強(qiáng)版Semisync Replication性能優(yōu)化
這篇文章主要介紹了MySQL 5.7增強(qiáng)版Semisync Replication性能優(yōu)化,本文著重講解支持發(fā)送binlog和接受ack的異步化、支持在事務(wù)commit前等待ACK兩項(xiàng)內(nèi)容,需要的朋友可以參考下2015-05-05
MySQL STORED 生成列(Generated Column) 的使用小結(jié)
MySQL 8中的生成列可以解決帶函數(shù)判斷的SQL導(dǎo)致的索引無(wú)法使用和性能問(wèn)題,生成列分為VIRTUAL和STORED,其中STORED列會(huì)在插入時(shí)計(jì)算并存儲(chǔ)在磁盤上,可以建索引,非常適合用于復(fù)雜的SQL優(yōu)化,下面就一起來(lái)了解一下2026-02-02

