您好,我是小DAI,专注于数据库管理员相关的技术问答,请问有什么可以帮您?

sp_familylock

语法


sp_familylock [<fpid1>[, <fpid2>]]

参数

<fpid1>

是 master.dbo.sysprocesses 表中工作进程系列的系列标识符。运行 sp_who 或 sp_lock 可以获得父进程的 <spid>

<fpid2>

是其它锁的 SAP ASE 进程 ID 号。

示例

示例 1

显示 fid 为 5 的系列中所有成员持有的锁的相关信息:


sp_familylock 5

fid spid locktype      table_id  partitionid page dbname class           context
--- ---- ----------    --------- ----------- ---- ------ --------------- -----------------------
  5   5  Sh_intent     176003658           0    0 userdb Non cursor lock Sync-pt duration request
  5   5  Sh_intent-blk 208003772           0    0 userdb Non cursor lock Sync-pt duration request
  5   6  Sh_page       208003772           0 3972 userdb Non cursor lock Sync-pt duration request
  5   7  Sh_page       208003772           0 3973 userdb Non cursor lock Sync-pt duration request
  5   8  Sh_page       208003772           0 3973 userdb Non cursor lock Sync-pt duration request

示例 2

显示有关分区级锁的信息:


sp_familylock

spid  locktype             table_id     partitionid     page   row…
----  ------------------   -----------  -------------   -----  ----
0     Ex_partition           576002052      576004423       0     0
0     Sh_partition_intent   1417053053     1417053053       0     0

partitionid 的表锁值和精细锁值为 0。仅为分区级锁填充 partitionid。

用法

使用 sp_familylock 时,还存在一些其它注意事项:

  • 不带参数的 sp_familylock 将报告有关当前持有锁的系列中所有进程的信息。该报告与 sp_lock 的输出内容相同;但 sp_familylock 允许基于系列 ID 而不是进程 ID 生成报告。它可用于检测系列死锁。

  • 使用 object_name 系统函数可以通过表的 ID 号得出表名。

  • “locktype”列指示锁是共享锁(前缀为“Sh”)、排它锁(前缀为“Ex”)还是更新锁,并且指定该锁是在表上(“table”或“intent”)持有还是在页上(“page”)持有。

  • “locktype”列的“blk”后缀表示该进程目前阻塞了需要获得锁的另一个进程。在此进程结束后,其它进程将继续执行。“demand”后缀指示进程正在尝试获得排它锁。

  • “class”列表示锁是否与游标关联。它显示下列内容之一:

    a) “Non Cursor Lock”表示锁没有与游标关联。

    b) “Cursor Id ”表示锁与该 SAP ASE 进程 ID 的游标 ID 号<>关联。

    c) 游标名表示锁与游标 相关联,该游标属于执行 sp_lock 的当前用户。

  • “fid”列标识锁所属的系列(包括协调进程及其工作进程)。“fid”的值为:

    a) 零值指示 spid 代表的任务是串行执行的。它不参与并行执行。

    b)非零值表明持有锁的任务(spid)是并行执行语句的进程系列的成员(由“fid”标识)。如果值等于 spid, 则表明该任务是并行执行查询的进程系列中的协调进程。

  • “context”列标识锁的环境。同一系列中的工作进程具有相同的环境值。“context”的值为:

    a) “NULL”表示持有该锁的任务在执行串行查询,或者在事务隔离级别 1 上执行并行查询。

    b) “FAM_DUR”表示持有该锁的任务在完成查询之前一直持有锁。

    以下情况下,锁的环境可以是“FAM_DUR”:锁是作为并行查询的一部分而被持有的表锁;锁在事务隔离级别 3 上被工作进程持有;锁被并行查询中的工作进程持有并且必须在事务持续期间被持有。