故事原由:今天同事小星做系統優化時問我一個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