ITPub博客

首页 > 数据库 > MySQL > MySQL的general_log和slow_log

MySQL的general_log和slow_log

原创 MySQL 作者:T1YSL 时间:2024-04-08 15:01:33 0 删除 编辑


use mysql

show tables;

show create table general_log;

CREATE TABLE `general_log` (

  `event_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

  `user_host` mediumtext NOT NULL,

  `thread_id` bigint(21) unsigned NOT NULL,

  `server_id` int(10) unsigned NOT NULL,

  `command_type` varchar(64) NOT NULL,

  `argument` mediumtext NOT NULL

) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='General log' |

从上面可以看见使用的是CSV引擎

 

show create table slow_log;

CREATE TABLE `slow_log` (

  `start_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

  `user_host` mediumtext NOT NULL,

  `query_time` time NOT NULL,

  `lock_time` time NOT NULL,

  `rows_sent` int(11) NOT NULL,

  `rows_examined` int(11) NOT NULL,

  `db` varchar(512) NOT NULL,

  `last_insert_id` int(11) NOT NULL,

  `insert_id` int(11) NOT NULL,

  `server_id` int(10) unsigned NOT NULL,

  `sql_text` mediumtext NOT NULL,

  `thread_id` bigint(21) unsigned NOT NULL

) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='Slow log' |

 

--修改引擎

在mysql数据库中绝大多数表都不能修改引擎,general_log和slow_log例外;

show engines;

 

mysql> alter table slow_log engine=myisam;

ERROR 1146 (42S02): Table 'mysql.sow_log' doesn't exist

 

mysql> show global variables like '%slow%';

+---------------------------+------------------------------------+

| Variable_name            | Value                             |

+---------------------------+------------------------------------+

| log_slow_admin_statements | OFF                               |

| log_slow_slave_statements | OFF                               |

| slow_launch_time         | 2                                 |

| slow_query_log           | ON                                |

| slow_query_log_file       | /home/data/3306/localhost-slow.log |

+---------------------------+------------------------------------+

5 rows in set (0.00 sec)

 

mysql> set global slow_query_log =0;

 

mysql> show global variables like '%slow%';

+---------------------------+------------------------------------+

| Variable_name            | Value                             |

+---------------------------+------------------------------------+

| log_slow_admin_statements | OFF                               |

| log_slow_slave_statements | OFF                               |

| slow_launch_time         | 2                                 |

| slow_query_log           | OFF                               |

| slow_query_log_file       | /home/data/3306/localhost-slow.log |

+---------------------------+------------------------------------+

5 rows in set (0.00 sec)

 

mysql> alter table slow_log engine=myisam;

 

mysql> set global slow_query_log =1;

 

显示日志文件位置

mysql> show global variables like '%log%';

+-----------------------------------------+------------------------------------+

| Variable_name                          | Value                             |

+-----------------------------------------+------------------------------------+

| general_log_file                       | /home/data/3306/localhost.log     |

| slow_query_log_file                    | /home/data/3306/localhost-slow.log |

+-----------------------------------------+------------------------------------+

61 rows in set (0.01 sec)

 

mysql> show variables like 'log_output';

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| log_output    | FILE  |

+---------------+-------+

1 row in set (0.00 sec)

 

--general log

set global general_log=0|1

set sql_log_off=0|1

 

mysql> show variables like 'genera%';

+------------------+-------------------------------+

| Variable_name   | Value                        |

+------------------+-------------------------------+

| general_log      | OFF                          |

| general_log_file | /home/data/3306/localhost.log |

+------------------+-------------------------------+

2 rows in set (0.01 sec)

 

--开启general log

mysql> set global general_log=1;

Query OK, 0 rows affected (0.05 sec)

 

mysql> show variables like 'genera%';

+------------------+-------------------------------+

| Variable_name   | Value                        |

+------------------+-------------------------------+

| general_log      | ON                           |

| general_log_file | /home/data/3306/localhost.log |

+------------------+-------------------------------+

 

--让general log记录到表中

show variables like 'general%';

show variables like '%log_output%';

set global general_log=0;

set global log_output='table';

show variables like '%log_output%';

set global general_log=1;

show variables like 'general%';

 

 

开启slow log

slow_query_log={0|1}

slow_query_log_file #slow log名字

long_query_time #超过多少秒记录,支持微妙,如果=0,则所有语句都记录

如下情况不记录

1) 管理命令不计

2) 没有用索引不计

3) 从库上执行的语句

 

例:

show global variables like 'slow%';

+---------------------+--------------------------------+

| Variable_name       | Value                         |

+---------------------+--------------------------------+

| slow_launch_time   | 2                             |

| slow_query_log      | ON                            |

| slow_query_log_file | /home/data/3306/mysql-slow.log |

+---------------------+--------------------------------+

 

show global variables like 'long_query%';

+-----------------+-----------+

| Variable_name   | Value     |

+-----------------+-----------+

| long_query_time | 10.000000 |

+-----------------+-----------+

 

show global variables like 'log_output%'; 或 select @@global.log_output;

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| log_output    | FILE  |

+---------------+-------+

 

set global log_output='table';

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| log_output    | TABLE |

+---------------+-------+

 

use mysql;

select * from slow_log;

mysql> show create table slow_log\G

*************************** 1. row ***************************

      Table: slow_log

Create Table: CREATE TABLE `slow_log` (

  `start_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

  `user_host` mediumtext NOT NULL,

  `query_time` time NOT NULL,

  `lock_time` time NOT NULL,

  `rows_sent` int(11) NOT NULL,

  `rows_examined` int(11) NOT NULL,

  `db` varchar(512) NOT NULL,

  `last_insert_id` int(11) NOT NULL,

  `insert_id` int(11) NOT NULL,

  `server_id` int(10) unsigned NOT NULL,

  `sql_text` mediumtext NOT NULL,

  `thread_id` bigint(21) unsigned NOT NULL

) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Slow log'

1 row in set (0.01 sec)

 

set global log_output='file';


# mysqldumpslow 分析slow log


参数解释  

-s, 是表示按照何种方式排序  

c: 访问计数 

  l: 锁定时间  

r: 返回记录  

t: 查询时间  

al:平均锁定时间  

ar:平均返回记录数  

at:平均查询时间 

  -t, 是top n的意思,即为返回前面多少条的数据;  

-g, 后边可以写一个正则匹配模式,大小写不敏感的; 

 
  基本用法  
  例:  

得到返回记录集最多的10个SQL。 

  mysqldumpslow -s r -t 10 /database/mysql/mysql06_slow.log  


  得到访问次数最多的10个SQL 

  mysqldumpslow -s c -t 10 /database/mysql/mysql06_slow.log  


  得到按照时间排序的前10条里面含有左连接的查询语句。  

mysqldumpslow -s t -t 10 -g “left join” /database/mysql/mysql06_slow.log  


  另外建议在使用这些命令时结合 | 和more 使用 ,否则有可能出现刷屏的情况。 

  mysqldumpslow -s r -t 20 /mysqldata/mysql/mysql06-slow.log | more  
 
 


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69990629/viewspace-3011809/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
中国开源软件推进联盟PG分会系列技术丛书《快速掌握PostgreSQL版本新特性》一书副主编。数据库技术专家。数据库认证讲师、恩墨学院数据库讲师。擅长MySQL数据库、PostgreSQL等开源数据库。拥有MySQL-OCP 、PostgreSQL-PGCM等数据库认证。

注册时间:2020-12-12

  • 博文量
    152
  • 访问量
    160761