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源码学习漫漫路

MySQL5.6 大量SQL语句处于Writing to net状态的案例分析的更多相关文章
- 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 ...
- oracle查看执行最慢与查询次数最多的sql语句及其执行速度很慢的问题分析
oracle查看执行最慢与查询次数最多的sql语句 注:本文来源 于<oracle查看执行最慢与查询次数最多的sql语句> 前言 在ORACLE数据库应用调优中,一个SQL的执行次数/频率 ...
- SQL Server邮件相关SQL语句出现严重的ASYNC_NETWORK_IO等待事件案例
DPA监控发现一台SQL Server服务器最近两天执行系统存储过程msdb.dbo.sp_MailItemResultSets中的某个SQL时,出现较严重的ASYNC_NETWORK_IO等待. ...
- 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 ...
- 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 ...
- .net Core使用sql语句实现批量修改数据状态
上图为查出的所有满足条件的数据,要选中若干条数据将其状态设置为作废 一共选中6条数据,当点击确认后修改数据状态. 前端代码 1.安装NuGet包 [Abp.Dapper]于EFCore中, 2.创建文 ...
- MySQL5.6 怎样优化慢查询的SQL语句 -- SQL优化
上篇:MySQL5.6 怎样优化慢查询的SQL语句 -- 慢日志介绍 在实际的日志分析中,通常慢日志的log数量不少,同一时候同样的查询被记录的条数也会非常多.这里就须要怎样从慢日志查询中找到最有问题 ...
- 如何查找MySQL中查询慢的SQL语句
如何查找MySQL中查询慢的SQL语句 更多 如何在mysql查找效率慢的SQL语句呢?这可能是困然很多人的一个问题,MySQL通过慢查询日志定位那些执行效率较低的SQL 语句,用--log-slow ...
- 如何查找MySQL中查询慢的SQL语句(转载)
转载自https://www.cnblogs.com/qmfsun/p/4844472.html 如何在mysql查找效率慢的SQL语句呢?这可能是困然很多人的一个问题,MySQL通过慢查询日志定位那 ...
随机推荐
- 整合 JIRA 和 Confluence 6
Jira 应用和 Confluence 可以完全的整合在一起.在 Confluence 中收集你项目组成员的想法,知识和计划.在 Jira 中跟踪你的系统出现的问题,让这 2 个应用同时工作. 了解更 ...
- python 之 列表与字典
1.4 列表与字典 列表与字典,这两种类型,都是各种类型的集合,以列表为例,如果列表中包含列表,就形成嵌套. 这两种类型几乎是所有python脚本的主要工作组件 . 这种结构信息是可变的可修改的.不像 ...
- 安装Mysql5.6.19
存在异常: ERROR (HY000): Can't connect to MySQL server on 'localhost' (10061) 原因:Mysql的服务没有启动 windows7启动 ...
- python requests的content和text方法的区别
requests对象的get和post方法都会返回一个Response对象,这个对象里面存的是服务器返回的所有信息,包括响应头,响应状态码等.其中返回的网页部分会存在.content和.text两个对 ...
- Ubuntu下创建桌面快捷方式(以Pycharm为例)
之后要在Ubuntu虚拟机上玩PyTorch,安装了Pycharm. 然而每次打开Pycharm需要在其bin目录下进入终端,然后输入sh pycharm.sh,很麻烦.既然Ubuntu是桌面系统,为 ...
- 一脸懵逼学习Hadoop-HA机制(以及HA机制的配置文件,测试)
1:能否让两个NameNode都正常影响客户端请求? 应该让两个NameNode节点在某个时间只能有一个节点正常影响客户端请求,相应请求的必须为Active状态的那一台. 2:standBy状态的节点 ...
- DBEntityEntry类
DBEntityEntry是一个重要的类,可用于检索有关实体的各种信息.您可以使用DBContext的Entry方法获取特定实体的DBEntityEntry实例. DBEntityEntry允许您访问 ...
- 【SpringBoot】常用注解
@EnableAutoConfiguration 启动自动装载:使用了这个注解之后,所有引入的jar的starters都会被自动注入.这个类的设计就是为starter工作的. @RestControl ...
- UIActionSheet的常用方法
enum UIActionSheetStyle : Int { case Automatic // take appearance from toolbar style otherwise uses ...
- Spring boot国际化
国际化主要是引入了MessageSource,我们简单看下如何使用,以及其原理. 1.1 设置资源文件 在 properties新建i18n目录 新建message文件: messages.prope ...