Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » SQL Anywhere 服务器 - SQL 的用法 » 创建数据库 » 使用事务和隔离级别 » 锁定的工作方式

 

获取有关锁的信息

为了诊断数据库中的锁定问题,了解被锁定行的内容可能很有用。您可以使用 sa_locks 系统过程,或使用 Sybase Central 中的 [表锁] 选项卡,查看数据库中当前持有的锁。两种方法都会提供您所需的信息,包括持有锁的连接、锁持续时间和锁类型。

注意

由于数据库中锁的瞬时性质,Sybase Central 中可见的行,或由 sa_locks 系统过程返回的行,在查询完成时可能已不再存在。

使用 Sybase Central 查看锁

可以在 Sybase Central 中查看锁。在左窗格中选择数据库,然后单击右窗格中的 [表锁] 选项卡。这个选项卡会显示每个锁的连接 ID、用户 ID、表名、锁类型和锁名。

使用 sa_locks 系统过程查看锁

sa_locks 系统过程的结果集中包含 row_identifier 列,该列可标识锁引用的表行。要确定在锁定行中存储的实际值,可以在连接谓语中使用表的 rowID,将 sa_locks 系统过程的结果连接到特定的表。例如:

SELECT S.conn_id, S.user_id, S.lock_class, S.lock_type, E.* 
  FROM sa_locks() S JOIN Employees E WITH( NOLOCK ) 
     ON RowId(E) = S.row_identifier 
  WHERE S.table_name = 'Employees';
注意

可能不必指定 NOLOCK 表提示;但是,如果在除 0 以外的其它隔离级别上发出查询,则该查询可能会一直阻塞,直到锁被释放,这将降低此检查方法的有用性。

另请参见

有关 sa_locks 系统过程的详细信息,请参见sa_locks 系统过程

有关 NOLOCK 表提示的信息,请参见FROM 子句

有关 ROWID 函数的详细信息,请参见ROWID 函数 [Miscellaneous]