mysql如何定位耗时较长的sql_Mysql实例mysql优化之定位效率较低的SQL
《Mysql實(shí)例mysql優(yōu)化之定位效率較低的SQL》要點(diǎn):
本文介紹了Mysql實(shí)例mysql優(yōu)化之定位效率較低的SQL,希望對(duì)您有用。如果有疑問(wèn),可以聯(lián)系我們。
導(dǎo)讀:一般通過(guò)以下兩種方式定位執(zhí)行效率較低的 SQL 語(yǔ)句.通過(guò)慢查詢?nèi)罩径ㄎ荒切﹫?zhí)行效率較低的 SQL 語(yǔ)句,用 --log-slow-queries[=file_n...
MYSQL實(shí)例一般通過(guò)以下兩種方式定位執(zhí)行效率較低的 SQL 語(yǔ)句.
MYSQL實(shí)例通過(guò)慢查詢?nèi)罩径ㄎ荒切﹫?zhí)行效率較低的 SQL 語(yǔ)句,用 --log-slow-queries[=file_name] 選項(xiàng)啟動(dòng)時(shí), mysqld 會(huì) 寫(xiě)一個(gè)包含所有執(zhí)行時(shí)間超過(guò) long_query_time 秒的 SQL 語(yǔ)句的日志文件,通過(guò)查看這個(gè)日志文件定位效率較低的 SQL .
MYSQL實(shí)例慢查詢?nèi)罩驹诓樵兘Y(jié)束以后才紀(jì)錄,所以在應(yīng)用反映執(zhí)行效率出現(xiàn)問(wèn)題的時(shí)候查詢慢查詢?nèi)罩静⒉荒芏ㄎ粏?wèn)題,可以使用 show processlist 命令查看當(dāng)前 MySQL 在進(jìn)行的線程,包括線程的狀態(tài)、是否鎖表等,可以實(shí)時(shí)地查看 SQL 的 執(zhí)行情況,同時(shí)對(duì)一些鎖表操作進(jìn)行優(yōu)化.
MYSQL實(shí)例下面我們舉例說(shuō)明一下,如何通過(guò)慢查詢?nèi)罩径ㄎ粓?zhí)行效率底的 SQL 語(yǔ)句:
開(kāi)啟慢查詢?nèi)罩?#xff1a;
[mysqld]
log-slow-queries
MYSQL實(shí)例在 my.cnf 配置文件中增加上述配置項(xiàng)并重啟 mysql 服務(wù),這時(shí) mysql 慢查詢功能生效.慢查詢 日志將寫(xiě)入?yún)?shù) DATADIR (數(shù)據(jù)目錄)指定的路徑下,默認(rèn)文件名是 host_name-slow.log .
和錯(cuò)誤日志、查詢?nèi)罩疽粯?慢查詢?nèi)罩居涗浀母袷揭彩羌兾谋?可以被直接讀取.
MYSQL實(shí)例下例中演示了慢查詢?nèi)罩镜脑O(shè)置和讀取過(guò)程.
1,首先查詢一下 long_query_time 的值 .
mysql> show variables like 'long%';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| long_query_time | 10 |
+-----------------+-------+
1 row in set (0.00 sec)
MYSQL實(shí)例2,為了方便測(cè)試,將修改慢查詢時(shí)間為 5 秒.
mysql> set long_query_time=5;
Query OK, 0 rows affected (0.02 sec)
MYSQL實(shí)例3,依次執(zhí)行下面兩個(gè)查詢語(yǔ)句.
第一個(gè)查詢因?yàn)椴樵儠r(shí)間低于 5 秒而不會(huì)出現(xiàn)在慢查詢?nèi)罩局?#xff1a;
mysql> select count(*) from order2008;
+----------+
| count(*) |
+----------+
| 208 |
+----------+
1 row in set (0.00 sec)
MYSQL實(shí)例第二個(gè)查詢因?yàn)椴樵儠r(shí)間大于 5 秒而應(yīng)該出現(xiàn)在慢查詢?nèi)罩局?#xff1a;
mysql> select count(*) from t_user;
+----------+
| count(*) |
+----------+
| 6552961 |
+----------+
1 row in set (11.07 sec)
MYSQL實(shí)例4,查看慢查詢?nèi)罩?
[root@localhost mysql]# more localhost-slow.log
# Time: 081026 19:46:34
# User@Host: root[root] @ localhost []
# Query_time: 11 Lock_time: 0 Rows_sent: 1 Rows_examined: 6552961
select count(*) from t_user;
MYSQL實(shí)例從上面日志中,可以發(fā)現(xiàn)查詢時(shí)間超過(guò) 5 秒的 SQL ,而小于 5 秒的則沒(méi)有出現(xiàn)在此日志中.
MYSQL實(shí)例如果慢查詢?nèi)罩局杏涗泝?nèi)容很多,可以使用 mysqldumpslow 工具( MySQL 客戶端安裝自帶)來(lái)對(duì)慢查詢?nèi)罩具M(jìn)行分類匯總.
下例中對(duì)日志文件 mysql_master-slow.log 進(jìn)行了分類匯總,只顯示匯總后摘要結(jié)果:
[root@mysql_master mysql_data]# mysqldumpslow mysql_master-slow.log
Reading mysql slow query log from mysql_master-slow.log
Count: 2 Time=11.00s (22s) Lock=0.00s (0s) Rows=1.0 (2), root[root]@mysql_master
select count(N) from t_user;
MYSQL實(shí)例對(duì)于 SQL 文本完全一致,只是變量不同的語(yǔ)句, mysqldumpslow 將會(huì)自動(dòng)視為同一個(gè)語(yǔ)句進(jìn)行統(tǒng)計(jì),變量值用 N 來(lái)代替.
這個(gè)統(tǒng)計(jì)結(jié)果將大大增加用戶閱讀慢查詢?nèi)罩镜男?并迅速定位系統(tǒng)的 SQL 瓶頸.
MYSQL實(shí)例注意:慢查詢?nèi)罩緦?duì)于我們發(fā)現(xiàn)應(yīng)用中有性能問(wèn)題的 SQL 很有幫助,建議正常情況下,打開(kāi)此日志并經(jīng)常查看分析.
總結(jié)
以上是生活随笔為你收集整理的mysql如何定位耗时较长的sql_Mysql实例mysql优化之定位效率较低的SQL的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: linux用户没有创建文件的权限设置密码
- 下一篇: 苹果切换输入法_日语输入法哪个好