zoukankan      html  css  js  c++  java
  • mysql性能分析与故障分析

    性能指标以及分析点:QPS,磁盘IO,cpu以及内存使用状况,连接数,慢查询,阻塞和锁等

    qps的统计方法

    ##使用方式 ,bash dba_qps.sh port(实例端口号)
    ## 脚本名  dba_qps.sh
    ##脚本内容如下:
    
    
    
    #!/bin/bash
    /data/app/mysql/bin/mysqladmin -u root -p -S /data/mysql_data/node-$1/mysqld.sock extended-status -i1|awk 'BEGIN{local_switch=0;print "QPS   Commit Rollback   TPS    Threads_con Threads_run 
    ------------------------------------------------------- "}
         $2 ~ /Queries$/            {q=$4-lq;lq=$4;}
         $2 ~ /Com_commit$/         {c=$4-lc;lc=$4;}
         $2 ~ /Com_rollback$/       {r=$4-lr;lr=$4;}
         $2 ~ /Threads_connected$/  {tc=$4;}
         $2 ~ /Threads_running$/    {tr=$4;
            if(local_switch==0) 
                    {local_switch=1; count=0}
            else {
                    if(count>10) 
                            {count=0;print "------------------------------------------------------- 
    QPS   Commit Rollback   TPS    Threads_con Threads_run 
    ------------------------------------------------------- ";}
                    else{ 
                            count+=1;
                            printf "%-6d %-8d %-7d %-8d %-10d %d 
    ", q,c,r,c+r,tc,tr;
                    }
            }
    }'
    

    查看磁盘io情况

    ###iostat 不支持 需要手动安装 yum install sysstat


    iostat -x 1 10

    着重观察 %util列的情况 mysql@H5_PUBLIC_MONGODB:-0-$ iostat -x 1 10 Linux 2.6.32-431.el6.x86_64 (H5_PUBLIC_MONGODB) 08/26/2019 _x86_64_ (12 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 4.53 0.00 1.89 3.47 0.00 90.11 Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await r_await w_await svctm %util sda 0.42 893.25 9.13 108.94 640.04 8638.20 78.59 0.07 0.57 0.38 0.59 0.59 6.92 scd0 0.00 0.00 0.00 0.00 0.00 0.00 8.00 0.00 251.33 251.33 0.00 251.33 0.00 avg-cpu: %user %nice %system %iowait %steal %idle 24.73 0.00 4.43 8.44 0.00 62.41 Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await r_await w_await svctm %util sda 21.00 139.00 7.00 363.00 232.00 15968.00 43.78 11.38 31.38 5.29 31.89 2.69 99.60 scd0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 avg-cpu: %user %nice %system %iowait %steal %idle 17.22 0.00 0.42 1.92 0.00 80.43 Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await r_await w_await svctm %util sda 0.00 138.00 1.00 111.00 32.00 6192.00 55.57 2.07 18.62 7.00 18.73 2.70 30.20 scd0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 avg-cpu: %user %nice %system %iowait %steal %idle 17.60 0.00 0.50 1.83 0.00 80.07 Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await r_await w_await svctm %util sda 0.00 88.00 1.00 75.00 24.00 4040.00 53.47 1.45 19.04 9.00 19.17 3.42 26.00 scd0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

    mysql改善高并发的情况下执行读写效率:

    一:提高读写并发(cpu多核的使用率)
    innodb_write_io_threads =8
    innodb_read_io_threads =8
    根据对实例的读写需求来定(跟cpu核数有关),只读配置 只能修改配置文件重启才能生效
    cat /proc/cpuinfo| grep "cpu cores"| uniq
    
    二:影响io性能的参数
    innodb_flush_log_at_trx_commit和sync_binlog 两个参数是控制MySQL 磁盘写入策略以及数据安全性的关键参数,当两个参数都设置为1的时候写入性能最差,
    推荐做法是innodb_flush_log_at_trx_commit=2,sync_binlog=500 或1000
    
    1)、
    sync_binlog =n
    当每进行n次事务提交之后,MySQL将进行一次fsync之类的磁盘同步指令来将binlog_cache中的数据强制写入磁盘。
    在MySQL中系统默认的设置是sync_binlog=0,也就是不做任何强制性的磁盘刷新指令,这时候的性能是最好的,但是风险也是最大的。因为一旦系统Crash,在binlog_cache中的所有binlog信息都会被丢失。
    而当设置为“1”的时候,是最安全但是性能损耗最大的设置。因为当设置为1的时候,即使系统Crash,也最多丢失binlog_cache中未完成的一个事务,对实际数据没有任何实质性影响。
    从以往经验和相关测试来看,对于高并发事务的系统来说,“sync_binlog”设置为0和设置为1的系统写入性能差距可能高达5倍甚至更多。
    
    2)、
    innodb_flush_log_at_trx_commit =n
    0:log buffer将每秒一次地写入log file中,并且log file的flush(刷到磁盘)操作同时进行。该模式下在事务提交的时候,不会主动触发写入磁盘的操作。
    该模式速度最快,但不太安全,mysqld进程的崩溃会导致上一秒钟所有事务数据的丢失
    
    1:每次事务提交时MySQL都会把log buffer的数据写入log file,并且flush(刷到磁盘)中去,该模式为系统默认。
    该模式是最安全的,但也是最慢的一种方式。在mysqld 服务崩溃或者服务器主机crash的情况下,binary log 只有可能丢失最多一个语句或者一个事务
    
    2:每次事务提交时MySQL都会把log buffer的数据写入log file,但是flush(刷到磁盘)操作并不会同时进行。该模式下,MySQL会每秒执行一次 flush(刷到磁盘)操作。
    该模式速度较快,也比0安全,只有在操作系统崩溃或者系统断电的情况下,上一秒钟所有事务数据才可能丢失
    



    分析mysql数据库的运行情况:

    查看 profile 开启情况
    select @@profiling;
    0 表示关闭状态,1 表示开启
    
    启用 profile
    set profiling = 1;
    
    开始执行具体的sql
    。。。。。。
    
    查看执行的 SQL 列表
    show profiles;
    
    查询指定 ID 的执行详细信息
    show profile for query Query_ID;
    
    获取 CPU、 Block IO 等信息
    show profile block io,cpu for query Query_ID;
    show profile cpu,block io,memory,swaps,context switches,source for query Query_ID;
    show profile all for query Query_ID;
    
    
    开启general_log,查看一段时间内的数据库所有操作
    
    set global general_log='ON';
    set global general_log='OFF';
    
    
    
    分析binlog日志,查看指定binlog中的操作内容
     /data/app/mysql/bin/mysqlbinlog --no-defaults -v -v --base64-output=DECODE-ROWS  mysql-bin.001950 >03.txt
     
     
    


     
     
     
     查看mysql锁的信息

    1:查看当前的事务
    SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX;
    
    2:查看当前锁定的事务
    
    SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;
    
    3:查看当前等待锁的事务
    SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;
    
    
    查询是否锁表
    show OPEN TABLES where In_use > 0;
    
    查看下在锁的事务
    SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX;
    
    
    
    查询进程
    show full processlist
    
    杀死死锁的进程id(就是上面命令的id列)
    kill id
    
  • 相关阅读:
    CSS盒子模型
    getContextPath、getServletPath、getRequestURI、request.getRealPath的区别
    MYSQL中的CASE WHEN END AS
    单点登录的精华总结
    git&github
    June 21st 2017 Week 25th Wednesday
    June 20th 2017 Week 25th Tuesday
    June 19th 2017 Week 25th Monday
    June 18th 2017 Week 25th Sunday
    June 17th 2017 Week 24th Saturday
  • 原文地址:https://www.cnblogs.com/lx823706/p/11413518.html
Copyright © 2011-2022 走看看