用 db2pd 工具分析 DB2 for Linux,UNIX,and Windows 中锁的等
当多个 DB2? 用户并发地访问一个数据库时,锁等待会导致响应变慢。锁等待是临时性的,因而难以捕捉。然而,当出现锁等待情形时,需要由数据库管理员负责确定锁等待的原因。本文通过例子演示如何使用用于 DB2 for Linux?, UNIX?, and Windows? 的 db2pd 和 db
当多个 DB2? 用户并发地访问一个数据库时,锁等待会导致响应变慢。锁等待是临时性的,因而难以捕捉。然而,当出现锁等待情形时,需要由数据库管理员负责确定锁等待的原因。本文通过例子演示如何使用用于 DB2 for Linux?, UNIX?, and Windows? 的db2pd
和db2pdcfg
实用程序完成该任务。
用于锁监视的 db2pd
选项
db2pd
是用于监视各种 DB2 数据库活动以及故障排除的实用程序。它是从 DB2 V8.2 开始随 DB2
引擎发布的一个独立的实用程序,其外观和功能类似于 Informix onstat
实用程序。db2pd
是从命令行以一种可选的交互模式执行的。该实用程序运行得非常快,因为它不需要获取任何锁,并且在引擎资源以外运行(这意味着它甚至能在一个挂起的引擎上工作)。通过快照监视还可以收集
db2pd
提供的很多监视器数据,但是 db2pd
和快照监视的输出格式却有很大不同。这使 DBA
可以选择更符合用户需求的监视替代方法。本文关注用于锁监视的 db2pd
选项。有一篇由 Sam Poon 撰写的
developerWorks 文章(参见 参考资料 小节)对
db2pd
的监视功能作了更广泛的介绍。
下面的图展示了用于锁监视的 db2pd
选项:
图 1. 用于锁监视的
db2pd
选项
-
TranHdl
:用于指定事务句柄,以便只监视由特定事务持有的锁。 -
showlocks
:这个子选项将锁名称扩展成有意义的解释。对于一个行锁,该选项显示以下信息:表空间 ID、表 ID、分区 ID、页和槽。通过使用编目视图SYSCAT.TABLES
上的一个查询,很容易将表空间 ID 和表 ID 映射到相应的表名:
清单 1. 将表空间 ID、表 ID 映射到表模式、表名
<br>SELECT TABSCHEMA, TABNAME<br>FROM SYSCAT.TABLES<br>WHERE TBSPACEID = tbspaceid AND TABLEID = tableid<br>
登录后复制
-
wait
:如果指定wait
子选项,则db2pd
只显示事务当前正在等待的锁,以及对等待情形负责的锁。这个子选项大大简化了锁等待分析,因为它将输出限制为参与锁等待情形的锁。 -
db2pd database
和file
选项不是特定于锁监视的,但是适用于(几乎)所有db2pd
调用。database
选项将db2pd
返回的监视器数据限制为某个数据库的监视器数据。而file
选项则允许定义一个文件,以便将db2pd
输出写到该文件。
锁等待分析场景
接下来,我们开始使用前面介绍的 db2pd
选项来分析一个示例锁等待情形。为此,我们创建 DB2
SAMPLE
数据库:
清单 2. 创建
SAMPLE
数据库<br>db2sampl<br> 登录后复制 |
用户 A 执行事务 A,以根据每个经理的薪水为他们提供 10% 的奖金:
清单 3. 事务 A 执行的更新操作
<br>UPDATE EMPLOYEE<br>SET BONUS = SALARY * 0.1<br>WHERE JOB = 'MANAGER'<br> 登录后复制 |
当事务 A 仍然在运行(因为用户 A 还没有使用 COMMIT
或 ROLLBACK
终止该事务)时,用户 B 执行事务 B,以将每个雇员的薪水提高 2%:
清单 4. 事务 B 执行的更新操作
<br>UPDATE EMPLOYEE<br>SET SALARY = SALARY * 0.02<br> 登录后复制 |
由于事务 B 没有完成,用户 B 请求 DBA 确定问题的原因。于是,DBA 调用
db2pd
,看是否存在锁等待情形:
清单 5. 检查锁等待情形
<br>db2pd -db sample -locks wait showlocks<br><br>Database Partition 0 -- Database SAMPLE -- Active -- Up 3 days 08:33:05<br><br>Locks:<br>Address TranHdl Lockname Type Mode Sts Owner Dur <br>0x050A0240 6 02000600050040010000000052 Row ..X W 2 1 <br>0x050A0DB0 2 02000600050040010000000052 Row ..X G 2 1 <br><br>HoldCount Att ReleaseFlg<br>0 0x00 0x40000000 TbspaceID 2 TableID 6 PartitionID 0 Page 320 Slot 5<br>0 0x00 0x40000000 TbspaceID 2 TableID 6 PartitionID 0 Page 320 Slot 5<br> 登录后复制 |
db2pd
报告 ID 为 2 的表空间中一个 ID 为 6 的表上有一个行锁存在锁等待情形。通过检查
SYSCAT.TABLES
,DBA 断定表 EMPLOYEE
上的确存在锁等待。
清单 6. 确定锁等待情形所涉及的表
请点击此处查看全文

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

