【LOCK】V$LOCK视图中的ID1和ID2含义

简介:   在诊断有关锁等待这种数据库等常见故障的时候经常会用到V$LOCK视图,这个视图中的ID1和ID2的含义经常被提及。了解这两个字段的含义对理解V$LOCK视图很有意义。
  在诊断有关锁等待这种数据库等常见故障的时候经常会用到V$LOCK视图,这个视图中的ID1和ID2的含义经常被提及。了解这两个字段的含义对理解V$LOCK视图很有意义。
  本文简单对V$LOCK视图中的ID1和ID2含义进行描述和探索。

1.Oracle官方文档中的描述
参考链接:http://download.oracle.com/docs/cd/B19306_01/server.102/b14237/dynviews_1147.htm#i1407629
其中只记录了如下两条模糊的信息:
ID1     NUMBER     Lock identifier #1 (depends on type)
ID2     NUMBER     Lock identifier #2 (depends on type)

这样的描述是不足够和充分的。我们要求甚解!

2.MOS中的描述
有关V$LOCK视图中的ID1和ID2的含义在MOS的29787.1中有以下描述,描述的比较清晰,供参考。
The meaning of ID1 and ID2 depend on the lock TYPE.

---------------------------------------------------------------------------
Most Common Lock Types:
---------------------------------------------------------------------------
  TYPE  Name                  ID1                     ID2
  ~~~~  ~~~~                  ~~~                     ~~~
  TX    Transaction   Decimal RBS & slot     Decimal WRAP number
                     (0xRRRRSSSS  RRRR = RBS number, SSSS = slot)
    A TX lock is requested in eXclusive mode if we are waiting on a ROW.
    A SHARE mode request implies we are waiting some other resource held
    by the TX (Eg: waiting for an ITL entry)

  TM  Table Locks             Object id of table.     Always 0.

  TS  Temp Segment            TS#                     Relative DBA

  ST  Space Transaction       Only ONE enqueue.
  UL  User Locks

3.实例说明TM表级锁时ID1和ID2的含义
以最常见的TM表级锁定为例,ID1表示被锁定的对象的OBJECT_ID,ID2此时为“0”。
1)模拟TM标记锁
(1)创建测试用表T
sec@ora10g> create table t (x varchar2(8));

Table created.

(2)向表T中插入一条数据
sec@ora10g> insert into t values('secooler');

1 row created.

2)获取锁信息
当前会话的sid为140,为了避免查询到其他信息,这里进行限定。
sec@ora10g> select sid, type, id1, id2 from v$lock where sid=140;

       SID TYPE                        ID1        ID2
---------- -------------------- ---------- ----------
       140 TM                        10981          0
       140 TX                       655404        260

3)根据ID1的值定位操作的数据库对象信息
sec@ora10g> select OWNER,OBJECT_NAME,OBJECT_ID,OBJECT_TYPE from dba_objects where OBJECT_ID=10981;

OWNER      OBJECT_NAME     OBJECT_ID OBJECT_TYPE
---------- -------------- ---------- -------------
SEC        T                   10981 TABLE

OK,得以验证,这里10981对应数据库对象便是我们操作的表T。

4.实例说明TX事务锁时ID1和ID2的含义
当所类型为TX事务锁时ID1和ID2的含义如下:
ID1对应视图V$TRANSACTION中的XIDUSN字段和XIDSLOT字段。其中ID1的高16位为XIDUSN,低16位为XIDSLOT。
ID2对应视图V$TRANSACTION中的XIDSQN字段。

1)仍然以上面的锁信息中的TX锁对应的记录为例进行说明。
摘录信息如下:

       SID TYPE                        ID1        ID2
---------- -------------------- ---------- ----------
       140 TX                       655404        260

2)使用ID2的值“260”检索V$TRANSACTION视图
sec@ora10g> select XIDUSN,XIDSLOT,XIDSQN from V$TRANSACTION where XIDSQN=260;

    XIDUSN    XIDSLOT     XIDSQN
---------- ---------- ----------
        10         44        260

3)10和44对应到ID1的值“655404”的方法
10*2^16+44=655404

4)使用ID1的值计算得到XIDUSN和XIDSLOT方法
sec@ora10g> select trunc(655404/power(2,16)) XIDUSN from dual;

    XIDUSN
----------
        10

sec@ora10g> select bitand(655404,to_number('ffff','xxxx'))+0 XIDSLOT from dual;

   XIDSLOT
----------
        44

这便是他们之间既简单有复杂的关系。

5.小结
  有关V$LOCK的应用请参考文章《【实验】【LOCK】“锁等待”模拟、诊断及处理方法》(http://space.itpub.net/519536/viewspace-605526)。
  作为最常用的动态性能视图V$LOCK,它的每个字段都应该深入了解和探索。以便做到胸有成竹,事半功倍。

Good luck.

secooler
11.04.24

-- The End --

目录
相关文章
|
存储 SQL 关系型数据库
PostgreSQL系统字段cmin和cmax详解
1.cmin和cmax是什么 PG中每个表都包含了一些系统字段,其中包括cmin和cmax。 cmin:插入该元组的命令在插入事务中的命令标识(从0开始累加) cmax:删除该元组的命令在插入事务中的命令标识(从0开始累加) 可以在Select命令的输出列表中显式地指定系统字段。
3341 0
|
6月前
|
缓存 运维 前端开发
快速定位进程性能瓶颈
这篇文章详细介绍了进程热点追踪的概念、业务痛点、解决方案以及实际案例分析,旨在帮助开发者和运维人员快速定位和解决系统性能瓶颈问题。
快速定位进程性能瓶颈
|
存储 安全 Java
Spring Security Oauth2 之 密码模式请求/oauth/token 解析
前言 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/bin392328206/six-finger 种一棵树最好的时间是十年前,其次是现在
1998 0
|
12月前
|
存储 IDE 开发工具
易语言基础功能
易语言基础功能
|
Prometheus 监控 Cloud Native
Prometheus 安装与配置
Prometheus 安装与配置
|
网络协议 应用服务中间件 网络安全
申请并部署免费的 SSL/TLS 证书
本文介绍了如何免费获取和部署 SSL/TLS 证书,主要针对囊中羞涩的用户。方法包括:云服务平台的限量提供、使用 Cloudflare 等网络服务商以及直接向免费证书颁发机构(如 Let’s Encrypt 和 ZeroSSL)申请。文章重点讲述了通过自动化脚本 acme.sh 与 Let’s Encrypt 配合申请和部署证书的步骤,包括设置默认 CA、安装 acme.sh、使用 http 模式验证和部署到 nginx 服务器。此外,还提到了配置 nginx.conf 文件以启用 SSL。
1133 0
|
SQL 开发框架 数据库连接
uniapp中sqlite数据库常用操作的简单封装
uniapp中sqlite数据库常用操作的简单封装
1335 0
|
Linux
linux虚拟机network服务显示active(exited)
linux虚拟机network服务显示active(exited)
3105 0
|
SQL Oracle 关系型数据库
Oracle-使用awrrpt.sql生成AWR报告
Oracle-使用awrrpt.sql生成AWR报告
603 0
|
Linux 网络安全
企业级备份软件Veritas NetBackup(NBU)8.1.1的Linux客户端部署
企业级备份软件Veritas NetBackup(NBU)8.1.1的Linux客户端部署
777 0
企业级备份软件Veritas NetBackup(NBU)8.1.1的Linux客户端部署