天地不仁,以万物为刍狗!
DB2通用数据库的并发性
上一篇 / 下一篇 2008-08-06 11:08:54 / 个人分类:db2
DB2通用数据库的并发性
最大限度地访问关系数据ITPUB个人空间B.kIlW0apn
ITPUB个人空间[)i{UY)]V0p
级别: 初级
,bUY i3o.]0
q{p,B4Xf0Fred Whitlark (fwhitlar@us.ibm.com), DB2 顾问,IBM
#yQ0lqZ#L4fG0ITPUB个人空间#o+B/q,x^l
2004 年 8 月 01 日
)g x E2pb~4~ }:a r&m{0
x5[GZG_D0 并发性是数据库管理系统具有的一种功能,用以允许多个用户同时访问数据,同时维护数据的完整性和一致性。本文针对在 DB2 for z/OS 环境中提供并发性,提供了一些通用指南和建议。ITPUB个人空间$bYR:rcw1x
Yd!Y3N4G*Q6I.jm:X0序言
vM.P%dt1X0ITPUB个人空间]NWo_
本文的目的是为 IBM® 商业合作伙伴提供有关 z/OS® 环境中 DB2® Universal Database™(UDB)的数据并发性的重要信息。本文试图将多个来源中极其大量的材料联合起来,然后尽可能高效地显示该信息。但不打算过于全面或详尽地进行介绍。
g U1}$p#P8N)Ww |r0ITPUB个人空间5Rr&[{'}8sJ Ov)u
我打算讨论那些最常导致检测和解决并发性问题的因素。每种可能的解决方案和每一项潜在的考虑都是无法预期的,就更不用说涵盖整个计划范围了。我希望本文提供一些通用指南,以帮助 DB2 UDB 客户在自己的环境中取得高度数据并发性。本文将是一个在任何给定装置上处理并发性问题的较好起始点。ITPUB个人空间r4?;jc5`;T,i
ITPUB个人空间X1iNgbc+U2S B*E
我假定您对于 z/OS 环境中的 DB2 UDB 已经有了基本的理解。本文的前部分讨论概念和定义,以便使大家处于同一起跑线上。我的建议本质上有点倾向于通用化,但我也并没有总是详细地叙述技术描述和语法规范。关于这些问题的更多详细信息,我建议您查看为安装在客户端的 DB2 UDB 版本提供的最新 IBM 文档。ITPUB个人空间&S"t ^u'Ik9s'G
ITPUB个人空间3x*k%iQD
本文的通用设计点是 DB2 UDB V7。 虽然已经发布了 z/OS 上的 DB2 UDB V8,但有可能在数月之后,大多数 IBM 客户才会为其生产系统实现 DB2 UDB V8 新功能模式(New Function Mode,NFM)。这里还要考虑另一个因素。虽然 DB2 UDB 的每个新版本在普遍可用之前,都经过了 IBM 以及客户环境的广泛测试,但与还未被广泛、普遍使用的版本相比较,客户极可能更信赖基于 DB2 UDB 早期版本的通用建议、经验法则等(因为实际经验的深度和广度可以验证结论)。
G'ojN{r0ITPUB个人空间J^y2Mbds0qt
免责声明:本文档包含的信息是没有经过任何形式的 IBM 测试。该信息的使用或这些技术的实现是用户的责任,要依靠用户的能力进行评估,并将其集成到客户特有的操作环境中。虽然 IBM 已经在特定情况下检查了每一项的准确性,但不保证在其他地方将获得相同或相似的结果。尝试调整这些技术以适应自己环境的用户必须自担风险。
ITPUB个人空间[)i{UY)]V0p
级别: 初级
,bUY i3o.]0
q{p,B4Xf0Fred Whitlark (fwhitlar@us.ibm.com), DB2 顾问,IBM
#yQ0lqZ#L4fG0ITPUB个人空间#o+B/q,x^l
2004 年 8 月 01 日
)g x E2pb~4~ }:a r&m{0
x5[GZG_D0 并发性是数据库管理系统具有的一种功能,用以允许多个用户同时访问数据,同时维护数据的完整性和一致性。本文针对在 DB2 for z/OS 环境中提供并发性,提供了一些通用指南和建议。ITPUB个人空间$bYR:rcw1x
Yd!Y3N4G*Q6I.jm:X0序言
vM.P%dt1X0ITPUB个人空间]NWo_
本文的目的是为 IBM® 商业合作伙伴提供有关 z/OS® 环境中 DB2® Universal Database™(UDB)的数据并发性的重要信息。本文试图将多个来源中极其大量的材料联合起来,然后尽可能高效地显示该信息。但不打算过于全面或详尽地进行介绍。
g U1}$p#P8N)Ww |r0ITPUB个人空间5Rr&[{'}8sJ Ov)u
我打算讨论那些最常导致检测和解决并发性问题的因素。每种可能的解决方案和每一项潜在的考虑都是无法预期的,就更不用说涵盖整个计划范围了。我希望本文提供一些通用指南,以帮助 DB2 UDB 客户在自己的环境中取得高度数据并发性。本文将是一个在任何给定装置上处理并发性问题的较好起始点。ITPUB个人空间r4?;jc5`;T,i
ITPUB个人空间X1iNgbc+U2S B*E
我假定您对于 z/OS 环境中的 DB2 UDB 已经有了基本的理解。本文的前部分讨论概念和定义,以便使大家处于同一起跑线上。我的建议本质上有点倾向于通用化,但我也并没有总是详细地叙述技术描述和语法规范。关于这些问题的更多详细信息,我建议您查看为安装在客户端的 DB2 UDB 版本提供的最新 IBM 文档。ITPUB个人空间&S"t ^u'Ik9s'G
ITPUB个人空间3x*k%iQD
本文的通用设计点是 DB2 UDB V7。 虽然已经发布了 z/OS 上的 DB2 UDB V8,但有可能在数月之后,大多数 IBM 客户才会为其生产系统实现 DB2 UDB V8 新功能模式(New Function Mode,NFM)。这里还要考虑另一个因素。虽然 DB2 UDB 的每个新版本在普遍可用之前,都经过了 IBM 以及客户环境的广泛测试,但与还未被广泛、普遍使用的版本相比较,客户极可能更信赖基于 DB2 UDB 早期版本的通用建议、经验法则等(因为实际经验的深度和广度可以验证结论)。
G'ojN{r0ITPUB个人空间J^y2Mbds0qt
免责声明:本文档包含的信息是没有经过任何形式的 IBM 测试。该信息的使用或这些技术的实现是用户的责任,要依靠用户的能力进行评估,并将其集成到客户特有的操作环境中。虽然 IBM 已经在特定情况下检查了每一项的准确性,但不保证在其他地方将获得相同或相似的结果。尝试调整这些技术以适应自己环境的用户必须自担风险。
数据库设计考虑
chkR*i0ITPUB个人空间*a)~D7\vs;Q5\I$t+n[0q
取得高度并发性应该是指导 DB2 UDB 数据库初始设计的目标之一。在创建各个表的同时,可能要考虑许多影响并发性的功能。您可以在实现创建之后再添加某些功能(例如通过更改 DB2 UDB 对象),但另一些功能则无法添加,或者至少需要大量重复操作和/或打乱当前实现。因此,最好是一开始就考虑这些问题。ITPUB个人空间\cJ \h
ITPUB个人空间5c'X{_4tB
分区ITPUB个人空间 dp+@ sYI-E|
o KC$f/Z0我极力建议您将较大的表创建为分区表。一个分区表空间只包含单个分区表。要基于分区索引的键范围将该表分成多个分区。每个分区都是作为单独的数据集(dataset)来创建的,并且可以作为单独的实体由 DB2 UDB 加以处理。ITPUB个人空间E3V9FW"Gc/I \*S-p
ITPUB个人空间8Z _7b9V%c zS6o-s x
对于大量的批处理操作(INSERT、UPDATE、DELETE),您可以将大型作业划分成较小的作业,利用该分区表结构。许多这些较小的作业可以并发运行(对不同的分区进行),以便减少整个批处理操作的占用时间,从而使另一应用程序进程可以更早地访问该表。ITPUB个人空间 } q%{;~*S[w/L
ITPUB个人空间:ac{#noE#TMcou
分区表以类似的方式使实用程序作业只作用于所选择的分区,从而允许其他作业或应用程序进程并发访问表中的其他分区。在许多情况下,DB2 UDB 实用程序本身就具有利用分区表的能力,而在其他情况下,它只为用户提供了设计其工作负载的选项,以便支持 DB2 UDB 数据的更高并发性级别。
d1|PQ1?P!cbBN~h0
/R%a*TA9Q9e"G f0锁升级
}X7v(d3l8Y#D v0
if9q{HB0DB2 UDB 使用升级技术来平衡锁定性能开销的并发性需求。当一个应用程序进程持有单个表或表空间上的大量页面锁、行锁或 LOB 锁时,DB2 UDB 就获取该资源上的表或表空间锁,然后释放该资源上以前的页面锁、行锁或 LOB 锁。该过程称作 锁升级。
l;Ao*y2WsJf0ITPUB个人空间V'K @+d&g
如果一个使用分区锁定(带有 LOCKPART YES 的 CREATE 或 ALTER)的表上发生锁升级,那么,就只升级当前被锁定的分区,未锁定的分区仍旧未锁定。一旦表空间中发生了锁升级,那么就要用表空间锁来锁定随后访问的未锁定分区。
,Lz:Q,?x8t0ITPUB个人空间 dmj'Ez
在执行应用程序时,DB2 UDB 首先使用页面锁或行锁,并且只要该进程访问相对较少的页面或行,还会继续这样做。当该应用程序访问许多页面或行时,DB2 UDB 将变为使用表锁、表空间锁或分区锁。调用锁升级的准确时间是由 LOCKSIZE 和 LOCKMAX.的值决定的。
0WdK4_0b&M0
chkR*i0ITPUB个人空间*a)~D7\vs;Q5\I$t+n[0q
取得高度并发性应该是指导 DB2 UDB 数据库初始设计的目标之一。在创建各个表的同时,可能要考虑许多影响并发性的功能。您可以在实现创建之后再添加某些功能(例如通过更改 DB2 UDB 对象),但另一些功能则无法添加,或者至少需要大量重复操作和/或打乱当前实现。因此,最好是一开始就考虑这些问题。ITPUB个人空间\cJ \h
ITPUB个人空间5c'X{_4tB
分区ITPUB个人空间 dp+@ sYI-E|
o KC$f/Z0我极力建议您将较大的表创建为分区表。一个分区表空间只包含单个分区表。要基于分区索引的键范围将该表分成多个分区。每个分区都是作为单独的数据集(dataset)来创建的,并且可以作为单独的实体由 DB2 UDB 加以处理。ITPUB个人空间E3V9FW"Gc/I \*S-p
ITPUB个人空间8Z _7b9V%c zS6o-s x
对于大量的批处理操作(INSERT、UPDATE、DELETE),您可以将大型作业划分成较小的作业,利用该分区表结构。许多这些较小的作业可以并发运行(对不同的分区进行),以便减少整个批处理操作的占用时间,从而使另一应用程序进程可以更早地访问该表。ITPUB个人空间 } q%{;~*S[w/L
ITPUB个人空间:ac{#noE#TMcou
分区表以类似的方式使实用程序作业只作用于所选择的分区,从而允许其他作业或应用程序进程并发访问表中的其他分区。在许多情况下,DB2 UDB 实用程序本身就具有利用分区表的能力,而在其他情况下,它只为用户提供了设计其工作负载的选项,以便支持 DB2 UDB 数据的更高并发性级别。
d1|PQ1?P!cbBN~h0
/R%a*TA9Q9e"G f0锁升级
}X7v(d3l8Y#D v0
if9q{HB0DB2 UDB 使用升级技术来平衡锁定性能开销的并发性需求。当一个应用程序进程持有单个表或表空间上的大量页面锁、行锁或 LOB 锁时,DB2 UDB 就获取该资源上的表或表空间锁,然后释放该资源上以前的页面锁、行锁或 LOB 锁。该过程称作 锁升级。
l;Ao*y2WsJf0ITPUB个人空间V'K @+d&g
如果一个使用分区锁定(带有 LOCKPART YES 的 CREATE 或 ALTER)的表上发生锁升级,那么,就只升级当前被锁定的分区,未锁定的分区仍旧未锁定。一旦表空间中发生了锁升级,那么就要用表空间锁来锁定随后访问的未锁定分区。
,Lz:Q,?x8t0ITPUB个人空间 dmj'Ez
在执行应用程序时,DB2 UDB 首先使用页面锁或行锁,并且只要该进程访问相对较少的页面或行,还会继续这样做。当该应用程序访问许多页面或行时,DB2 UDB 将变为使用表锁、表空间锁或分区锁。调用锁升级的准确时间是由 LOCKSIZE 和 LOCKMAX.的值决定的。
0WdK4_0b&M0