我有一张列出 Patient_clinic_visits 的表格。我有 SQLSERVER 2005 后端。Access2010 前端。
每天早上,该表都需要从医院大型机的数据转储中刷新。
此数据转储包括前一天的信息(谁参加、没有参加、取消)和未来 6 周的预约。
因此,我在 Patient_clinic_visits where Visit_Date > (a day) and < (a day + 1) 中执行“DELETE *”,以便在经过一些处理后上传新数据之前依次清理每天的表格。
在大多数日子里,每天只有大约 100-150 条记录。它们是 Master_Patient_Table 中 Pat_ID 的一个外键,上面有 NO_ACTION 链。
目前,在处理了几天的数据后,此 Delete 查询在 Access 前端超时(即周一、周二、周三......)
我运行 sp_whoisactive 并得到:
00 01:53:01.926 52 [[query SELECT 1 FROM "dbo"."Patient_Clinic_Visits"]] RAHCC_User (265ms)ASYNC_NETWORK_IO 0 0 0 NULL 51 0 0 2 暂停 0 NULL SAH0020663 RAHCC_DB Microsoft MDB RAHCC 2013-04-02 09: 08:33.027 0 2013-04-02 11:01:35.033
00 00:00:27.610 53 [[查询 -- 从 Patient_Clinic_Visits 中删除诊所日期 >= '26-Mar-2013' AND Clinic_date < '27-Mar-2013' AND Clinic_location = 'MONC' ]] HAD\jhogan05 (27596ms) LCK_M_IX 16 0 0 52 1,074 0 0 130 暂停 2 NULL SAH0048645 RAHCC_DB Microsoft SQL Server Management Studio Express - 查询 2013-04-02 11:01:07.343 0 2013-04-02 11:01:35.033
这表明我的客户端前端正在等待“来自 Patient_Clinic_Vists 的 SELECT 1”,这会阻止该过程。显然这是由于客户端上的 ASYNC_NETWORK_IO (这可能发生在 Access 前端执行表请求然后不处理数据时)。
a)但是“从 Patient_Clinic_Visits 中选择 1”实际上应该只返回 TRUE 或 FALSE ?这不太可能填满任何东西,并且不清楚为什么会导致阻塞情况?
b) 我在 Access 前端的任何地方都找不到“SELECT 1 ...”。这可能是 SQLSERVER 为响应更复杂的选择而做出的一系列子选择的一部分吗?如果是这样,我如何在该进程历史记录中找到导致这种情况的真正选择?
干杯,
乔恩高清