在安装 SQL Server 2000 SP4 后 sysprocesses 表中被阻止的列将为闩锁等待填充


概要


安装 Microsoft SQL Server 2000 Service Pack 4 (SP4) 后,您可能会注意到,将sysprocesses系统表中的阻止列填充的除了锁等待的闩锁等待时间。 有时,您可能会注意到时间当一个服务器进程 ID (SPID) 报告为阻止本身在短时间的。此行为被预期行为。

详细信息


锁闩用于同步访问缓存的数据页和其他内存中的对象。 通常情况下,只短暂,释放闩锁和闩锁等待时间会相应较小。 SQL Server 2000 SP4 添加诊断程序有助于解决的 SPID 等待闩锁很长时间的情况。这些诊断程序将阻止列导致sysprocesses系统表以反映正在阻止闩锁请求的另一个 SPID 闩锁的所有者。 在 SQL Server 2000 SP4 之前,阻止列仅填充时引起阻塞的锁等待。



这一更改 SQL Server 2000 SP4 不会更改的闩锁请求的情况。此外,这种更改不会更改的 SPID 被闩锁的情况。此更改只会影响在哪个闩锁等待报告sysprocesses系统表中的方式。

闩锁所有权只会跟踪闩锁在独占 (EX) 或更新 (向上) 闩锁模式。 闩锁共享 (SH) 闩锁模式中,不会跟踪所有权。 这意味着,锁定列中不会填充的某些闩锁请求,即使已安装 SQL Server 2000 SP4。

大多数情况下,如果满足以下条件,则可以忽略锁定列中的值︰
  • Waittime列中的值较低。
  • SPID waittype 是闩锁 waittype。
在 waittype 列中的可能值的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章︰

822101 waittype 和 lastwaittype 中的列在 SQL Server 2000年中的 sysprocesses 表

SPID 正在等待 I/O 页闩锁,您可能会注意到阻止列简要报告 SPID 阻塞本身。这种现象是方法的闩锁,用于在数据页上的 I/O 操作的一个副作用。当一个线程发出 I/O 请求时,发出 I/O 请求的 SPID 获取页面上的闩锁。所有 SQL Server 2000 I/O 操作都是异步的。因此,SPID 将尝试获取另一个在同一页上的闩锁,如果 SPID 发出 I/O 请求必须等待该请求完成。第一个闩锁阻止此第二个闩锁。因此,阻止列报告 SPID 阻塞本身。当 I/O 请求完成后时,第一个闩锁被释放。然后,被授予第二个的闩锁请求。

例如,可能会出现以下情况︰
  1. SPID 55 想要读取不存在在缓冲池中的数据页。
  2. SPID 55 获取页上的 EX 闩锁。 因为页上不存在请求的闩锁模式是在内存中,外部EX 闩锁模式强制其他 Spid 可能还希望访问页后,可以等待完成 I/O 请求。 EX 闩锁模式还会阻止其他 Spid 发出 I/O 请求同一页的重复。
  3. SPID 55 发出 I/O 请求,以便从磁盘读取页。

  4. 由于 SPID 55 想要阅读的页面,SPID 55 必须等待完成 I/O 请求。 等待完成 I/O 请求,SPID 55 尝试获取另一个共享 (SH) 闩锁模式对同一页的闩锁。由于尚未购置 EX 闩锁,SH 闩锁请求被阻止,并且 SPID 被挂起。 因为阻止 SH 闩锁请求的 EX 闩锁也获取 SPID 55,SPID 临时报告为阻止本身。

  5. 当 I/O 请求完成后时,页面上的 EX 闩锁被释放。
  6. EX 闩锁的释放使 SPID 55 SH 闩锁。

  7. SPID 55 现在可以阅读页。

第 4 步和第 5 步,之间sysprocesses表指示 SPID 55 PAGEIOLATCH_XXwaittype 以及阻止本身。在此 waittype, XX可能 SH,或外部这种行为表示 SPID 55 发出 I/O 请求,SPID 55 正在等待完成 I/O 请求。