一捏检、什么是慢查詢
慢查詢荞驴,顧名思義,執(zhí)行很慢的查詢贯城。有多慢熊楼?超過long_query_time
參數(shù)設(shè)定的時(shí)間閾值(默認(rèn)10s),就被認(rèn)為是慢的,是需要優(yōu)化的鲫骗。慢查詢被記錄在慢查詢?nèi)罩纠锶堋B樵內(nèi)罩灸J(rèn)是不開啟的替蛉。如果需要優(yōu)化SQL語句苛预,就可以開啟這個(gè)功能,它可以讓你很容易地知道哪些語句是需要優(yōu)化的辑莫。
1??show variables like 'slow_query_log';
查詢是否開啟慢查詢?nèi)罩?br>
【開啟慢查詢sql:set global slow_query_log = 1/on;
】
【關(guān)閉慢查詢sql:set global slow_query_log = 0/off;
】
2??show variables like 'log_queries_not_using_indexes';
查詢未使用索引是否開啟記錄慢查詢?nèi)罩?br>
【開啟記錄未使用索引sql:set global log_queries_not_using_indexes=1/on
】
【關(guān)閉記錄未使用索引sql:set global log_queries_not_using_indexes=1/off
】
3??show variables like 'long_query_time';
查詢超過多少秒的記錄到慢查詢?nèi)罩局?br>
【設(shè)置超1秒就記錄慢查詢sql:set global long_query_time= 1;
設(shè)置超1秒就記錄】
二术吝、慢查詢的配置文件my.cnf
在MySQL的配置文件my.cnf中寫上:
long_query_time = 10
log-slow-queries = /var/lib/mysql/mysql-slow.log
long_query_time
是指執(zhí)行超過多久的SQL會(huì)被日志記錄下來计济,這里是10 秒。
log-slow-queries
設(shè)置把日志寫在哪里排苍。為空的時(shí)候沦寂,系統(tǒng)會(huì)給慢查詢?nèi)罩举x予主機(jī)名,并加上slow.log淘衙。如果設(shè)置了參數(shù)log-long-format
传藏,那么所有沒有使用索引的查詢也將被記錄。
這是一個(gè)非常有用的日志彤守。它對(duì)于性能的影響不大(假設(shè)所有查詢都很快)毯侦,并且強(qiáng)調(diào)了那些最需要注意的查詢(丟失了索引或索引沒有得到最佳應(yīng)用)。
三遗增、慢查詢解讀
第一行:記錄時(shí)間
第二行:用戶名 叫惊、用戶的IP信息款青、線程ID號(hào)
第三行:執(zhí)行花費(fèi)的時(shí)間【單位:毫秒】做修、執(zhí)行獲得鎖的時(shí)間、獲得的結(jié)果行數(shù)抡草、掃描的數(shù)據(jù)行數(shù)
第四行:這SQL執(zhí)行的時(shí)間戳
第五行:具體的SQL語句