You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ODBC传递查询客户端显示完成但服务器仍运行问题求助

Access ODBC传递查询客户端显示完成但服务器仍长时间运行的问题排查

环境信息

  • Microsoft® Access® for Microsoft 365 MSO(版本2202 内部版本16.0.14931.20888)64位
  • Microsoft SQL Server 2019 - 15.0.4261.1 (X64) 标准版(64位),运行于Windows Server 2016 Datacenter 10.0
  • 系统类型:64位操作系统,基于x64的处理器

问题描述

通过64位文件DSN建立Access到SQL Server的ODBC传递查询,某大型查询在客户端约5分钟就显示运行完成并返回正确记录(ODBC超时设置为540秒),但服务器端显示该查询持续运行45分钟以上,直到手动终止Access才断开连接。

可能原因

  • 结果集异步处理:Access在获取第一批满足条件的记录后就标记查询完成,但服务器仍在后台继续处理剩余结果集,直到所有数据传输完毕或连接中断。
  • ODBC驱动行为:64位ODBC驱动可能存在后台数据预取或连接保持机制,客户端显示完成后,驱动仍维持与服务器的连接并继续接收数据。
  • SQL Server执行计划特性:查询执行计划包含并行执行、延迟物化等逻辑,客户端拿到部分结果后,服务器仍在完成后续计算或数据处理。
  • Access连接管理缺陷:Access显示结果后未正确发送终止查询的指令,导致服务器端进程持续运行。

排查方法

  • 监控SQL Server会话状态:使用动态管理视图查询会话的执行细节,确认是否在后台传输数据:
    SELECT r.session_id, r.status, r.command, r.total_elapsed_time/1000 AS elapsed_sec,
           r.row_count, s.host_name
    FROM sys.dm_exec_requests r
    JOIN sys.dm_exec_sessions s ON r.session_id = s.session_id
    WHERE s.host_name = '你的客户端主机名';
    
  • 验证ODBC超时机制:将ODBC查询超时设置为更短时间(如60秒),观察服务器端进程是否会自动终止,排查超时设置是否未生效。
  • 调整查询参数:在传递查询开头添加SET NOCOUNT ON减少服务器消息量;或临时用TOP N限制返回行数,测试客户端显示完成后服务器进程是否立即结束。
  • 更新ODBC驱动:确认使用最新版SQL Server ODBC驱动(如ODBC Driver 17 for SQL Server),旧版本可能存在连接管理bug。
  • 跟踪ODBC通信日志:通过ODBC数据源管理器开启跟踪,记录客户端与服务器的交互,查看客户端是否发送了终止查询的指令。
  • 分析查询执行计划:生成查询的实际执行计划,检查是否存在并行查询、排序、键查找等耗时操作,确认服务器端是否在后台处理剩余数据。

内容的提问来源于stack exchange,提问作者C.George

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 17:45:29