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
    
  • 相关阅读:
    java内存区域
    [POJ] John‘s trip | 欧拉回路 | 边序列字典序最小 + 建图
    [POJ | Nowcoder] Watchcow | 欧拉回路 点路径输出
    [UPC | 山东省赛] The Largest SCC | Tarjan强连通分量瞎搞 + 状态还原
    [Luogu] 炸铁路 | Tarjan 割边
    [HDU 4738] Caocao‘s Bridges | Tarjan 求割边
    [Codeforces 1586] Omkar and Determination | 思维前缀和
    [UVA 1599] Ideal Path | 细节最短路
    [North Central NA Contest 2018] Rational Ratio | 规律 细节模拟
    [HDU 7136] Jumping Monkey | 并查集 | 逆向思维
  • 原文地址:https://www.cnblogs.com/lx823706/p/11413518.html
Copyright © 2011-2022 走看看