Linux适用于服务器、开发环境和嵌入式系统。1.作为服务器操作系统,Linux稳定高效,常用于部署高并发应用。2.作为开发环境,Linux提供高效的命令行工具和包管理系统,提升开发效率。3.在嵌入式系统中,Linux轻量且可定制,适合资源有限的环境。

在 Oracle 中查看实例名的方法有三种:命令行中使用 "sqlplus" 和 "select instance_name from v$instance;" 命令。在 SQL*Plus 中使用 "show instance_name;" 命令。通过操作系统的任务管理器、Oracle Enterprise Manager 或检查环境变量 (Linux 上的 ORACLE_SID)。

要在 Oracle 命令窗口执行 SQL,请:打开命令窗口。连接到数据库:connect username/password。输入 SQL 语句并按 Enter 键执行。查看结果。输入 exit 退出命令窗口。

安装 Oracle 后,可通过以下步骤使用:创建数据库实例。连接到数据库。创建用户。创建表。插入数据。查询数据。导出数据。导入数据。

启动Oracle数据库实例的必要组件包括:操作系统内核、Oracle数据库监听器、Oracle数据库实例进程和相关后台进程。这些组件的启动方法包括:启动监听器(例如:lsnrctl start)、连接数据库(例如:sqlplus / as sysdba)和启动数据库实例(例如:startup)。常见问题包括监听器或实例启动失败,调试方法包括检查配置文件或数据库日志文件。优化建议包括分配充足资源、调整参数和定期备份。

在Linux上使用Docker可以提高开发和部署效率。1.安装Docker:使用脚本在Ubuntu上安装Docker。2.验证安装:运行sudodockerrunhello-world。3.基本用法:创建Nginx容器dockerrun--namemy-nginx-p8080:80-dnginx。4.高级用法:创建自定义镜像,使用Dockerfile构建并运行。5.优化与最佳实践:使用多阶段构建和DockerCompose,遵循编写Dockerfile的最佳实践。

DebianSniffer是一个网络嗅探工具,用于捕获和分析网络数据包时间戳(Timestamp):显示数据包捕获的时间,通常以秒为单位。源IP地址(SourceIP):发送数据包的设备的网络地址。目标IP地址(DestinationIP):接收数据包的设备的网络地址。源端口(SourcePort):发送数据包的设备使用的端口号。目标端口(Destinatio

要卸载 Oracle 数据库:停止 Oracle 服务,移除 Oracle 实例,删除 Oracle 主目录,清除注册表项(仅限 Windows),删除环境变量(仅限 Windows)。卸载前请备份数据。
