扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
监控锁定
您应知道您的 DB2 UDB 系统所具有的数据并发性水平。应用程序或数据库设计方面的不足、受约束的硬件资源、渐增的事务量、数据库增长和其他因素都可以导致性能和并发性的降低。
首先,要奠定“基线”- 换言之,就是要奠定在您的环境中用于应用程序和数据库的标准。监控量(volume)以及异常或错误条件成为识别和解决并发性问题的关键。
显示实时的锁信息
通过在发出 DISPLAY DATABASE 命令时包含 LOCKS 选项,DB2 UDB 将在特定时刻及时地显示大量关于持有或等待哪些锁的信息。对于显示(DISPLAY)的 DB2 UDB 数据库(或是其中的一部分)来说,该信息包括:
决定锁模式
如果发出 EXPLAIN 语句,或者如果在 BIND 和 REBIND 命令中包含 EXPLAIN 选项,就可以决定表和表空间锁的模式(Share、eXclusive 等),而这些锁最初是 DB2 UDB 为特定的 SQL 语句指派的。EXPLAIN 的输出存储在 PLAN_TABLE 中,用户然后可以进行查询。表空间的初始锁模式包含在 PLAN_TABLE 的 TSLOCKMODE 列中。
跟踪锁信息
为了最大化环境中的数据并发性,回答下列问题将有助于识别模式、趋势和问题:
您应运行统计(Statistics)、记帐(Accounting)和跟踪(trace)功能来记录关于 DB2 UDB 应用程序性能特点以及整个 DB2 UDB 系统的信息。这些跟踪应该连续运行,这样您就可以定期创建报表来查看和分析数据。这项报表编制功能可以用 IBM 的 DB2 Performance Expert(DB2/PE)或类似的程序来完成。
统计(Statistics)跟踪记录报表时间间隔中发生的锁定和解锁请求、声明和放弃请求、锁暂挂、死锁、超时和锁升级的数目。记帐(Accounting)跟踪记录在应用程序(而非³»统)级别上跟踪相同类型的信息。此外,这些跟踪显示了整个时间间隔期间,以及持有和获取的并发页面锁的最大数目。
从并发性观点来看,您应该查看这些报表来帮助您识别下列状况:
理想情况是,装置争取获得死锁和超时的“零”计数,最多具有少量的锁升级。如果在经过有限的少量事件之后,发生了这三种征兆之一,那么可能应该调优您的锁定了。
关于锁升级,一条经验法则主张如果有超过四分之一的锁升级最终导致死锁或超时,那么升级就不适用于您的环境(请参阅上面关于锁升级的讨论)。要考虑增加 LOCKMAX 或 LOCKS PER TABLE(SPACE)。另一种可能的解决方案就是使受影响的应用程序在初始化时发出 LOCK TABLE。
另外,监控锁定/解锁请求、暂挂和声明/放弃请求的总数目。监视那些数量趋势(预期的或其他的)是在 DB2 UDB 环境中维护高水平的数据并发性的关键。
报警极限
特定页面或行被锁定的概率可能有较大变化,这取决于数据库设计、应用程序代码、事务量、可用的系统资源(例如 CPU、内存、I/O 等)和许多其他的因素。作为一般的经验法则,如果一页或一行被锁定的时间超过 10%,就认为它是“热的(hot)”。因此,10% 可视作合理的报警极限。少于 10% 通常视为是可以接受的,而大于 10% 则可能暗示竞争过多,并且可能应进行调查。
在多数环境中,锁的平均持续时间少于 1 秒钟。如果您装置的锁平均持续时间大于 1 秒,可能就必须进一步进行分析了。
数据共享考虑
以下几段强调了运行 DB2 UDB 数据共享(Data Sharing)环境时,应该查看的信息。某些讨论仅仅与数据共享有关,而某些材料则可能适用于通常状况下的 DB2 UDB(甚至在前面可能已经提及),但对于数据共享环境中的考虑特别重要。
顺序批插入计划
任何按顺序执行 INSERT 的批处理应用程序都可能导致表空间的空间映射页面上的严重竞争。对于这样的应用程序,在创建用于它们的表空间时要考虑使用参数 MEMBER CLUSTER。通过该选项,DB2 UDB 在为 SQL INSERT 语句指派空间时,就不考虑群集索引。因此,DB2 UDB 将基于可用空间,将插入置于数据库中,这意味着不只是一次或几次访问不同的空间映射页面。这将极大地减少对于空间映射页面的竞争。
选择性的分区锁定
DB2 UDB V5 引入了选择性的分区锁定,这意味着仅仅锁定要访问的分区。这是通过在 CREATE 或 ALTER TABLESPACE 语句中指定 LOCKPART YES 选项来完成的。
该功能主要使用在数据共享的环境中,允许 DB2 在分区级别上支持显式的层次结构锁定。选择性的分区锁定为 L 锁提供了真正的分区独立性,因而当数据共享组中的每个成员处理不同的分区时,避免了 IDRWI(DB2 内部读/写兴趣)。在 DB2 UDB V5 之前,表空间的父 L 锁定是在表空间级别上的,甚至对于分区的表空间也是如此。
锁避免
在 DB2 数据共享组中,建议进行下列实践,用以最大化锁避免,并因此提高并发性:
LOCKSIZE
对于数据共享系统,我们极力建议使用 LOCKSIZE PAGE。在使用 LOCKSIZE ROW 之前,用户应仔细分析数据库设计和将访问该数据的应用程序进程的本质。数据共享的 DB2 UDB 系统由于页面物理锁(P-lock)竞争和协商,招致了行锁定的附加开销。通过较高的事务速率,应用程序在页面 P 锁之后,趋向于串行化。因此,要按照设计默认值使用页面锁定。
减少竞争
DB2 数据共享环境中有 3 种不同类型的竞争:
假(False)竞争- 单个 DB2 UDB 成员计算一个哈希(hash)值,用于确定将资源指派给哪个锁表条目。锁表存储在耦合设备中。此哈希值是通过使用资源名称,以及惟一地定义将要锁定资源的相关信息来计算的。虽然特定的资源总是产生一个(且只有一个)值来确定它在锁表中的位置,但极其可能有不止一个资源将散列到相同的锁表条目,该状况称作假(false)竞争。
XES 竞争- 耦合设备中的锁管理器和 XES 只承认两类锁模式 - 共享(S)模式和排他(X)模式。但是,IRLM 支持许多其他的模式,例如意图共享(intent-share,IS)、意图排他(intent-exclusive,IX)和意图排他的共享(share with intent-exclusive,SIX)。该情况导致从 ERLM 传递到 XES 时,将缩减锁模式。如果 XES 接着试图注册一个与现有锁不兼容的锁,XES 就必须检查 IRLM,以便更精确地确定所需的锁类型,以及这一锁请求是否真的兼容。如果该调查确定那些锁实际上是兼容的,那么就仅仅为 XES 竞争。如果那些锁实际不兼容,那么该竞争就是真的。
真(Real)竞争- 这是一种“传统的”竞争,通常由两个应用程序之间 IRLM 不兼容性导致,这在非数据共享的环境也会发生。
通常建议的经验法则显示所有锁请求会导致竞争(真的或假的)应低于 2%。应对导致多于 2% 竞争的应用程序进程进行进一步的调查,用以确定这些竞争是真的还是假的。
锁结构的大小可以影响数据共享环境中遭受的 false 竞争的数量。如果有更多锁表条目,那么两个不同资源“散列”到同一条目的机会就更少。因此,通常可以通过增加耦合设备中锁结构的大小来减少假竞争。如果所有竞争中超过一半为假竞争,我们就建议您扩展锁结构。
如果大多数竞争是“真的”,那么应评估所熟知的数据库和应用程序设计原则,看是否适用于该情况。下列动作通常有助于减少实际竞争:
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者