mysql慢查询日志分析工具(python写的)

D:\NormalSoftware>python mysql_filter_slow_log.py ./mysql1-slow.log --no-duplic
ates --sort-avg-query-time --top=100 >> mysql_slow_test05.txt

469行要改为:

query_time = (float(numbers[1].split()[0]), float(numbers[2].split()[0]),
float(numbers[3].split()[0]), float(numbers[4]))

 

150 151行注释掉:

#locale.setlocale(locale.LC_NUMERIC,
# os.name == 'nt' and 'en' or 'en_US.ISO8859-1')

mysql_filter_slow_log.py

 

使用方法:(这里只介绍python的使用方法)

python mysql_filter_slow_log.py  ./mysql1-slow.log --no-duplicates --sort-execution-count --top=10  >> mysql_slow_test.txt
备注:mysql1-slow.log  慢查询日志名称
 --no-duplicates
 --sort-execution-count
 --top=10  取前十位
 mysql_slow_test.txt  输出分析报告
 
附录:
 
官方给出的使用方法举例:
=====================================
 
?
1
2
3
4
5
6
7
8
9
# Filter slow queries executed for at least 3 seconds not from root, remove duplicates,
# apply execution count as first sorting value and save first 10 unique queries to file.
# In addition, remember last input file position and statistics.
php mysql_filter_slow_log.php -T= 3 -eu=root --no-duplicates --sort-execution-count --top= 10 --incremental linux-slow.log > mysql-slow-queries.log
# Start permanent filtering of all slow queries from now on: at least 3 seconds or examining 10000 rows, exclude users root and test
tail -f -n 0 linux-slow.log | python mysql_filter_slow_log.py -T= 3 -R= 10000 -eu=root -eu=test &
# (-n 0 outputs only lines generated after start of tail)
# Stop permanent filtering
kill `ps auxww | grep 'tail -f -n 0 linux-slow.log' | egrep -v grep | awk '{print $2}' `

 

====================================
官方给出的命令参数:
==================================
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
-T=min_query_time
-R=min_rows_examined
-ih, --include-host
-eh, --exclude-host
-iu, --include-user
-eu, --exclude-user
-iq, --include-query
--date=date_first-date_last Include only queries between date_first (and date_last).
                             Input:                    Date Range:
                             13.11 . 2006             -> 13.11 . 2006 - 14.11 . 2006 (exclusive)
                             13.11 . 2006 - 15.11 . 2006  -> 13.11 . 2006 - 16.11 . 2006 (exclusive)
                             15 - 11 - 2006 - 11 / 13 / 2006  -> 13.11 . 2006 - 16.11 . 2006 (exclusive)
                             > 13.11 . 2006            -> 14.11 . 2006 - later
                             13.11 . 2006 -            -> 13.11 . 2006 - later
                             < 13.11 . 2006            -> earlier    - 13.11 . 2006 (exclusive)
                             - 13.11 . 2006            -> earlier    - 14.11 . 2006 (exclusive)
                             Please do not forget to escape the greater or lesser than symbols (><, i.e. '--date=>13.11.2006' ).
                             Short dates are supported if you include a trailing separator (i.e. 13.11 .- 11 / 15 /).
--incremental Remember input file positions and optionally --no-duplicates statistics between executions in mysql_filter_slow_log.sqlite3
--no-duplicates Powerful option to output only unique query strings with additional statistics:
                 Execution count, first and last timestamp.
                 Query time: avg / max / sum.
                 Lock time: avg / max / sum.
                 Rows examined: avg / max / sum.
                 Rows sent: avg / max / sum.
--no-output Do not print statistics, just update database with incremental statistics
Default ordering of unique queries:
--sort-sum-query-time    [ 1 . position]
--sort-avg-query-time    [ 2 . position]
--sort-max-query-time    [ 3 . position]
--sort-sum-lock-time     [ 4 . position]
--sort-avg-lock-time     [ 5 . position]
--sort-max-lock-time     [ 6 . position]
--sort-sum-rows-examined [ 7 . position]
--sort-avg-rows-examined [ 8 . position]
--sort-max-rows-examined [ 9 . position]
--sort-execution-count   [ 10 . position]
--sort-sum-rows-sent     [ 11 . position]
--sort-avg-rows-sent     [ 12 . position]
--sort-max-rows-sent     [ 13 . position]
--sort=sum-query-time,avg-query-time,max-query-time,...   You can include multiple sorting values separated by commas.
--sort=sqt,aqt,mqt,slt,alt,mlt,sre,are,mre,ec,srs,ars,mrs Every long sorting option has an equivalent short form (first character of each word).
--top=max_unique_query_count Output maximal max_unique_query_count different unique queries
--details                    Enables output of timestamp based unique query time lines after user list
                              (i.e. # Query_time: 81  Lock_time: 0  Rows_sent: 884  Rows_examined: 2448350 ).
--help Output this message only and quit
[multiple] options can be passed more than once to set multiple values.
[position] options take the position of their first occurrence into account.
            The first passed option will replace the default first sorting, ...
            Remaining default ordering options will keep their relative positions.

 

====================================
官方给出的配置文件中管理慢日志参数的配置
====================================
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# I.e. you could add the following lines under the [mysqld] section of your my.ini or my.cnf configuration file:
# Log all queries taking more than 3 seconds
long_query_time= 3  # minimum: 1 , default : 10
# MySQL >= 5.1 . 21 (or patched): 3 seconds = 3000000 microseconds
# long_query_time= 3.000000  # minimum: 0.000001 ( 1 microsecond)
# Activate the Slow Query Log
slow_query_log  # >= 5.1 . 29
# log-slow-queries  # deprecated since 5.1 . 29
# Write to a custom file name (>= 5.1 . 29 )
# slow_query_log_file=file_name  # default : /data_dir/host_name-slow.log
# Log all queries without indexes
# log-queries-not-using-indexes
# Log only queries which examine at least N rows (>= 5.1 . 21 )
# min_examined_row_limit= 1000  # default : 0
# Log slow OPTIMIZE TABLE, ANALYZE TABLE, and ALTER TABLE statements
# log-slow-admin-statements
# Log slow queries executed by replication slaves (>= 5.1 . 21 )
# log-slow-slave-statements
# MySQL 5.1 . 6 through 5.1 . 20 had a default value of log-output=TABLE, so you should force
# Attention: logging to TABLE only includes whole seconds information
log-output=FILE
## Admin query for online activation is possible since MySQL 5.1 (without server restart)
## SET @ @global .slow_query_log= 1
## SET @ @global .long_query_time= 1
## Show current variables related to the Slow Query Log
## SHOW GLOBAL VARIABLES WHERE Variable_name REGEXP 'admin|min_examined|log_output|log_queries|log_slave|long|slow_quer'

 

======================================
 
注意:在执行脚本的时候会报数据类型的错误,具体错误指定469行,经过查看,实际慢查询日志中的query_time是float类型,而在这个脚本工具中定义的确实int类型。于是自行修改!
 
默认:
======================
 
query_time = (int(numbers[1].split()[0]), int(numbers[2].split()[0]),
              int(numbers[3].split()[0]), int(numbers[4]))
======================
 
修改为:
======================
 
query_time = (float(numbers[1].split()[0]), float(numbers[2].split()[0]),
              float(numbers[3].split()[0]), float(numbers[4]))

转载于:https://www.cnblogs.com/AmilyWilly/p/6645590.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值