• MySQL5.6 大量SQL语句处于Writing to net状态的案例分析


    【问题现象】

    开发同事反馈有应用在21:00-22:00之间出现大量超时报错。

     

    【问题分析】

    1、 从DB服务器慢查询指标来看,18:00后有大量的慢查询,累计产生了约9000条慢查询

     

    2、 测试直接执行慢查询SQL语句,并没有发现性能问题

     

    3、当时DBA同事在排障现场看到了线程执行时等待Writing to net。

    之前我们碰到过大量Writing to net等待的情况,通常是DB服务器网卡流量打满导致。但这次从DB服务器网卡流量上看,并没有打满,而且比较平稳。

    从QPS和threads_running指标来看,并发不是很高,相对平稳。

    4、 Writing to net状态究竟代表了什么

    Writing to net

    The server is writing a packet to the network.

    这里先简单描述下SQL语句查询的流程:

    <1>扫描一行,写到net_buffer,这里net buffer 是按照net_buffer_length 初始化, 但可以动态增长到max_allowed_packet配置值

    <2>继续获取满足条件的行,直到写满net_buffer,然后调用网络接口发送出去

    <3>客户端接收网络包完成,清空net_buffer

    <4>重复上面1到3的步骤

    <5>如果发送未完成,表示socket send buffer写满,这时会进入等待状态,显示Writing to net,直到socket send buffer重新可写,再继续发送

    下面是MySQL5.6.21的代码片段:

    static const char *thread_state_info(THD *tmp)

    {

    #ifndef EMBEDDED_LIBRARY

      if (tmp->net.reading_or_writing)

      {

        if (tmp->net.reading_or_writing == 2)

          return "Writing to net";

        else if (tmp->get_command() == COM_SLEEP)

          return "";

        else

          return "Reading from net";

      }

      else

    #endif

      {

        if (tmp->proc_info)

          return tmp->proc_info;

        else if (tmp->mysys_var && tmp->mysys_var->current_cond)

          return "Waiting on cond";

        else

          return NULL;

      }

    }

    由于MySQL是边扫描边发送数据的,当客户端接收慢时,就会阻塞整个查询进程,导致执行变慢。

    注意MySQL5.7.8以后,状态发生了变化

    Sending to client

    The server is writing a packet to the client. This state is called Writing to net prior to MySQL 5.7.8.

    5、 在网络通信的链路上,DB端网络没有问题,需要继续排查网络通信缓存区瓶颈,以及客户端的网络或处理。

    当时排障时,DBA尝试调整放大了max_allowed_packet参数,但是效果不明显。

    从应用服务器的网络指标,可以看出从中午12:35-00:00间,有大量套接字处于连接状态establish。与DB端的慢查询趋势基本一致。

    6、到这里基本可以定位问题是由于WEB客户端接收处理DB端发送的网络包比较慢,导致了SQL语句处于Writing to net状态,执行很慢。

    这里可能是WEB应用服务器异常,或WEB客户端或宿主机的网络问题。

    7、后面联系了相关同事,排查到这台WEB服务器对应的宿主机相关的交换机在这段时间有性能问题。

    数据库运维经验分享&MySQL源码学习漫漫路

  • 相关阅读:
    BZOJ3884 上帝与集合的正确用法 【欧拉定理】
    BZOJ4872 [六省联考2017]分手是祝愿 【期望dp】
    BZOJ4650 [NOI2016]优秀的拆分 【后缀数组】
    BZOJ1562 [NOI2009]变换序列 【KM算法】
    BZOJ2657 [Zjoi2012]旅游(journey) 【树的直径】
    BZOJ3999 [TJOI2015]旅游 【树剖 + 线段树】
    BZOJ3997 [TJOI2015]组合数学 【Dilworth定理】
    BZOJ4823 [Cqoi2017]老C的方块 【最小割】
    坐标系统
    利用键盘左右键使图像左右移动,上下键使图像的两个纹理可见度比例上下调整
  • 原文地址:https://www.cnblogs.com/wangdong/p/10538762.html
Copyright © 2020-2023  润新知