博客
关于我
mysql 案例 ~ 分析执行完的大事务
阅读量:799 次
发布时间:2023-03-31

本文共 2614 字,大约阅读时间需要 8 分钟。

如何定位并执行大事务?

在数据库管理中,定位并执行大事务是开发和运维人员常需要进行的操作之一。通过分析binlog脚本,我们可以有效地追踪和处理这些大事务。以下将详细介绍如何实现这一目标。

目的

本文旨在通过分析MySQL的binary log(binlog)文件,揭示执行的大事务情况。我们将使用awk脚本来解析binlog文件,并提取关键信息以便定位大事务。

分析脚本

为了实现上述目标,我们将使用以下awk脚本来解析binlog文件:

mysqlbinlog --base64-output=decode-rows -vv --start-datetime="" --stop-datetime="" binlog | awk 'BEGIN {    xid="null";    s_type="";    stm="";    endtm="";    intsta=0;    inttal=0;    s_count=0;    count=0;    insert_count=0;    update_count=0;    delete_count=0;    flag=0;    bf=0;    period=0;}{    # 初始化变量    if (match($0, /^(BEGIN)/)) {        bg=1;    }    if (match($0, /#.*server id/)) {        if(bg==1){            statm=substr($1,2,6)" "$2;            cmd=sprintf("date -d \"%s\" +%%s", statm);            cmd|getline intsta;            close(cmd);            bg=0;            bf=1;        }        else if(bf==1){            endtm=substr($1,2,6)" "$2;            cmd=sprintf("date -d \"%s\" +%%s", endtm);            cmd|getline inttal;            close(cmd);        }    }    if(match($0, /#.*Table_map:.*mapped to number/)) {        printf "Timestamp : " $1 " " $2 " Table : " $(NF-4);        flag=1;    }    else if (match($0, /#.*Xid =.*/)) {        xid=$(NF);    }    else if (match($0, /(### INSERT INTO .*..*)/)) {        count=count+1;        insert_count=insert_count+1;        s_type="INSERT";        s_count=s_count+1;    }    else if (match($0, /(### UPDATE .*..*)/)) {        count=count+1;        update_count=update_count+1;        s_type="UPDATE";        s_count=s_count+1;    }    else if (match($0, /(### DELETE FROM .*..*)/)) {        count=count+1;        delete_count=delete_count+1;        s_type="DELETE";        s_count=s_count+1;    }    else if (match($0, /^(# at) /) && flag==1 && s_count>0) {        print " Query Type : " s_type " " s_count " row(s) affected";        s_type="";        s_count=0;    }    else if (match($0, /^(COMMIT)/)) {        period=inttal-intsta;        if(inttal==0){            period=0;        }        print "[Transaction total : " count " Insert(s) : " insert_count " Update(s) : " update_count " Delete(s) : " delete_count " Xid : " xid " period : " period "]\n+----------------------+----------------------+----------------------+----------------------+";        count=0;        insert_count=0;        update_count=0;        delete_count=0;        s_type="";        s_count=0;        flag=0;        bf=0;        bg=0;    }}'

分析结果

通过上述脚本,我们可以从binlog文件中提取以下信息:

  • 总事务数:6次
  • 插入操作:6次
  • 更新操作:0次
  • 删除操作:0次
  • Xid:216917361
  • 周期:0

这里的“周期”指的是每个事务的执行时间,通过对周期进行排序,我们可以轻松定位到执行时间较长的大事务。

通过以上方法,我们成功地定位并执行了大事务。这不仅有助于数据库的高效管理,还能帮助开发人员更好地理解和优化数据库性能。

转载地址:http://rpefk.baihongyu.com/

你可能感兴趣的文章
Oracle GoldenGate Director安装和配置(无图)
查看>>
oracle ogg 单实例双向复制搭建(oracle-oracle)--Oracle GoldenGate
查看>>
oracle scott趣事
查看>>
oracle script
查看>>
Oracle select表要带双引号的原因
查看>>
Oracle SOA Suit Adapter
查看>>
Oracle Spatial GeoRaster 金字塔栅格存储
查看>>
Oracle Spatial空间数据库建立
查看>>
UML— 活动图
查看>>
Oracle Statspack分析报告详解(一)
查看>>
oracle tirger_在Oracle中,临时表和全局临时表有什么区别?
查看>>
oracle where 条件的执行顺序分析1
查看>>
oracle 使用leading, use_nl, rownum调优
查看>>
oracle 修改字段类型方法
查看>>
oracle 内存参数示意图
查看>>
Oracle 写存储过程的一个模板还有一些基本的知识点
查看>>
Oracle 创建 DBLink 的方法
查看>>
oracle 创建双向备份,Materialized View 物化视图实现 Oracle 表双向同步
查看>>
oracle 创建字段自增长——两种实现方式汇总
查看>>
Oracle 升级10.2.0.5.4 OPatch 报错Patch 12419392 Optional component(s) missing 解决方法
查看>>