MySQL中如何啟用并分析慢查詢?nèi)罩?/h1>

MySQL中如何啟用并分析慢查詢?nèi)罩荆芏嘈率謱?duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。

站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到平果網(wǎng)站設(shè)計(jì)與平果網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類(lèi)型包括:成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、國(guó)際域名空間、網(wǎng)絡(luò)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋平果地區(qū)。

MySQL中如何啟用并分析慢查詢?nèi)罩?></p><p>Mysql有一項(xiàng)功能可以記錄長(zhǎng)時(shí)間查詢的慢記錄,具體是多長(zhǎng)時(shí)間可以自己配置,但是慢查詢也未必就是不良的SQL,也可能受其他查詢影響,或者是系統(tǒng)資源限制導(dǎo)致的,它也是我們常用的性能分析工具?!鞠嚓P(guān)推薦:mysql視頻教程】</p><p>MySQL的慢查詢?nèi)罩居?code>long_query_time</code>和<code>min_examined_row_limit</code>控制的,前者意思是如果查詢花費(fèi)的時(shí)間超過(guò)這么多秒,MySQL<a title=服務(wù)器就是在啟用慢查詢?nèi)罩镜那闆r下,將這條記錄到慢查詢?nèi)罩疚募小?/p>

啟用慢查詢?nèi)罩?/strong>

要在 MySQL 中啟用慢查詢?nèi)罩荆?qǐng)按照下列步驟操作:

首先看看MySQL中關(guān)于慢查詢的狀態(tài)。

MariaDB [(none)]> show variables like '%slow%';
+------------------------------+--------------------------------------------------------------------------------------------------------------------------------------+                                                                                           
| Variable_name                | Value                                                                                                                                |                                                                                           
+------------------------------+--------------------------------------------------------------------------------------------------------------------------------------+                                                                                           
| log_slow_admin_statements    | ON                                                                                                                                   |
| log_slow_disabled_statements | sp                                                                                                                                   |
| log_slow_filter              | admin,filesort,filesort_on_disk,filesort_priority_queue,full_join,full_scan,query_cache,query_cache_miss,tmp_table,tmp_table_on_disk |
| log_slow_rate_limit          | 1                                                                                                                                    |
| log_slow_slave_statements    | ON                                                                                                                                   |
| log_slow_verbosity           |                                                                                                                                      |
| slow_launch_time             | 2                                                                                                                                    |
| slow_query_log               | OFF                                                                                                                                  |
| slow_query_log_file          | hxl-slow.log                                                                                                                         |
+------------------------------+--------------------------------------------------------------------------------------------------------------------------------------+
9 rows in set (0.001 sec)

首先看slow_query_log的狀態(tài),他代表慢查詢?nèi)罩臼欠耖_(kāi)啟。該值可以是0或OFF表示禁用,1或ON表示啟用。日志輸出的目的地由log_output系統(tǒng)變量控制,如果該值為NONE,則即使啟用了慢查詢?nèi)罩?,也不?huì)寫(xiě)入到日志中,log_output變量的取值如下:

  • TABLE: (默認(rèn))向mysql.general_log表寫(xiě)入一般查詢,向表mysql.slow_log寫(xiě)入慢速查詢 。

  • FILE:將一般和慢速查詢?nèi)罩緦?xiě)入文件系統(tǒng)。

  • NONE – 禁用日志記錄。

還有general_log_fileslow_query_log_file 變量代表查詢?nèi)罩竞吐樵內(nèi)罩疚募拿Q(chēng)??梢栽诜?wù)器啟動(dòng)或運(yùn)行時(shí)設(shè)置這些變量。

啟動(dòng)慢查詢?nèi)罩?/strong>

MySQL中默認(rèn)關(guān)閉了慢查詢?nèi)罩竟δ?,因此要打開(kāi)此功能,我們需要將slow_query_log設(shè)置為ON,如下所示。

SET GLOBAL slow_query_log = 1;

設(shè)置記錄時(shí)長(zhǎng)

long_query_time變量表示只有運(yùn)行時(shí)間超過(guò)此值就會(huì)被記錄,如下所示,更改時(shí)間為5秒,他默認(rèn)為10秒,最小值為 0。

SET GLOBAL long_query_time = 5;

修改輸出位置

