mysql 导出数据导致锁表
故事原由:今天同事小星做系统优化时问我一个sql问题,为什么查询慢,我看了一眼,发现用到了表A中的datetime类型列进行时间比较,建议他给datetime类型列加上索引。
可这是生产库,表A里面有几百万数据,我说那就等到中午访问量小点的时候导入测试库先做个测试。
中午的12:36 我用mysql workbanch ->Management->Data Export 准备把数据导出本地,然后在导入测试库。
可是等了两三分钟,还没倒完,突然发现大量报警邮件,内容:The operation has timed out
突然明白了什么,哎呦我去,赶紧停止了导出数据。
事由及原因:
The operation has timed out 报警信息是爬虫抛出的异常,因为报表统计站点响应超时了,查看IIS日志和爬虫日志,果真如此。
距上次 站点优化 之后再也没有The operation has timed out ,为什么12:36 到12:30 这四分钟出现了200多个请求异常,跟踪日志:
异常信息:在提供程序连接上启动事务时出错。有关详细信息,请参阅内部异常
又看了看同事写的代码
//添加流水
public int AddFlowMsg(flowmsg ifm, flowmsgcur fc)
{
db.flowmsg.Add(ifm);
db.flowmsgcur.Add(fc);
return db.SaveChanges();
}
根据爬虫日志、IIS日志、本地导出的sql文件时间判断。
12:26---12:30
mysql workbanck导出表数据(flowmsgcur)时导致flowmsgcur表被锁,导致了:在提供程序连接上启动事务时出错。
可以看看:
Run MySQLDump without Locking Tables
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?