疑难杂症:列表查询接口报错:操作超时 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
Visitor233
V2EX    程序员

疑难杂症:列表查询接口报错:操作超时

  •  
  •   Visitor233 205 天前 1819 次点击
    这是一个创建于 205 天前的主题,其中的信息可能已经有所发展或是发生改变。
    如果我能解决这个问题,给大伙发 500 块红包。

    超时报错很频繁,峰值隔几十秒来一次,或者几分钟来一次。

    1:sqlserver 2008r2,订单详情表和生产表都是 50 万行数据,300 多列,想过扩展事件记录 duration 超过 5 秒的 SQL ,但服务器上没有 evenfile 。查日志也没有 deadlock ,不清楚开了记录没。
    查询 SQL 单独拿出来运行很快,秒查。

    2:.net framework 4.6 web api ,没有报错日志

    3:站点和数据库在同一台服务器上,CPU 稳定 20%至 50 %,内存 80%,都未过载。

    4:客户端 winform 程序也只有两台机器,车间人员手速操作挺快的。requeat 超时设置的是 60 秒。超时报错 50%都是卡在查询的 loading 函数里,没有增删改。
    9 条回复    2025-03-21 00:48:39 +08:00
    wujb07
        1
    wujb07  
       205 天前   1
    会不会是连接池问题
    lasuar
        2
    lasuar  
       205 天前   1
    进一步定位 loading 函数里面的代码,是否查询有额外的数据处理逻辑;另一半超时在哪呢,50%是如何得出?
    wu00
        3
    wu00  
       205 天前   1
    问 AI 呗,你需要的是排查思路。
    先排查是客户端问题还是服务端问题,排查网关/服务端/客户端的请求响应日志
    你连是客户端问题还是服务端问题都没说清楚,只知道卡在 loading ,你说是超时,那么有 504 超时响应么、服务端有 499 么
    asmoker
        4
    asmoker  
       205 天前   1
    loading 函数里一行代码一行日志,打印关键信息和耗时
    shangsharon
        5
    shangsharon  
       205 天前   1
    在 web api 里加类似 miniprofiler 的组件记录接口执行时长,看能不能找到问题.
    daxin945
        6
    daxin945  
       205 天前   1
    排查一下网络状况?
    opengps
        7
    opengps  
       205 天前   1
    关注下磁盘队列长度,并发可能读取量过大产生了队列等待
    yinmin
        8
    yinmin  
       205 天前   1
    sql server 用了几十年了,上千人同时使用的企业应用 sql server 完全没问题,一句 sql 查询跑几十分钟完全不影响其它用户读写的。

    我估计大概率是程序写的有问题,检测步骤如下:
    (1) 运行 SELECT session_id,connect_time,client_net_address,auth_scheme FROM sys.dm_exec_connections; 查询 connection 情况,如果同一个客户端连接数太多,说明代码写的有问题。
    c#连数据库,SqlConnection 、SqlCommand 是必须要用 using 的,不用 using 会 connection 不释放,然后连接数超限就会卡死一段时间。(用法见: https://sanderrossel.com/using-c-to-connect-to-and-query-from-a-sql-database/ )。如果没有用 using ,必须重写代码加上 using !!!

    (2) 长时间的 SQL 语句,需要配置 Cmd.CommandTimeout 值,例如 1800 秒,避免超时。

    (3) 查 sql 实时运行情况,是用 sql server profiler ,连上服务器配置条件后就能实时看到 sql 了。对于时间过长的 sql ,可以使用 sql server management studio 的"显示估计的执行时间"功能,在耗时大的地方看看是否需要加索引。

    (4) 关键之关键:服务器内存必须大于数据库总容量的,找到 sql 数据库的 data 目录,mdf 文件合计大小算一下,直接*1.25 倍,就是应该服务器内存大小,如果 mdf 合计有 40GB ,服务器就要配置 64GB 内存,如果 mdf 合计有 100GB ,服务器就要配 128GB 内存,依次类推(可以适当扣除一些基本不会用到的数据库数据)。
    yinmin
        9
    yinmin  
       205 天前   1
    SQL Server 2008R2 安装补丁后,版本应该是 10.50.6220 ,如果是 10.50.1600 说明数据库运维是不合格的,原始版本一个补丁都没打。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     870 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 22ms UTC 20:27 PVG 04:27 LAX 13:27 JFK 16:27
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86