级别: 中级 【程序编程相关:访问 DB2 Universal Dat】
【推荐阅读:处理 ASP.NET Web 页面上的 】 【扩展信息:SQL Links 迁移到 dbExpr】fred whitlark
db2 顾问, ibm 2004 年 8 月 并发性是数据库管理系统具有的一种功能,用以允许多个用户同时访问数据,同时维护数据的完整性与一致性.本文针对在 db2 for z/os 环境中提供并发性,提供了一些通用指南与建议.序言
本文的目的是为 ibm® 商业合作伙伴提供有关 z/os® 环境中 db2® universal database™(udb)的数据并发性的重要信息.本文试图将多个来源中极其大量的材料联合起来,然后尽可能高效地显示该信息.但不打算过于全面或详尽地进行介绍.我打算讨论那些最常导致检测与解决并发性问题的因素.每种可能的解决方案与每一项潜在的考虑都是无法预期的,就更不用说涵盖整个计划范围了.我希望本文提供一些通用指南,以帮助 db2 udb 客户在自己的环境中取得高度数据并发性.本文将是一个在任何给定装置上处理并发性问题的较好起始点.
我假定您对于 z/os 环境中的 db2 udb 已经有了基本的理解.本文的前部分讨论概念与定义,以便使大家处于同一起跑线上.我的建议本质上有点倾向于通用化,但我也并没有总是详细地叙述技术描述与语法规范.关于这些问题的更多详细信息,我建议您查看为安装在客户端的 db2 udb 版本提供的最新 ibm 文档.
本文的通用设计点是 db2 udb v7. 虽然已经发布了 z/os 上的 db2 udb v8,但有可能在数月之后,大多数 ibm 客户才会为其生产系统实现 db2 udb v8 新功能模式(new function mode,nfm).这里还要考虑另一个因素.虽然 db2 udb 的每个新版本在普遍可用之前,都经过了 ibm 以及客户环境的广泛测试,但与还未被广泛.普遍使用的版本相比较,客户极可能更信赖基于 db2 udb 早期版本的通用建议.经验法则等(因为实际经验的深度与广度可以验证结论).
免责声明:本文档包含的信息是没有经过任何形式的 ibm 测试.该信息的使用或这些技术的实现是用户的责任,要依靠用户的能力进行评估,并将其集成到客户特有的操作环境中.虽然 ibm 已经在特定情况下检查了每一项的准确性,但不保证在其他地方将获得相同或相似的结果.尝试调整这些技术以适应自己环境的用户必须自担风险.
概念背景与术语
定义
在数据库管理系统(dbms)的领域中,术语“并发性”用于表示不止一个应用程序基本上(从用户的角度来看)同时访问同一数据的能力.因为 dbms 的主要优点之一就是可以在多个用户与多个应用程序中共享数据,所以数据库系统应该提供一种管理并发访问数据的方法.dbms 必须确保维护数据的一致状态与数据的完整性.
取得该效果的一种方法就是实施只串行(serial-only)模式来处理数据库请求.即每个事务都要等待另一事务(具有更高的优先权或者比它早启动)完成其工作.然而,对于现在的在线系统与客户异常来说,这种处理方式所产生的性能水平简直令人无法接受.
而另一种方法就是,dbms 可以通过 锁的方式管理多个应用程序对数据的访问.锁是一种软件机制,用于在维护数据完整性与一致性的同时,允许尽可能大的吞吐量(通过最大限度地并发访问数据).
并发性控制的重要性
如果没有控制并发性的有效方法,就可能损害数据的完整性与一致性.dbms 必须保护数据库,防止发生下列状况: 丢失更新—— 假设应用程序 a 与应用程序 b 同时读取数据库中的同一行,并且都为其中某一列计算新值.如果应用程序 a 先用其新值更新该行,随后应用程序 b 又更新同一行,那么第一次的更新(由应用程序 a 执行的)就会丢失. 不可重复读—— 某些应用程序进程可能要求完成以下事件序列:程序 a 从表中读取特定的一行,然后继续进行其他的 sql 请求.稍后,程序 a 再次读取开始的那一行,并且必须在所有的列中找到与第一次读取相同的值.如果缺乏合适的并发性控制,另一应用程序就可能在这两次读取操作之间修改该行数据. 访问未提交的数据—— 应用程序 a 更新一行中的某些列的值,而在提交该修改之前,应用程序 b 读入该行的新(更新)值.如果应用程序 a 接着又“撤销”更新值(通过程序逻辑中的 sql rollback 语句,或者因为发生错误由 db2 udb 自动进行回滚),那么,应用程序 b 对该行的处理就是基于未提交的(因而可能是不正确的)数据进行的.在维护数据完整性的同时,提供多个应用程序同时访问数据的能力称作 并发性控制.
锁
锁是一种由 db2 udb 用于完成并发性控制的软件机制.锁实质上就是一个控制块,将 db2 udb 对象或资源与应用程序关联起来,并控制其他应用程序如何访问同一对象或资源.与 db2 udb 资源有关联的应用程序被称为“持有”或“拥有”该锁.通过使用锁,db2 udb(管理该数据库)可以防止发生上述几类问题.db2 udb 与另一 mvs 地址空间 irlm 配合管理这些锁.irlm 将跟踪这些锁及其所有者,以确定应用程序请求的 db2 udb 资源是否可用于该类工作.资源可以是 锁定的或 共享的,这取决于当前资源上的锁的“持有者”所进行的处理类型,以及请求应用程序所预期的处理类型.
锁模式
最常用的两种锁模式是 共享的与 排他的.共享锁与只读操作有关联,这意味着持有该锁的应用程序可以读取数据,而其他应用程序也可以读取该数据.排他锁与写操作有关联,这意味着持有该锁的应用程序有资格更新数据,但在锁所有者完成更新(将修改提交给数据库)并释放该锁之前,其他应用程序无法使用该数据.db2 udb 与 irlm 使用其他类型与子类型的锁模式来实现锁定与并发性控制.您可以在 db2 udb administration 手册中找到关于这点的更多详细描述.
... 下一页