求助!IIS连接数据库查询超时IIS异常

cloudmissing 2017-03-21 03:37:38
给公司内部开发的电商ERP系统,在使用了一段时间后,出现如下问题:
查询某个报表.( 例如销售明细账,查最近一个月的数据); 或 出库单(目前是近100W的数据),按备注模糊查询时,
当查询超时,IIS就出现异常,状况为:
1.普通查询时,例如销售订单,刷新时,货品明细数据,一会有一会无。很混乱
2.凡是涉及调用存储过程的,一律都提示找不到存储过程。
如图:

每次遇到,都是 重启下 IIS的网站,一切又正常了。
很郁闷,有时周末或者开会,如果没有重启,这段时间内,都没法正常使用了
咨询下各位大神,是什么原因导致的,有什么方法解决吗?
个人猜测是不是 IIS连接数据库,查询超时后,连接断了。而其它的连接池引用还在使用?

补充一下:用的是IIS 7.0; MYSQL 5.6 . 服务器用的阿里云的ECS windows server 2008R2, 数据库是RDS

...全文
731 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
cloudmissing 2017-03-24
  • 打赏
  • 举报
回复
引用 16 楼 shingoscar 的回复:
你有没有把图片里第2行的错误解决掉?
都是同一个问题引起的。 像第二行,是因为开单界面,在保存时,或者获取关联数据时, 而此时IIS访问数据库异常,引起的NULL值,服务端记录写的日志。 当界面的提示信息,可以处理成友好的提示信息
Poopaye 2017-03-24
  • 打赏
  • 举报
回复
你有没有把图片里第2行的错误解决掉?
cloudmissing 2017-03-24
  • 打赏
  • 举报
回复
有没有谁遇到类似的情况啊 应该不以至于就我一个人遇到这种把?
cloudmissing 2017-03-22
  • 打赏
  • 举报
