mysql慢查询单位_MySQL慢查询
MySQL的慢查詢,全名是慢查詢?nèi)罩?#xff0c;是MySQL提供的一種日志記錄,用來記錄在MySQL中響應(yīng)時間超過閥值的語句。具體環(huán)境中,運行時間超過long_query_time值的SQL語句,則會被記錄到慢查詢?nèi)罩局小ong_query_time的默認(rèn)值為10,意思是記錄運行10秒以上的語句。默認(rèn)情況下,MySQL數(shù)據(jù)庫并不啟動慢查詢?nèi)罩?#xff0c;需要手動來設(shè)置這個參數(shù)。
當(dāng)然,如果不是調(diào)優(yōu)需要的話,一般不建議啟動該參數(shù),因為開啟慢查詢?nèi)罩緯蚨嗷蛏賻硪欢ǖ男阅苡绊憽?/p>
此外,慢查詢?nèi)罩局С謱⑷罩居涗泴懭胛募蛿?shù)據(jù)庫表。
3. MySQL慢查詢的相關(guān)參數(shù)解釋:
l?? slow_query_log:是否開啟慢查詢?nèi)罩?#xff0c;1表示開啟,0表示關(guān)閉。
l?? log-slow-queries?:舊版(5.6以下版本)MySQL數(shù)據(jù)庫慢查詢?nèi)罩敬鎯β窂健?梢圆辉O(shè)置該參數(shù),系統(tǒng)則會默認(rèn)給一個缺省的文件host_name-slow.log
l?? slow-query-log-file:新版(5.6及以上版本)MySQL數(shù)據(jù)庫慢查詢?nèi)罩敬鎯β窂健?梢圆辉O(shè)置該參數(shù),系統(tǒng)則會默認(rèn)給一個缺省的文件host_name-slow.log
l?? long_query_time:慢查詢閾值,當(dāng)查詢時間多于設(shè)定的閾值時,記錄日志。
l?? log_queries_not_using_indexes:未使用索引的查詢也被記錄到慢查詢?nèi)罩局?可選項)。
l?? log_output:日志存儲方式。log_output='FILE'表示將日志存入文件,默認(rèn)值是'FILE'。log_output='TABLE'表示將日志存入數(shù)據(jù)庫。
那么如何進(jìn)行慢查詢?nèi)罩镜呐渲媚?#xff1f;默認(rèn)情況下slow_query_log的值為OFF,表示慢查詢?nèi)罩臼墙玫?#xff0c;可以通過設(shè)置slow_query_log的值來開啟,如下所示:
show variables? like?'%slow_query_log%';
+----------------------+-----------------------------------------------+
| Variable_name??|
Value????????????????????????????????????????????? |
+----------------------+-----------------------------------------------+
| slow_query_log | OFF
|
| slow_query_log_file | /home/WDPM/MysqlData/mysql/DB-Server-slow.log |
+----------------------+------------------------------------------------+
2
rows?in?set (0.00 sec)
使用set global slow_query_log=1開啟了慢查詢?nèi)罩局粚Ξ?dāng)前數(shù)據(jù)庫生效,MySQL重啟后則會失效。如果要永久生效,就必須修改配置文件my.cnf(其它系統(tǒng)變量也是如此)
set?global
slow_query_log=1;
my.cnf要增加或修改參數(shù)slow_query_log 和slow_query_log_file,如下所示:
slow_query_log =
1
slow_query_log_file = /tmp/mysql_slow.log
slow_query_log_file這個參數(shù)用于指定慢查詢?nèi)罩镜拇娣怕窂?#xff0c;缺省情況是host_name-slow.log文件。
show variables
like?'slow_query_log_file';
+---------------------+-----------------------------------------------+
|
Variable_name?????? |
Value
|
+---------------------+-----------------------------------------------+
| slow_query_log_file |
/home/WDPM/MysqlData/mysql/DB-Server-slow.log |
+---------------------+-----------------------------------------------+
1 row?in?set (0.00 sec)
開啟了慢查詢?nèi)罩竞?#xff0c;什么樣的SQL才會記錄到慢查詢?nèi)罩纠锩婺?#xff1f;這個是由參數(shù)long_query_time控制,默認(rèn)情況下long_query_time的值為10秒,可以使用命令修改,也可以在my.cnf參數(shù)里面修改。
關(guān)于運行時間正好等于long_query_time的情況,并不會被記錄下來;也就是說,在mysql源碼里是判斷大于long_query_time,而非大于等于。
從MySQL 5.1開始,long_query_time開始以微秒記錄SQL語句運行時間,之前僅用秒為單位記錄。如果記錄到表里面,只會記錄整數(shù)部分,不會記錄微秒部分
注意,某些情況下當(dāng)你使用局部設(shè)置的方式時可能會出現(xiàn)如下情況,來看下面:
show variables
like?'long_query_time%';
# 查看當(dāng)前l(fā)ong_query_time時間
+-----------------+-----------+
| Variable_name?? |
Value???? |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
set?global
long_query_time=4;
# 設(shè)置當(dāng)前l(fā)ong_query_time時間
show variables
like?'long_query_time';
# 再次查看long_query_time時間
如上所示,修改了變量long_query_time,但是查詢變量long_query_time的值還是10,難道沒有修改到呢?注意:使用命令 set global long_query_time=4修改后,需要重新連接或新開一個會話才能看到修改值。用show variables like 'long_query_time'查看只是當(dāng)前會話的變量值。也可以不用重新連接會話,而是用show global variables like 'long_query_time';。
log_output參數(shù)指定慢查詢?nèi)罩镜拇鎯Ψ绞?#xff1a;
l?? log_output='FILE'表示將日志存入文件,默認(rèn)值也是'FILE'。
l?? log_output='TABLE'表示將日志存入數(shù)據(jù)庫,這樣日志信息就會被寫入到mysql.slow_log表中。同時也支持兩種日志存儲方式,配置的時候以逗號隔開即可,如:log_output='FILE,TABLE'。
日志記錄到系統(tǒng)的專用日志表中,要比記錄到文件耗費更多的系統(tǒng)資源。因此對于需要啟用慢查詢?nèi)罩?#xff0c;又需要能夠獲得更高的系統(tǒng)性能,那么建議優(yōu)先記錄到文件。
show variables
like?'%log_output%';
+---------------+-------+
| Variable_name |
Value |
+---------------+-------+
|
log_output??? | FILE? |
+---------------+-------+
set?global
log_output='TABLE';
show variables
like?'%log_output%';
+---------------+-------+
| Variable_name |
Value |
+---------------+-------+
|
log_output??? | TABLE |
+---------------+-------+
select sleep(5) ;
+----------+
| sleep(5) |
+----------+
|
0 |
+----------+
當(dāng)我們在上面執(zhí)行了一次sleep5之后,這條操作將會被記錄在慢查詢?nèi)罩局?#xff0c;我們來看看:
mysql> select
* from mysql.slow_log;
+---------------------+---------------------------+------------+-----------+-----------+---------------+----+----------------+-----------+-----------+-----------------+-----------+
|
start_time????????? |
user_host
| query_time | lock_time | rows_sent | rows_examined | db | last_insert_id |
insert_id | server_id | sql_text??????? |
thread_id |
+---------------------+---------------------------+------------+-----------+-----------+---------------+----+----------------+-----------+-----------+-----------------+-----------+
| 2016-06-16 17:37:53 | root[root] @
localhost [] | 00:00:03?? | 00:00:00
|???????? 1
|???????????? 0
|
|
0 |???????? 0
|???????? 1 | select sleep(3)
|???????? 5 |
| 2016-06-16 21:45:23 | root[root] @
localhost [] | 00:00:05?? | 00:00:00
|???????? 1
|???????????? 0
|??? |
0 |???????? 0
|???????? 1 | select sleep(5)
|???????? 2 |
+---------------------+---------------------------+------------+-----------+-----------+---------------+----+----------------+-----------+-----------+-----------------+-----------+
總結(jié)
以上是生活随笔為你收集整理的mysql慢查询单位_MySQL慢查询的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mongodb存入mysql_关于mon
- 下一篇: mysql数据库优化韩顺平_韩顺平 My