DB2通用数据库的并发性

在数据库管理系统(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 手册中找到关于这点的更多详细描述。

时间: 2024-09-20 15:26:43

DB2通用数据库的并发性的相关文章

Windows系统下安装DB2通用数据库企业版的步骤

在控制服务器和每个您将安装中央数据仓库.数据集市或代理站点的Windows系统上,完成以下步骤来安装DB2通用数据库: 请使用随Tivoli Data Warehouse提供的DB2安装介质.这确保您可获取正确的版本. 以具有足够权限的用户身份登录到计算机.在Windows系统上,您用来登录的帐户必须: 本地定义的,属于本地 Administrators 组. 具有以下高级用户权限: ◆以操作系统方式操作: ◆创建记号对象: ◆增加限额: ◆替换进程级记号. 将DB2安装介质插入 CD-ROM

中国银联应用IBM DB2通用数据库的案例

面对提高银行卡信息转接处理能力,打造国际知名银行卡品牌的目标,中国银联需要对先前陈旧的数据库平台进行改造,全面提高数据库平台的业务数据处理能力.可用性和容灾性能. * 为什么选择IBM? IBM DB2是商业数据库的知名品牌,在金融领域的数据库应用方面具有丰富的经验.而且IBM能为企业级数据库的应用提供完善的技术支持. * 方案 IBM DB2 UDB 8.1 * 回报 业务处理能力的全面提升 -性能:峰值3000TPS,单笔交易处理时间<1秒: -交易量:峰值5200万笔/天,平均2400万笔

用PHP开发IBM Cloudscape和DB2通用数据库应用程序

使用带有 Apache 2 的 PHP 的统一 ODBC 扩展 简介:学习如何配置 IBM Cloudscape 10.0 和 IBM DB2 Universal Database(DB2 UDB)Version 8.2 服务器,以便从 PHP 4.x 和 PHP 5.x 进行访问.使用统一的 ODBC 扩展编写数据库应用程序.克服可滚动游标导致的常见性能问题,并避免存储过程中的功能限制. PHP 的统一 ODBC 扩展提供了一个公共接口,用于开发通过开放式数据库连接(Open Database

事务策略: 高并发策略-学习如何为支持高用户并发性的应用程序实现事务策略

简介:事务策略 系列文章的作者 Mark Richards 将讨论如何在 Java 平台中为具有高吞吐 量和高用户并发性需求的应用程序实现事务策略.理解如何进行折衷将帮助您确保高水平的数据完整性和 一致性,并减少随后开发流程中的重构工作. 我在本 系列 的前几篇文章中所介绍的 API 层 和 客户端编排策略 事务策略是应用于大多数标准业 务应用程序的核心策略.它们简单.可靠.相对易于实现,并且提供了最高水平的数据完整性和一致性. 但有时,您可能需要减小事务的作用域以获取吞吐量.改善性能并提高数据

WCF的并发性问题

问题描述 使用控制台程序承载WCF,会影响WCF的并发性吗? 解决方案 解决方案二:并发一般是指服务器,你做个客户端有啥影响.WCF效率很差.并发更差.IIS本身就是为了简单易用而牺牲了相当大的效率.解决方案三:和控制台没有关系,都需要考虑并发.解决方案四:WCF出性能问题最常见的情况下,你在客户端看到的异常信息是"超时"异常.当然可能有的人说"遇到超时,那么就增加超时等待时间啊!",这显然是错误的.因为不合理的超时本身就是不可容忍的错误,怎么能用设置更长的超时时间

Java中Clojure如何抽象并发性和共享状态

在所有 Java 下一代语言中,Clojure 拥有最激进的并发性机制和功能.Groovy 和 http://www.aliyun.com/zixun/aggregation/16945.html">Scala 都为并发性提供了改善的抽象和语法糖的一种组合,而 Clojure 坚持了它始终在 JVM 上提供独一无二的行为的强硬立场.在本期 Java 下一代 中,我将介绍 Clojure 中众多并发性选项的一部分.首先是为 Clojure 中易变的引用提供支撑的基础抽象:epochal 时间

使用设计模式构建通用数据库访问类

访问|设计|数据|数据库 使用设计模式构建通用数据库访问类 在应用程序的设计中,数据库的访问是非常重要的,我们通常需要将对数据库的访问集中起来,以保证良好的封装性和可维护性.在.Net中,数据库的访问,对于微软自家的SqlServer和其他数据库(支持OleDb),采用不同的访问方法,这些类分别分布于System.Data.SqlClient和System.Data.OleDb名称空间中.微软后来又推出了专门用于访问Oracle数据库的类库.我们希望在编写应用系统的时候,不因这么多类的不同而受到

Oracle的闩锁、锁定及并发性

数据库系统本身是一个多用户并发处理系统,在同一个时间点上,可能会有多个用户同时操作数据 库.这里就涉及两个很重要的问题. 这些用户之间的操作不会互相破坏.比如两个用户同时在相同的物理位置上写数据时,不能发生互 相覆盖的情况.这叫串行化,也就是说,即便两个用户同时写,也必须有先后,一个用户写完,另一个 用户继续写.串行化会降低系统的并发性,但这对于保护数据结构不被破坏来说则是必需的. 在满足串行化的前提下,如何将并发性提升到最大. 在Oracle数据库中,通过闩锁(latch)和锁定(lock)来

《Java安全编码标准》一1.7 并发性、可见性和内存

1.7 并发性.可见性和内存 可以在不同线程之间共享的内存称为共享内存(shared memory)或内存堆(heap memory).本节使用变量(variable)这个名词来代表字段和数组元素[JLS2005].在不同的线程中共享的变量称为共享变量.所有的实例字段.静态字段以及数组元素作为共享变量存储在共享内存中.局部变量.形式方法参数以及异常例程参数是从来不能在线程之间共享的,不会受到内存模型的 影响. 在现代多处理器共享内存的架构下,每个处理器有一个或多个层次的缓存,会定期地与主存储器进