`
izuoyan
  • 浏览: 9224305 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

数据库并发处理

阅读更多
一、并发处理 数据库的特点就是数据的集中管理和共享。在通常情况下总是有若干个事务并发地运行,这些并行的事务可能并发地存取相同的数据。因此,数据库管理系统的一个重要任务就是要有一种机制去保证这种并发的存取和修改不破坏数据的完整性,确保这些事务能正确地运行并取得正确的结果。我们知道,事务并发执行时若不加控制的话,将导致不正确的结果和数据库的不一致状态。为保证数据库数据正确地反映所有事务的更新,以及在一事务修改数据时其它事务不同时修改这个数据,数据库系统用锁来控制对数据的并发存取。二、ORACLE的并发处理机制无需任何说明,ORACLE自动提供行级锁,它允许用户在没有冲突的情况下更新表中不同的行。行级锁对联机事务处理非常有用。 1、ORACLE锁 ORACLE锁的类型在正常情况下,ORACLE会自动锁住需要加锁的资源以保护数据,这种锁是隐含的,叫隐含锁。然而,在一些条件下,这些自动的锁在实际应用时并不能满足需要,必须人工加一些锁。这些人工加的锁叫显示锁。下面指明了会产生隐含锁的SQL语句: INSERT; UPDATE; DELETE; DDL/DCL语句。下面指明了会产生显示锁的SQL语句: SELECT FOR UPDATE; LOCK TABLE INXXX MODE。解决读的不可重复性可以用下面的方法。在ORACLE中,用SELECT FOR UPDATE对预期要修改的记录加行排它锁(X),对表加行共享锁(RS)。它常用于要锁住一行,但不去真的修改这一行。锁之间是有相互作用的。例如,更新时会对表加RX锁,对行加X锁,而只有RS锁和RX锁允许再加RX锁。因此,当存在RS和RX锁时,表允许更新。再比如,当执行DDL和DCL语句时,会对表加排它锁X,而在存在X、RS、SRX、RX和S锁的前提下,都不能再加X锁。因此,当存在X,RS,SRX,RS或S锁时,不能对表做DCL和DDL操作。这样,数据库会自动防止一个用户更新表中的数据,而其他用户在同时修改表的结构。 2、ORACLE只读事务 ORACLE支持只读事务。只读事务有以下特点: *在事务中只允许查询 *其它事务可修改和查询数据 *在事务中,其它用户的任何修改都看不见只读事务的写法为: SET TRANS ACTION READONLY SQL语句 COMMIT,ROLLBACK,DDL结束只读事务 3、事务一致性的级别 事务是定义和维护一致性的单位,封锁就是要保证这种一致性。如果对封锁的要求高会增加开销,降低并发性和效率;有的事务并不严格要求结果的质量(如用于统计的事务),如果加上严格的封锁则是不必要和不经济的。因此有必要进行进一步的分析,考察不同级别的一致性对数据库数据的质量及并行能力的影响。一致性级别定义为如下的几个条件: 1) 事务不修改其它任何事务的脏数据。脏数据是被其它事务修改过,但尚未提交的数据。 2) 在事务结束前不对被修改的资源解锁。 3) 事务不读其它任何事务的脏数据。 4) 在读前对数据加共享锁(RS)和行排它锁,直至事务结束。 *满足条件1的事务叫第0级事务。 *满足条件1和2的事务叫第1级一致性事务。 *满足条件1、2和3的事务为2级一致性事务。 ORACLE的读一致性保证了事务不读其它事务的脏数据。 *满足条件1、2、3和4的事务叫第3级一致性事务。由ORACLE的三个性质:自动加隐式锁、在事务结束时释放锁和读一致性,使ORACLE成为自动满足以上的0、1和2级一致性事务。因此,ORACLE自动防止了脏读(写-读依赖)。但是,ORACLE不能自动防止丢失修改(写-写依赖),读的不可重复性(读-写依赖),彻底解决并发性中的问题还需满足第4个条件(3级一致性事务),这需要程序员根据实际情况编程。方法如下: *如果想在一段时间内使一些数据不被其它事务改变,且在本事务内仅仅查询数据,则可用SETTRANSACTIONREADONLY语句达到这一目的。 *如果想在一事务内修改一数据,且避免丢失修改,则应在读这一数据前用SELECTFORUPDATE对该数据加锁。 *如果想在一事务内读一数据,且想基于这一数据对其它数据修改,则应在读数据前对此数据用SELECTFORUPDATE加锁。对此种类型的应用,用这条SQL语句加锁最恰当。 *如果想避免不可重复读现象,可在读前用SELECTFORUPDATE对数据加锁,或用SET TRANS ACTION READONLY设置只读事务。三、SYBASE的并发处理机制 SYBASE的并发处理方法与ORACLE类似,但在很多方面不一样。SYBASE有两种粒度的封锁,一种的粒度是页,另一种的粒度是表。SYBASE根据SQL语句的情况决定用页封锁还是用表封锁。 1、页级锁 页级锁有以下所始的三类: *SHARED:在读操作时加共享锁。在缺省状态下,在读操作完成后释放共享锁。 *EXCLUSIVE:在更新操作时加排它锁。在缺省状态下,在事务完成后释放排它锁。 *UPDATE:在修改和删除操作的初期(读到被修改或删除的页时)加修改锁。在表上加了修改锁之后,还可以再加共享锁,但不能再加修改和排它锁。在进行修改和删除操作时,如果没有共享锁存在,修改锁则转化为排它锁。此锁的目的是为了防止死锁。SYBASE仅当在WHERE子句中包含索引列时才会使用页级的排它锁和修改锁。 2、表级锁 表级锁有以下所示的三类: *INTENT:当表中存在页级的排它锁和共享锁时,在表上加意向锁。在所有的页级锁释放后,意向锁随着释放。 *SHARED:在读操作时加共享锁。在缺省状态下,在读操作完成后释放共享锁。 *EXCLUSIVE:在更新操作时加排它锁。在缺省状态下,在事务完成后释放排它锁。 3、请求锁 请求锁用以防止共享锁一个接一个无休止地加在表上,从而写事务(要加排它锁)无法进行。 4、SYBASE的封锁级别 在SYBASE根据ANSI标准定义事务的封锁级别: (1) 级别1:脏读 (2) (2)级别2:不可重复读 (3) (3)光标带来的当前值混乱 (4) SYBASE的缺省一致性级别为1。如果要达到一致性级别2和3,必须使用HOLDLOCK关键字把共享锁持续到事务的结束。方法如下: SELECT*FROM AUTHS HOLDLOCK WHERE AUTHOR_CODE='A00001' SYBASE还可以通过T-SQL的SET命令改变SYBASE的一致性级别,从而使SYBASE自动在SELECT语句中加HOLDLOCK关键字: SET TRANS ACTION IS OLATION LEVEL3 5、在SYBASE中提高并发效率的方法 *避免在表中特定的页上多个用户过多的封锁。 *避免在人机交互的应用中定义事务,这样会使某个用户长时间封锁住表(如去接电话),使其他用户持续等待。 *使事务尽量的短。 *仅当必要时才使用HOLDLOCK关键字。
分享到:
评论

相关推荐

    三份数据库并发处理方案

    数据库并发处理是数据库系统中的重要概念,特别是在多用户环境下,多个事务同时访问和修改数据库时,如何保证数据的一致性、完整性和隔离性是至关重要的。本方案将深入探讨并发控制技术,确保在高并发场景下数据库的...

    数据库并发控制PPT学习教案.pptx

    数据库并发控制PPT学习教案 数据库并发控制是数据库管理系统(DBMS)中一个非常重要的概念。它是指在多个事务同时访问数据库时,如何确保事务之间的一致性和隔离性,防止数据不一致和丢失。 在数据库并发控制中,...

    数据库并发事务处理机制详解与代码实践

    数据库并发事务处理是确保数据一致性和完整性的关键。通过理解事务的ACID特性、隔离级别和并发控制技术,开发者可以更有效地设计和优化数据库系统。提供的代码示例展示了如何在实际数据库操作中应用这些概念,帮助...

    数据库并发控制的基本方法

    ### 数据库并发控制的基本方法 #### 一、并发控制概览 在数据库系统中,**并发控制**是一项关键的技术,用于确保多个事务能够同时访问数据而不引起数据不一致的问题。并发控制的目标是使得多个事务的并发执行看...

    数据库的并发控制

    ### 数据库并发控制详解 #### 引言 随着信息技术的发展,数据库系统已成为现代信息系统的核心组成部分。数据库技术的主要目的是实现对大量数据的有效管理,确保数据的完整性和一致性。尤其是在多用户环境中,如何...

    关系型数据库的并发操作

    这里我们将深入探讨“关系型数据库的并发操作”这一主题,重点关注Java、JDBC、数据库并发控制以及如何连接数据库。 首先,Java是一种广泛使用的编程语言,它的Java Database Connectivity (JDBC) API使得开发者...

    《数据库原理》并发操作、串行调度

    《数据库原理》并发操作、串行调度 数据库原理中, 并发操作和串行调度是两个非常重要的概念。并发操作是指多个用户同时访问数据库时可能出现的数据不一致性问题,而串行调度是指对并发操作的正确调度,以避免数据...

    数据库并发控制:策略、技术与最佳实践

    本文将深入探讨数据库并发问题的常见表现、并发控制的策略和技术,以及实施并发控制的最佳实践。 数据库并发控制是确保数据一致性、防止数据竞争和死锁的重要手段。通过合理设置事务隔离级别、使用锁定机制、实施...

    数据库并发控制:确保数据一致性与性能优化

    数据库并发控制是确保多个用户或应用程序能够同时访问数据库时,数据的完整性和一致性得到保障的重要机制。此外,它还旨在优化数据库的性能,避免因并发操作导致的数据竞争、死锁等问题。本文将详细介绍数据库并发...

    数据库并发控制:策略、技术和实践

    本文将深入探讨数据库并发问题的处理方法,包括并发控制的基本概念、常见的并发控制技术,以及实际应用中的策略和实践。 数据库的并发控制是确保数据一致性和系统性能的重要环节。通过理解并发控制的基本概念、技术...

    数据库并发控制,封锁,并发调度学习攻略

    根据提供的文件信息,我们可以深入探讨数据库并发控制的关键概念和技术,特别是封锁和并发调度的重要性及其应用场景。 ### 数据库并发控制 数据库并发控制的核心在于确保多用户环境下的数据完整性及一致性。在多...

    数据库并发操作

    数据库并发操作是数据库管理系统在处理多个用户同时访问和操作数据时的一种机制。在多用户环境中,比如Web应用程序或企业级系统,多个用户可能同时请求读取或修改同一份数据库资源,这时就需要有效的并发控制策略来...

    数据库思维导图——并发控制

    数据库思维导图——并发控制 并发控制 多事务执行方式 (1)事务串行执行 每个时刻只有一个事务运行,其他事务必须等到这个事务结束以后方能运行 不能充分利用系统资源,发挥数据库共享资源的特点 (2)交叉并发方式...

    数据库PPT关于并发控制

    数据库并发控制是数据库管理系统中的关键组成部分,其目的是确保在多用户环境下,多个事务同时执行时,数据的完整性和一致性不受影响。并发控制的主要任务是防止事务间的不正确交互,如脏读、不可重复读和幻读等现象...

    数据库的事务处理与并发控制

    数据库处理的经典资料: 叫你处理事务 如何并发处理 瞧瞧吧 机不可失哟

    数据库并发测试.pdf

    1. **模拟多用户并发测试**:这种方法通常通过测试工具(如LoadRunner、JMeter等)模拟多个最终用户的行为,来检测系统的并发处理能力。然而,这种方式的局限在于,由于用户通常通过应用程序间接访问数据库,中间...

    java高并发写入用户信息到数据库的几种方法

    Java 高并发写入用户信息到数据库的几种方法 在 Java 高并发环境下,写入用户信息到数据库可能会出现一些问题,例如多个用户同时写入导致数据不一致或重复写入。为了解决这些问题,需要使用一些特殊的方法来确保...

    数据库系统概论课件

    1. **数据库并发处理**: 在多用户环境中,多个用户同时对数据库进行读写操作是常见的需求。并发处理确保这些操作能够有序、无冲突地执行。它涉及到事务管理、锁机制、多版本并发控制(如MVCC)和死锁检测与避免...

Global site tag (gtag.js) - Google Analytics