【问题现象】

开发同事反馈有应用在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源码学习漫漫路

MySQL5.6 大量SQL语句处于Writing to net状态的案例分析的更多相关文章

  1. mysql5.7执行sql语句报错:In aggregated query without GROUP BY, expression #1 of SELECT list contains nonagg

    mysql5.7执行sql语句报错:In aggregated query without GROUP BY, expression #1 of SELECT list contains nonagg ...

  2. oracle查看执行最慢与查询次数最多的sql语句及其执行速度很慢的问题分析

    oracle查看执行最慢与查询次数最多的sql语句 注:本文来源 于<oracle查看执行最慢与查询次数最多的sql语句> 前言 在ORACLE数据库应用调优中,一个SQL的执行次数/频率 ...

  3. SQL Server邮件相关SQL语句出现严重的ASYNC_NETWORK_IO等待事件案例

      DPA监控发现一台SQL Server服务器最近两天执行系统存储过程msdb.dbo.sp_MailItemResultSets中的某个SQL时,出现较严重的ASYNC_NETWORK_IO等待. ...

  4. mysql5.7执行sql语句提示Expression #1 of ORDER BY clause is not in GROUP BY

    mysql 新版本出现group by 语句不兼容问题 [Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause ...

  5. mysql5.7执行sql语句出现only_full_group_by错误

    在/etc/my.cnf的[mysqld]组中添加 sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISI ...

  6. .net Core使用sql语句实现批量修改数据状态

    上图为查出的所有满足条件的数据,要选中若干条数据将其状态设置为作废 一共选中6条数据,当点击确认后修改数据状态. 前端代码 1.安装NuGet包 [Abp.Dapper]于EFCore中, 2.创建文 ...

  7. MySQL5.6 怎样优化慢查询的SQL语句 -- SQL优化

    上篇:MySQL5.6 怎样优化慢查询的SQL语句 -- 慢日志介绍 在实际的日志分析中,通常慢日志的log数量不少,同一时候同样的查询被记录的条数也会非常多.这里就须要怎样从慢日志查询中找到最有问题 ...

  8. 如何查找MySQL中查询慢的SQL语句

    如何查找MySQL中查询慢的SQL语句 更多 如何在mysql查找效率慢的SQL语句呢?这可能是困然很多人的一个问题,MySQL通过慢查询日志定位那些执行效率较低的SQL 语句,用--log-slow ...

  9. 如何查找MySQL中查询慢的SQL语句(转载)

    转载自https://www.cnblogs.com/qmfsun/p/4844472.html 如何在mysql查找效率慢的SQL语句呢?这可能是困然很多人的一个问题,MySQL通过慢查询日志定位那 ...

随机推荐

  1. popup的简单应用举例(具体在增删改查组件中用到)以及补充的知识点

    一.首先说一下自执行函数 1. 立即执行函数是什么?也就是匿名函数 立即执行函数就是 声明一个匿名函数 马上调用这个匿名函数 2.popup的举例 点击,弹出一个新的窗口.保存完事,页面不刷新数据就返 ...

  2. Matplotlib模块:绘图和可视化

    一.简单介绍Matplotlib 1.Matplotlib是一个强大的Python绘图和数据可视化的工具包 2.安装方法:pip install matplotlib 3.引用方法:import ma ...

  3. spring boot 自动配置原理

    1).spring boot启动的时候加载主配置类,开启了自动配置功能@EnableAutoConfiguration,先看一下启动类的main方法 public ConfigurableApplic ...

  4. MYSQL安装报错 -- 出现Failed to find valid data directory.

    运行环境:windows10数据库版本:mysql.8.0.12安装方式:rpm包直接安装 问题描述:mysql初始化的时候找不到对应的数据库存储目录 报错代码: 2018-10-13T03:29:2 ...

  5. python(4): regular expression正则表达式/re库/爬虫基础

    python 获取网络数据也很方便 抓取 requests 第三方库适合做中小型网络爬虫的开发, 大型的爬虫需要用到 scrapy 框架 解析 BeautifulSoup 库, re 模块 (一) r ...

  6. 第三周学习总结-Java

    2018年7月29日 这是暑假第三周.这一周我把找到的Java教学视频看完了. 本周学到了Java剩余的基础知识,比如:抽象类.接口.内部类.几种常用类.IO流.多态.多线程等等. 因为没有书,所以我 ...

  7. Django中各目录文件的作用

    一般的项目结构如下(大同小异) my_site是一个项目,blog是项目下的应用之一,可以使用创建命令创建更多的应用. 最上层的django文件夹: 自己手动创建,名字随意. 第二层my_site文件 ...

  8. Moco使用简单指导

    下载地址 需要java运行环境支持.下载jar包:moco-runner-<version>-standalone.jar 配置文件 下面是参考: 配置 Moco的配置文件格式使用的是js ...

  9. Selenium+PhantomJS使用时报错原因及解决方案

    问题 今天在使用selenium+PhantomJS动态抓取网页时,出现如下报错信息: UserWarning: Selenium support for PhantomJS has been dep ...

  10. sublime快捷键的使用

    Sublime text 3是码农最喜欢的代码编辑器,每天和代码打交道,必先利其器,掌握基本的代码编辑器的快捷键,能让你打码更有效率.刚开始可能有些生疏,只要花一两个星期坚持使用并熟悉这些常用的快捷键 ...