Mysql 慢查询日志

慢查询日志

MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。

long_query_time的默认值为10,意思是运行10S以上的语句。该值可以指定为微秒的分辨率。对于记录到文件,写入包括微秒部分的时间。对于记录到表,只写入整数倍; 微秒部分被忽略。

默认情况下,不记录管理语句,也不记录不使用索引进行查找的查询

默认情况下,Mysql数据库并不启动慢查询日志,需要我们手动来设置这个参数,当然,如果不是调优需要的话,一般不建议启动该参数,因为开启慢查询日志会或多或少带来一定的性能影响。

慢查询日志支持将日志记录写入文件,也支持将日志记录写入数据库表。

写入慢查询日志的语句中的密码将由服务器重写,而不是以纯文本形式发生。

常用语 SQL 语句的优化,运维人员的工作:

  1. 配置数据库开启 慢日志功能

  2. 配置慢日志的相关参数,比如存放慢日志的具体位置,还有设置规定的时间

  3. 检查慢日志文件,假如有,把语句和相关信息给到开发人员。

配置参数详解

是否开启慢日志

属性
命令行格式 --slow-query-log
系统变量 slow_query_log
范围 全局
动态
类型 布尔
默认值 OFF

设置slow_query_log为0(或OFF)以禁用日志或设置为1(或 ON)以启用它

定义超时时间

long_query_time

属性
命令行格式 --long-query-time=#
系统变量 long_query_time
范围 全球
动态
类型 数字
默认值 10
最低价值 0

如果查询花费的时间超过此秒数,则服务器会递增Slow_queries 状态变量。如果启用了慢查询日志,则查询将记录到慢查询日志文件中。

设置慢日志文件名称

属性
命令行格式 --slow-query-log-file=file_name
系统变量 slow_query_log_file
范围 全球
动态
类型 文件名
默认值 host_name-slow.log

如果没有为慢查询日志文件指定任何名称,则默认名称为 host_name-slow.log。除非给出绝对路径名以指定其他目录,否则服务器将在数据目录中创建该文件。

系统变量 log-queries-not-using-indexes:未使用索引的查询也被记录到慢查询日志中(可选项)。如果调优的话,建议开启这个选项。另外,开启了这个参数,其实使用full index scan的sql也会被记录到慢查询日志。

系统变量 log_slow_admin_statements 表示是否将慢管理语句例如 ANALYZE TABLEALTER TABLE 等记入慢查询日志

Mysql 中查看慢查询的信息

mysql> show variables like 'slow_query%';
+---------------------+---------------------------------------+
| Variable_name       | Value                                 |
+---------------------+---------------------------------------+
| slow_query_log      | OFF                                   |
| slow_query_log_file | /var/lib/mysql/mysql-master1-slow.log |
+---------------------+---------------------------------------+
2 rows in set (0.00 sec)
mysql> show variables like 'long_query_time%';
+-----------------+-----------+
| Variable_name   | Value     |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set (0.00 sec

Mysql 中设置并查询慢日志设置的是否有效

适用于不允许重启服务器的情况

mysql> set global long_query_time=0;
Query OK, 0 rows affected (0.00 sec)

查询当前会话的慢日志时间阈值

mysql> show variables like 'long_query_time%';
+-----------------+-----------+
| Variable_name   | Value     |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set (0.01 sec)

查询全局的时间阈值

mysql> show global variables like 'long_query_time%';
+-----------------+----------+
| Variable_name   | Value    |
+-----------------+----------+
| long_query_time | 0.000000 |
+-----------------+----------+
1 row in set (0.00 sec)

查询截至目前已经产生了多少条慢查询记录。

mysql> show global status like '%Slow_queries%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Slow_queries  | 0     |
+---------------+-------+
1 row in set (0.01 sec)

通过配置文件方式配置慢查询日志

需要重启服务器

// my.cnf 
[mysqld]
# 开启慢查询日志
slow_query_log=1

# 设置阈值 `0.01` 秒
long_query_time=0.01

log_queries_not_using_indexes=ON
slow_query_log_file="/var/log/mysql/mysql_slow.log"

创建对应的目录并授权

shell> mkdir /var/log/mysql
shell> chown mysql.mysql /var/log/mysql

处理慢日志的大小

刷新日志时,服务器会创建新的二进制日志文件。但是,它只是关闭并重新打开常规和慢速查询日志文件。

日志刷新操作具有以下效果:

  • 如果启用了二进制日志记录,则服务器将关闭当前的二进制日志文件,并使用下一个序列号打开一个新的日志文件。

  • 如果启用了常规查询日志记录或慢速查询日志记录到日志文件,则服务器将关闭并重新打开日志文件。

  • 如果服务器启动时带有将 --log-error错误日志写入文件的选项,则服务器将关闭并重新打开日志文件。

执行日志刷新语句或命令需要使用具有RELOAD特权的帐户连接到服务器 。

1 方式一:

要在服务器上创建新文件,请在刷新之前重命名当前日志文件。

shell> cd mysql-data-directory
shell> mv mysql.log mysql.old
shell> mv mysql-slow.log mysql-slow.old
shell> mysqladmin flush-logs

2 方式二

假如有些情况下服务器不允许重新启动,但是有
此情况下又需要对日志重新命名,以便继续备份或者日志切割。

那就可以使用如下方案

先禁用日志功能

mysql> SET GLOBAL general_log = 'OFF';
mysql> SET GLOBAL slow_query_log = 'OFF';

禁用日志后,在外部重命名日志文件; 例如,从命令行。

然后再次启用日志,并刷新日志:

mysql> SET GLOBAL general_log = 'ON';
mysql> SET GLOBAL slow_query_log = 'ON';
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,651评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,468评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,931评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,218评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,234评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,198评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,084评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,926评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,341评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,563评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,731评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,430评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,036评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,676评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,829评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,743评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,629评论 2 354

推荐阅读更多精彩内容

  • Mysql 慢查询日志 慢查询日志 MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中...
    花泽菠菜xqc阅读 117评论 0 0
  • 慢查询日志 MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,...
    痕迹xxxyyyyyyY阅读 173评论 0 1
  • 慢查询日志 MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,...
    红衣漫漫阅读 385评论 0 0
  • 慢查询日志 MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,...
    Lengfin阅读 400评论 0 3
  • 所思在远道,绵绵不绝期。花花自潇洒,叶叶徒飘零。无意来涂画,有情且赋诗。秋风吹不尽,总是别离心。
    雨如花飞阅读 595评论 6 11