MySQL中普通、慢查詢?nèi)罩镜膮^(qū)別

<br>

Intro

<br>

<br>

之前的一篇分享提到,mysql的日志類型可以分為三種,錯誤日志(error_log),查詢?nèi)罩?query_log),和二進制日志(binary_log),error_log的介紹與用法詳見mysql日志之error_log,本文主要介紹general_log和slow_query_log的原理和用法。

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

通用查詢?nèi)罩?general_log)主要用于查詢各client連接數(shù)據(jù)庫時的相關信息與在數(shù)據(jù)庫上執(zhí)行的SQL語句,配置方法為:

1、查詢通用查詢?nèi)罩臼欠耖_啟與其存放路徑:

mysql&gt;?show?variables?like?"general_log%";  +------------------+------------------------------+|?Variable_name????|?Value????????????????????????|  +------------------+------------------------------+|?general_log??????|?OFF???????????????????????????|  |?general_log_file?|?/var/lib/mysql/localhost.log?|  +------------------+------------------------------+  2?rows?in?set?(0.00?sec)

屏幕輸出中general_log和general_log_file記錄了當前通用查詢?nèi)罩镜拈_關狀態(tài)與路徑。

2、開啟通用查詢?nèi)罩?/strong>

????set?global?general_log?=?ON

查詢是否成功:

mysql&gt;?show?variables?like?"general_log%";  +------------------+------------------------------+|?Variable_name????|?Value????????????????????????|  +------------------+------------------------------+|?general_log??????|?ON???????????????????????????|  |?general_log_file?|?/var/lib/mysql/localhost.log?|  +------------------+------------------------------+  2?rows?in?set?(0.00?sec)

成功。

退出一下看有沒有生成并且正確記錄:

[root@localhost?~]#?cat?/var/lib/mysql/localhost.log  /usr/sbin/mysqld,?Version:?5.7.19?(MySQL?Community?Server?(GPL)).?started?with:  Tcp?port:?3306??Unix?socket:?/var/lib/mysql/mysql.sock  Time?????????????????Id?Command????Argument  2017-08-14T09:33:11.364650Z?????5?Quit??  2017-08-14T09:33:20.671113Z?????6?Connect???root@localhost?on??using?Socket  2017-08-14T09:33:20.671323Z?????6?Query?select?@@version_comment?limit?1  2017-08-14T09:33:22.964610Z?????6?Query?show?variables?like?'%log%'  2017-08-14T09:33:24.574224Z?????6?Quit

成功,并且我們可以看到,log不僅記錄了SQL命令,同時也包括了執(zhí)行時間、Id、命令類型等相關數(shù)據(jù)

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

慢查詢?nèi)罩居涗浟薙QL語句時間超過了預設的long_query_time的語句,在數(shù)據(jù)量較大的情況下,可以看看慢查詢?nèi)罩局杏心男┱Z句需要進行優(yōu)化。

1、慢查詢?nèi)罩镜呐渲?/strong>

慢查詢?nèi)罩镜呐渲每梢栽跀?shù)據(jù)庫配置文件my.cnf中查到:

[root@localhost?~]#?cat?/etc/my.cnf?|?grep?-E?'long|slow|not_using_indexes'long_query_time?=?1#log-slow-queries?=?/var/log/mysql/slow.loglog_queries_not_using_indexes

可以看到:

long_query_time = 1的意思是SQL語句執(zhí)行時間超過1s的,對其進行記錄; <br>log-slow-queries = /var/log/mysql/slow.log是對慢查詢?nèi)罩韭窂降脑O置; <br>log_queries_not_using_indexes意思為不使用索引的語句,可以縮小記錄的目標

實際配置與通用查詢?nèi)罩鞠嗤趍ysql交互界面中輸入命令開啟慢查詢?nèi)罩荆?/p>

????set?slow_query_log?=?ON

2、查詢是否成功

[root@localhost?~]#?cat?/var/lib/mysql/localhost-slow.log  /usr/sbin/mysqld,?Version:?5.7.19?(MySQL?Community?Server?(GPL)).?started?with:  Tcp?port:?3306??Unix?socket:?/var/lib/mysql/mysql.sock  Time?????????????????Id?Command????Argument

成功。

但注意,slow_query_log可能會記錄到與用戶權限和密碼相關的語句,因此在使用慢查詢?nèi)罩疚募r請注意日志的安全保存。

? 版權聲明
THE END
喜歡就支持一下吧
點贊5 分享