回复
引用 11 楼 sp1234 的回复:
[quote=引用 9 楼 cloudmissing 的回复:] 现在基本用的存储过程,一些慢的报表,也加了 日期或者其他条件的限制, 建合适的索引,来避免这种超时的情况。 现在就 那种很简单的 查询,比如 select 字段 from 出库表 where 备注like '%查询值%' ,因为数量大,又不是索引,耗时很慢。 有想法打算使用搜索引擎sphinx 进行优化。 但我不理解的是,为什么查询超时,IIS超时,IIS出出现这种异常。 导致其他的业务功能都无法正常使用的。 按我原本的理解,一码归一码。 某些查询慢的,超时就超时了,这个报表查询不出来。 但其他单据应该能正常使用。 现在居然会提示 找不到存储过程。 一重启IIS ,又一切正常了,很苦恼
你先在是否已经能够“靠谱地”重现问题,保证在开发环境操作某个操作10次,至少出现7次相同问题?如果可以,请直接贴你操作的这个非常具体的操作代码,这样的问题才可能真正调试![/quote] 目前已经能比较靠谱的重现这个问题。 10次里面7次。 从系统记录的异常日志中,也显示 当查询该报表时,导致的上述一些问题。 具体是的代码: 服务端调用代码: public DataTable GetStatisSADetailList(string frmName, string where, int history, BaseUserInfo userInfo, int pageIndex, int pageSize) { DataTable dt = null; try { string sql = "存储过程名"; IDbDataParameter pFrmName = DbHelper.MakeParameter("pFrmName", frmName); IDbDataParameter pWhere = DbHelper.MakeParameter("pWhere", where); IDbDataParameter pHistory = DbHelper.MakeParameter("pHistory", history); IDbDataParameter pUserId = DbHelper.MakeParameter("pUserId", userInfo.Id); IDbDataParameter pPageIndex = DbHelper.MakeParameter("pPageIndex", pageIndex); IDbDataParameter pPageSize = DbHelper.MakeParameter("pPageSize", pageSize); IDbDataParameter outValue = DbHelper.MakeParameter("outValue", "", (DbType)MySqlDbType.VarChar, 50, ParameterDirection.Output); IDbDataParameter sellCountSum = DbHelper.MakeParameter("sellCountSum", "", (DbType)MySqlDbType.VarChar, 50, ParameterDirection.Output); IDbDataParameter sellTotalSum = DbHelper.MakeParameter("sellTotalSum", "", (DbType)MySqlDbType.VarChar, 50, ParameterDirection.Output); IDbDataParameter sellPriceCost = DbHelper.MakeParameter("sellPriceCost", "", (DbType)MySqlDbType.VarChar, 50, ParameterDirection.Output); IDbDataParameter sellGross = DbHelper.MakeParameter("sellGross", "", (DbType)MySqlDbType.VarChar, 50, ParameterDirection.Output); IDbDataParameter[] parameters = { pFrmName, pWhere, pHistory, pUserId, pPageIndex, pPageSize, outValue, sellCountSum, sellTotalSum, sellPriceCost, sellGross }; dt = DbHelper.Fill(sql, parameters, CommandType.StoredProcedure); if (dt.Rows.Count > 0) { dt.Columns.Add("recordCount"); dt.Columns.Add("sellCountSum"); dt.Columns.Add("sellTotalSum"); dt.Columns.Add("sellPriceCost"); dt.Columns.Add("sellGross"); dt.Rows[0]["recordCount"] = outValue.Value.ToString(); dt.Rows[0]["sellCountSum"] = sellCountSum.Value.ToString(); dt.Rows[0]["sellTotalSum"] = sellTotalSum.Value.ToString(); dt.Rows[0]["sellPriceCost"] = sellPriceCost.Value.ToString(); dt.Rows[0]["sellGross"] = sellGross.Value.ToString(); } } finally { this.DbHelper.Close(); } return dt; } 存储过程,具体SQL太长,暂时先不帖了。 现在我用了 过滤条件的控制,比如 店铺,月份。 限制了只能查一个月的,且店铺必选。 来加快查询速度(因为店铺 是索引),同时减少反馈的数据量(限制后,返回的一般是几万笔数据) 限制了,暂时解决了问题。 但如果有类似的查询,只要是很慢 导致超时的,都有可能引起上述的问题。 SQL优化是一方面, 但我想知道是不是 IIS 连接这边,我有什么没配置好,才导致 一个报表的超时,会引起IIS的异常。
  • 打赏
  • 举报
回复
另外,假设要在开发环境“重现”,你显然要让相关操作先运行几百遍,因为你的问题是在运行了几百遍、上千遍某业务之后突然交叉其它业务而造成的。具体应该是什么业务,只有你自己通过仔细观察,然后在开发环境重现,才能知道。别人猜不出来。你应该在开发环境模拟这个情况,才能发现 bug。 你们有稍微专业一点的测试人员吗?或者开发人员了解自动化测试吗?
  • 打赏
  • 举报
回复
从你的描述看,你始终不能够(或者是不愿意)在开发环境非常靠谱地重现问题。没有这个耐心就不行了。
  • 打赏
  • 举报
回复
引用 9 楼 cloudmissing 的回复:
现在基本用的存储过程,一些慢的报表,也加了 日期或者其他条件的限制, 建合适的索引,来避免这种超时的情况。 现在就 那种很简单的 查询,比如 select 字段 from 出库表 where 备注like '%查询值%' ,因为数量大,又不是索引,耗时很慢。 有想法打算使用搜索引擎sphinx 进行优化。 但我不理解的是,为什么查询超时,IIS超时,IIS出出现这种异常。 导致其他的业务功能都无法正常使用的。 按我原本的理解,一码归一码。 某些查询慢的,超时就超时了,这个报表查询不出来。 但其他单据应该能正常使用。 现在居然会提示 找不到存储过程。 一重启IIS ,又一切正常了,很苦恼
你先在是否已经能够“靠谱地”重现问题,保证在开发环境操作某个操作10次,至少出现7次相同问题?如果可以,请直接贴你操作的这个非常具体的操作代码,这样的问题才可能真正调试!
cloudmissing 2017-03-22
  • 打赏
  • 举报