默認(rèn)情況下,慢查詢?nèi)罩疚募挥?/var/lib/mysql/hostname-slow.log,我們還可以使用slow_query_log_file變量設(shè)置另一個(gè)位置。

SET GLOBAL slow_query_log_file = '/var/log/mysql/mysql-slow.log';

將慢查詢?nèi)罩緦?xiě)入表

慢查詢?nèi)罩疽部梢员粚?xiě)入slow_log表中,方式就是上述中所說(shuō)修改log_output系統(tǒng)變量為TABLE,操作如下:

SET GLOBAL log_output='TABLE';

慢查詢?nèi)罩鞠嚓P(guān)的變量

  • slow_query_log - 啟用/禁用慢查詢?nèi)罩?/p>

  • log_output - 如何寫(xiě)入輸出

  • slow_query_log_file - 慢查詢?nèi)罩疚募拿Q(chēng)

  • long_query_time - 定義慢查詢的時(shí)間(以秒/微秒為單位)

  • log_queries_not_using_indexes - 是否記錄不使用索引的查詢

  • log_slow_admin_statements - 是否記錄某些管理語(yǔ)句

  • log_slow_disabled_statements - 不應(yīng)記錄在慢查詢?nèi)罩局械恼Z(yǔ)句類(lèi)型

  • min_examined_row_limit - 查詢必須檢查的最小行數(shù)才能變慢

  • log_slow_rate_limit - 允許記錄一部分慢查詢

  • log_slow_verbosity - 日志中的詳細(xì)信息量

  • log_slow_filter - 限制要記錄的查詢

分析慢查詢

日志記錄后,我們還需要分析這些日志,找出影響系統(tǒng)的查詢,MySQL提供了一個(gè)名為mysqldumpslow的工具,可以簡(jiǎn)單的顯示結(jié)果,只需要把日志路徑傳遞給他即可,如下:

# mysqldumpslow -a mysql-slow.log

Reading mysql slow query log from mysql-slow.log
Count: 1  Time=0.00s (0s)  Lock=0.00s (0s)  Rows_sent=21.0 (21), Rows_examined=21.0 (21), Rows_affected=0.0 (0), root[root]@localhost
  show databases

Count: 1  Time=0.00s (0s)  Lock=0.00s (0s)  Rows_sent=2.0 (2), Rows_examined=2.0 (2), Rows_affected=0.0 (0), root[root]@localhost
  select * from users

Count: 1  Time=0.00s (0s)  Lock=0.00s (0s)  Rows_sent=1.0 (1), Rows_examined=0.0 (0), Rows_affected=0.0 (0), root[root]@localhost
  select @@version_comment limit 1

Count: 1  Time=0.00s (0s)  Lock=0.00s (0s)  Rows_sent=1.0 (1), Rows_examined=0.0 (0), Rows_affected=0.0 (0), root[root]@localhost

他的參數(shù)如下

  • -s ,按照什么方式起來(lái)排序。默認(rèn)at,也就是按照平均查詢時(shí)間來(lái)排序。都是按照倒序排列。

    al: average lock time 平均鎖定時(shí)間

    ar: average rows sent 平均返回行數(shù)

    at: average query time 平均查詢時(shí)間

    c: count 總執(zhí)行次數(shù)

    l: lock time 總鎖定時(shí)間

    r: rows sent 總返回行數(shù)

    t: query time 總查詢時(shí)間

  • -t ,show the top n queries,顯示前多少名的記錄

  • -a ,默認(rèn)不開(kāi)啟這個(gè)選項(xiàng)。mysqldumpslow將相似的SQL的值(字符串或者數(shù)字)替換為N,開(kāi)啟該選項(xiàng),則顯示真實(shí)值。不開(kāi)啟該選項(xiàng),有點(diǎn)類(lèi)似于Oracle的綁定變量的記錄。\

  • -g ,類(lèi)似于grep命令,過(guò)濾出需要的信息。如,只查詢A表的慢查詢記錄。\

  • -l ,總時(shí)間中包含鎖定時(shí)間

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。

新聞標(biāo)題:MySQL中如何啟用并分析慢查詢?nèi)罩?/a>
鏈接URL:
http://bm7419.com/article16/igiddg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗(yàn)、虛擬主機(jī)、定制開(kāi)發(fā)、商城網(wǎng)站、靜態(tài)網(wǎng)站、

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)