zoukankan      html  css  js  c++  java
  • aws mysql 开启慢查询日志, 并利用mysqlsla 分析

    1.开启慢查询日志服务

      (a) sql 查询配置

    # 查看慢日志是否开启,开启为ON
    show variables like 'slow_query%';
    show variables like 'long_query_time';
    
    # 设置全局,查询时间超过1s的日志记录下来
    set global slow_query_log='ON';
    set global long_query_time=1;
    
    # 如果使用慢日志输出为table, mysql.slow_log表中sql_text 为blob格式,查看时需要转化
    SELECT CONVERT(sql_text using utf8) sql_text from mysql.slow_log;

      (b) aws 控制台配置

      RDS服务>参数组 更改的参数组更改如下参数:

    - slow_query_log:要创建慢速查询日志,请设置为 1。默认值为 0- general_log:要创建一般日志,请设置为 1。默认值为 0- long_query_time:只记录查询时间超过制定时间的sql,单位毫秒.
    - log_queries_not_using_indexes:要将所有不使用索引的查询记录到慢速查询日志,请设置为 1。默认值为 0。即使查询的执行时间小于 long_query_time 参数值,只要它们不使用索引,就会被系统记录。
    - log_output:您可为 log_output 参数指定下列选项之一。
        TABLE (默认) – 将慢速查询写入 mysql.slow_log 表。
        FILE  (推荐) – 查询日志写入文件系统。日志文件每小时轮换一次。并删除 24 小时之前的日志文件。
        NONE– 禁用日志记录。

    2. 利用aws-cli工具,将aws-mysql慢日志导出到本地服务器查看

    1. aws-cli 指令
    aws k    # 获取aws的所有的命令功能, 例如:ec2 对应的是ec2的服务,s3对应s3服务等
    aws rds k  # 查看rds的所有功能
    aws rds describe-db-log-files help # 查看日志文件命令如何使用

    2. 指令携带参数
    describe-db-log-files #查看数据库日志
    --region ap-southeast-1 #mysql所在时区
    --db-instance-identifier duofen #要导出日志的数据库名称, 我这里是duofen
    --no-paginate #不分页
    --filename-contains slowquery # 日志名称过滤, 这里只查询名字里带slowquery的慢日志
    --output text # 输出格式为文本
    --log-file-name slowquery/mysql-slowquery.log # 具体某一个日志名称

    3. 查看mysql系统日志
    aws rds describe-db-log-files --no-paginate --db-instance-identifier duofen --filename-contains slowquery --output text

    4.将日志文件导出到指定文件
    aws rds --region ap-southeast-1 download-db-log-file-portion --db-instance-identifier duofen --no-paginate --log-file-name slowquery/mysql-slowquery.log --output text > slowquery.$(date +%Y%m%d%H).txt;

      脚本批量拉取慢查询日志(aws rds 只保存24小时以内日志,共有24个日志) 

    #!/bin/bash
    # 获取慢日志列表
    filename=`aws rds describe-db-log-files --db-instance-identifier duofen | grep LogFileName | awk -F"/" '{print $2}' | tr -d '",' | grep 'slowquery'`
    
    # 创建存放路径
    fileDir=/data/mysqlLog/$(date +%Y%m%d)
    if [ ! -d fileDir  ];then
      mkdir -p $    fileDir
    fi
    
    # 循环下载到本地/data/mysqlLog文件夹下
    for f in $filename
    do
        echo "$f"
        aws rds download-db-log-file-portion --db-instance-identifier duofen --log-file-name slowquery/$f --starting-token 0 --output text > $fileDir/$f 
    done
        
    # 将日志合并到slowqueryresult.txt文件
    cat $fileDir/mysql-slowquery.* > /data/mysqlLog/slowqueryresult.$(date +%Y%m%d).txt

    3.mysql慢日志分析工具mysqlsla 安装

    # 安装依赖包
    yum install  -y wget  perl  perl-DBI  perl-DBD-MySQL  mysql  perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker 
    
    # 源码安装mysqlsla
    
    cd /usr/local/software
    wget http://hackmysql.com/scripts/mysqlsla-2.03.tar.gz
    tar -xvf mysqlsla-2.03.tar.gz
    cd  mysqlsla-2.03
    
    # 配置并编译 perl Makefile.PL make make install # 将
    /usr/local/bin 放到系统变量PATH vim /etc/profile export PATH=/usr/local/bin:$PATH
    /etc/profile

    # 查看是否安装成功,不提示(-bash: mysqlsla: command not found),就是成功的
    mysqlsla -version

    4.mysqlsla 指令分析日志

    1. 查询参数说明:

    -lt    # log的类型为slow, 主要有slow,general,binary,msl,udl

    -sort  # 结果进行排序,默认是按照t_sum来进行排序的

    -top   # 显示sql的数量,默认是10,表示去按照规则排序的前多少条

    -sf    # 过滤sql语句的类型,比如select,update,drop 例如"+SELECT,INSERT",

    --databases # 要处理哪个库的日志


    2. 统计参数说明

    1.queries total: # 总查询次数

    2.unique:     # 去重后的sql数量

    3.sorted by:   # 输出报表的内容排序 最重大的慢sql统计信息, 包括 平均执行时间, 等待锁时间, 结果行的总数, 扫描的行总数.

    4.Count:      # sql的执行次数及占总的slow log数量的百分比.

    5.Time:       # 执行时间, 包括总时间, 平均时间, 最小, 最大时间, 时间占到总慢sql时间的百分比.

    6.95% of Time:  # 去除最快和最慢的sql, 覆盖率占95%的sql的执行时间.

    7.Lock Time:    # 等待锁的时间.

    8.95% of Lock:   # 95%的慢sql等待锁时间.

    9.Rows sent:     # 结果行统计数量, 包括平均, 最小, 最大数量.

    10.Rows examined:  # 扫描的行数量.

    11.Database:     # 属于哪个数据库.

    12.Users:       # 哪个用户,IP, 占到所有用户执行的sql百分比.

    13.Query abstract: # 抽象后的sql语句.

    14.Query sample:   # sql语句

    3. 使用范例

    # 查询记录最多的10条,可以指定具体的数据库 
    mysqlsla -lt slow -sort t_sum -sf "+select,update,INSERT" -db duofen -top 10 /data/mysqlLog/slowqueryresult.20190508.txt
    
    # 统计慢查询执行时间最长的20条sql,并写到longsql.log中
    mysqlsla -lt slow -sf "+select" -top 20 /data/mysqlLog/slowqueryresult.20190508.txt > /data/mysqlLog/longsql.log
  • 相关阅读:
    【西北师大-19软工】第十次作业成绩汇总
    第十七周博客作业<西北师范大学|李晓婷>
    第十六周博客作业<西北师范大学|李晓婷>
    第十五周博客作业<西北师范大学|李晓婷>
    第十四周博客作业<西北师范大学|李晓婷>
    第十二周博客作业<西北师范大学|李晓婷>
    第十一周博客作业<西北师范大学|李晓婷>
    【西北师大-19软工】第六次作业成绩汇总
    第九周博客作业<西北师范大学|李晓婷>
    第八周博客作业<西北师范大学|李晓婷>
  • 原文地址:https://www.cnblogs.com/hcl1991/p/10826339.html
Copyright © 2011-2022 走看看