千家信息网

如何解决SQL语句中执行超时引发网站首页访问故障的问题

发表于:2025-01-21 作者:千家信息网编辑
千家信息网最后更新 2025年01月21日,这篇文章将为大家详细讲解有关如何解决SQL语句中执行超时引发网站首页访问故障的问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。故障的情况是这样的。故障期间日志中记
千家信息网最后更新 2025年01月21日如何解决SQL语句中执行超时引发网站首页访问故障的问题

这篇文章将为大家详细讲解有关如何解决SQL语句中执行超时引发网站首页访问故障的问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

故障的情况是这样的。

故障期间日志中记录了大量下面的错误。

2020-02-03 06:37:24.635 [Error] An unhandled exception has occurred while executing the request./Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddlewareSystem.Data.SqlClient.SqlException (0x80131904): Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding. ---> System.ComponentModel.Win32Exception (258): Unknown error 258 at System.Data.SqlClient.SqlCommand.<>c.b__126_0(Task`1 result)

数据库服务器(阿里云 RDS SQL Server 2016 实例)的 CPU 消耗突增。

数据库服务器的 IOPS 暴增。

通过阿里云 RDS 控制台的 CloudDBA 可以查看到故障期间获取首页博文的 SQL 语句被执行了3万多次,执行这么多次是由于查询超时,无法建立缓存,每次请求都要访问数据库。

发现故障后,我们通过阿里云 RDS 的主备切换恢复了正常。

经过对故障的排查分析,锁定的最大嫌疑对象是 SQL Server 参数嗅探(详见园子里的博文 什么是 SQL Server 参数嗅探)。

对于这种因为重用他人生成的执行计划而导致的水土不服现象,SQL Server 有一个专有名词,叫"参数嗅探 parameter sniffing"。

而且我们找到了引发 SQL Server 参数嗅探问题的条件。

在我们的 open api 中提供了获取首页博文列表的 web api ,但没有限制可以获取的最大博文数,也就是下面的 ItemCount 参数(除了 open api ,其他地方调用时 ItemCount 值都是 20 )。

SELECT TOP (@ItemCount)

假如有人调用 open api 时给 ItemCount 传了一个很大的值,比如 20000 ,虽然调用的是同样的 SQL 语句,但由于 ItemCount 的值不同, SQL Server 可能会生成相差很大的执行计划,对于 ItemCount 20000 性能比较好的执行计划,对于 ItemCount 20 可能性能极差。如果查询 ItemCount 20000 时生成的执行计划被缓存下来,查询 ItemCount 20 时继续使用这个执行计划,就会出现本来好好的 SQL 查询突然变得性能极差。我们今天遇到的故障很可能就是这个原因,而且故障时就一个 SQL 语句出现问题(正好就这个 SQL 查询缓存了水土不服的执行计划),其他都正常,也验证了这个猜测。

通过这次故障,我们吸取的教训是一定要在代码中对 ItemCount 与 PageSize 的最大值进行限制,它不仅仅是带来不必要的低性能查询,而且可能会因为 SQL Server 参数嗅探问题拖垮整个数据库。

关于"如何解决SQL语句中执行超时引发网站首页访问故障的问题"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

故障 参数 查询 语句 首页 性能 数据 数据库 问题 最大 篇文章 缓存 阿里 生成 网站 网站首页 很大 水土不服 更多 服务器 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 安卓软件开发地图 对网络安全方面的感想 网游服务器ip 乡镇网络安全周总结报告 新疆新华互联网科技学校 广东海讯网络技术怎么样 惠普服务器磁盘设置 思科网络安全期末考试 熟悉网络管理或网络安全 网鼎杯网络安全大赛比赛题目 网络安全管理机构名称 我的世界龙珠自定义形态服务器 上海潮流软件开发服务标准 吉林网络安全求职者 网络安全要什么证书 山西蔬菜批发软件开发 揭阳网络安全培训机构 服务器与虚拟主机的区别 苹果节奏大师显示账户与服务器 重庆应用软件开发排行榜 协同软件开发费用多少钱 信息技术教案《网络安全》 南理工网络安全学院专硕几年 网站数据库在什么地方 网站 服务器带宽 中国电信服务器中标公告 汕头支付软件开发常见问题 网络安全意识形态工作方案 北师大 计算机网络技术 语音聊天软件开发费
0