回复
有么有人遇到过相似的问题啊? 不应该啊... 当执行某些特别慢的查询时, IIS访问数据库超时 就会出现这种问题。 只要是存储过程(数据库里都存在,查询分析器里执行都能查到), 系统一律提示找不到。 普通的SQL查询,时好时坏。(刷新一下,能查到,再刷新一下,又查不多,又刷新一下,又查到) 重启IIS网站时,问题解决。 可总不能每次都重启IIS ,郁闷啊。 现在想的是 去优化查询慢的SQL。 但按我的理解,就算SQL慢,也应该是那个慢的查询功能超时,查不出数据。 而不应该影响其他界面单据一些正常的业务
cloudmissing 2017-03-21
  • 打赏
  • 举报
回复
引用 7 楼 sp1234 的回复:
既然你说“当查询超时......”,那么你就应当在开发环境重现问题,保证你重现10次起码有7、8次都能出现相同结果。 然后再来进一步去靠谱地进行调试。
现在基本用的存储过程,一些慢的报表,也加了 日期或者其他条件的限制, 建合适的索引,来避免这种超时的情况。 现在就 那种很简单的 查询,比如 select 字段 from 出库表 where 备注like '%查询值%' ,因为数量大,又不是索引,耗时很慢。 有想法打算使用搜索引擎sphinx 进行优化。 但我不理解的是,为什么查询超时,IIS超时,IIS出出现这种异常。 导致其他的业务功能都无法正常使用的。 按我原本的理解,一码归一码。 某些查询慢的,超时就超时了,这个报表查询不出来。 但其他单据应该能正常使用。 现在居然会提示 找不到存储过程。 一重启IIS ,又一切正常了,很苦恼
大然然 2017-03-21
  • 打赏
  • 举报
回复
引用 6 楼 cloudmissing 的回复:
[quote=引用 5 楼 qq_25095899 的回复:] 要不要检查一下代码? 看可以优化不 ,100w不应该啊。
恩。查询语句,是可以想办法优化下。 备注这种是没法加索引的,在考虑用sphinx 但按我的理解,就算查询超时,IIS也不应该让整个系统奔了... 每次都得重启下IIS网站,好伤啊[/quote] 我之前也遇见过类似你这样的情况,页面查询爆慢,十几分钟都不出来结果,我把执行的语句复制到sql里直接执行,他就出来了,然后我就又回到页面查询刚才的,马上就OK了,我很是不解。
  • 打赏
  • 举报
回复
既然你说“当查询超时......”,那么你就应当在开发环境重现问题,保证你重现10次起码有7、8次都能出现相同结果。 然后再来进一步去靠谱地进行调试。
cloudmissing 2017-03-21
  • 打赏
  • 举报
回复
引用 5 楼 qq_25095899 的回复:
要不要检查一下代码? 看可以优化不 ,100w不应该啊。
恩。查询语句,是可以想办法优化下。 备注这种是没法加索引的,在考虑用sphinx 但按我的理解,就算查询超时,IIS也不应该让整个系统奔了... 每次都得重启下IIS网站,好伤啊
大然然 2017-03-21
  • 打赏
  • 举报
回复
要不要检查一下代码? 看可以优化不 ,100w不应该啊。
cloudmissing 2017-03-21
  • 打赏
  • 举报
回复
引用 2 楼 Mynameisamirror 的回复:
我感觉是回收有问题
正常的 查询,更新 操作,都有写关闭数据库连接。 但这种IIS超时后出的异常,不知道怎么处理
cloudmissing 2017-03-21
  • 打赏
  • 举报
回复
引用 1 楼 qq_25095899 的回复:
你去数据库看,这些存储过程有没有?
存储过程全都有的。只要重启下IIS,就都能正常查到了。
㤁孞 2017-03-21
  • 打赏
  • 举报
回复
我感觉是回收有问题
大然然 2017-03-21
  • 打赏
  • 举报
回复
你去数据库看,这些存储过程有没有?

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