分享

慢日志分析

 茫茫V 2014-10-11

mysql 关于慢日志参数

| general_log                     | OFF                                   |  是否开启general_log
| general_log_file                | /var/run/mysqld/mysqld.log            |  general_log文件存哪里
| log_output                      | FILE                                  | 以什么方式输出Log
| log_slow_queries                | ON                                    | 是否指定日志文件名
| long_query_time                         | 10.000000                 默认10秒以上的都会记录为慢日志
| slow_query_log                  | ON                                    | 是否开启slow_log
| slow_query_log_file             | /home/mysqllog/mysqld-slow 慢日志文件的地址
分析线上执行慢的sql(开启slow_query_log时间短,之后要关闭,由于数据会比较大)
mysql> set global slow_query_log = 1;
Query OK, 0 rows affected (0.00 sec)

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

flush tables;

mysql> show global variables like'log_output';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_output    | FILE  |
+---------------+-------+
1 row in set (0.01 sec)

use vtweb_mddb;
mysql> select * from meta;
959840 rows in set (21.70 sec)
由于log_output 用FILE形式记录日志,所以我们在vim /home/mysqllog/mysqld-slow将会看到执行超过0秒的所有的sql

set global log_output =’TABLE‘;
mysql> SHOW GLOBAL VARIABLES LIKE 'log_output';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_output    | TABLE |
+---------------+-------+
1 row in set (0.00 sec)
如果log_output 用TABLE形式记录日志,mysql会以表的形式将slow_Log存入mysql表中的slow_log表中。
同理general_log  也是这样的道理


mysqldumpslow --verbose -s c -t 15 mysqld-slow  查询sql中执行最频繁的前15个sql
Count: 1(执行次数)  Time=2514.17s (2514s) (执行时间) Lock=0.00s (0s) (锁时间) Rows=0.0 (0)(返回多少行), root[root]@localhost (哪里连过来的)
  update daily_views_cnts0319 a,upgrade_metainfo b set upgrade_metainfo_id = b.vddb_meta_id  where b.id = a.tracking_meta_id

root@bingo:/home/mysqllog# mysqldumpslow --help
Usage: mysqldumpslow [ OPTS... ] [ LOGS... ]

Parse and summarize the MySQL slow query log. Options are

  --verbose    verbose
  --debug      debug
  --help       write this text to standard output

  -v           verbose
  -d           debug
  -s ORDER     what to sort by (al, at, ar, c, l, r, t), 'at' is default
                al: average lock time
                ar: average rows sent
                at: average query time
                 c: count
                 l: lock time
                 r: rows sent
                 t: query time 
  -r           reverse the sort order (largest last instead of first)
  -t NUM       just show the top n queries
  -a           don't abstract all numbers to N and strings to 'S'
  -n NUM       abstract numbers with at least n digits within names
  -g PATTERN   grep: only consider stmts that include this string
  -h HOSTNAME  hostname of db server for *-slow.log filename (can be wildcard),
               default is '*', i.e. match all
  -i NAME      name of server instance (if using mysql.server startup script)
  -l           don't subtract lock time from total time






PS:遇到问题解决

root@(none) 07:12:22>set global slow_query_log = 1;
ERROR 13 (HY000): Can't get stat of './mysql/slow_log.CSV' (Errcode: 2)

/mysqldata/mysql# touch slow_log.CSV
/mysqldata/mysql# chown -R mysql:mysql slow_log.CSV
mysqldata/mysql# chmod 660 slow_log.CSV


root@(none) 07:13:07>
root@(none) 07:15:49>set global slow_query_log = 1;
Query OK, 0 rows affected, 1 warning (0.17 sec)

root@(none) 07:23:02>show warnings;
+-------+------+--------------------------------------------------------------+
| Level | Code | Message                                                      |
+-------+------+--------------------------------------------------------------+
| Error | 1194 | Table 'slow_log' is marked as crashed and should be repaired |
+-------+------+--------------------------------------------------------------+
1 row in set (0.00 sec)

root@(none) 07:23:10>repair table mysql.slow_log;
+----------------+--------+----------+----------+
| Table          | Op     | Msg_type | Msg_text |
+----------------+--------+----------+----------+
| mysql.slow_log | repair | status   | OK       |
+----------------+--------+----------+----------+
1 row in set (0.61 sec)

root@(none) 07:23:43>set global slow_query_log = 1;
Query OK, 0 rows affected (0.00 sec)

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多