`
zzg
  • 浏览: 124835 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论
阅读更多
INFORMIX使用锁技术解决在多用户访问数据库情况下,对同一对象访问的并发控制问题。INFORMIX支持复杂的、可伸缩性的锁技术。

锁的类型
INFORMIX有三种不同类型的锁。它们在不同的情况下使用。
1. SHARED锁
        SHARED锁只保留对象的可读性。当锁存在时,对象不能改变。多个程序可对同个对象加SHARED锁。
2. EXCLUSIVE锁
        只能使单个程序使用。在程序要改变对象时使用。当其他锁存在时,EXCLUSIVE锁不能使用。当使用了EXCLUSIVE 锁后,其他锁不能用于同一对象。
3. PROMOTABLE锁
        实现更新的目的。PROMOTABLE锁可以放在已经有SHARED锁的记录,但不能放在已经有PROMOTABLE锁和EXCLUSIVE锁的地方。当记录上无其他锁(含SHARED 锁)情况下,这时在程序准备改变锁的记录时,PROMOTABLE锁可以提升为EXCLUSIVE锁。如果在已有SHARED锁的记录上设置了 PROMOTABLE锁,在PROMOTABLE锁可以提升到EXCLUSIVE锁之前需要删除SHARED 锁。PROMOTABLE锁只能在INFORMIX Universal Server中支持。


锁的范围
INFORMIX对于数据锁定提供了三种不同的方式,范围由大到小分别是数据库、表、记录级锁。使用的时机要看应用状况而定。

1. 数据库级锁
        你可以用CONNECT, DATABASE, 或 CREATE DATABASE语句打开数据库。打开数据库的操作就在数据库上设置了SHARED锁。只要程序打开一个数据库,SHARED锁就会阻止其他程序删除数据库或在数据库上设置EXCLUSIVE锁。你可以用语句DATABASE database name EXCLUSIVE锁定整个数据库。若此时其他用户正在使用该数据库,该操作将返回错误。一旦设置了EXCLUSIVE锁,其他程序就不能打开数据库,因为打开时要放置一个SHARED锁。只有数据库关闭时,数据库锁才释放。你可以用DISCONNECT或CLOSE DATABASE显示地处理,也可以运行其他的DATABASE语句隐含的处理。一般数据库级EXCLUSIVE锁是独占数据库资源,防止其他程序访问数据库。它使得程序非常简单,不会产生并发效果。常用在非高峰时期要改变大量数据时如数据库备份过程。

2. 表级锁
        INFORMIX提供两种模式表级锁:EXCLUSIVE MODE 和SHARE MODE。你可以锁整个表。在某些情况下,这个操作是自动进行。当INFORMIX处理下列语句时,一般锁整个的表:ALTER INDEX 、ALTER TABLE 、CREATE INDEX、DROP INDEX 、RENAME COLUMN、RENAME TABLE 。该语句结束或事务结束会释放该锁。在某些查询语句中,INFORMIX也自动锁整个表。你可以用LOCK TABLE语句显示地锁整个表。该语句允许你对整个表设置EXCLUSIVE锁或SHARED锁。当你程序从表中读取数据时,SHARED锁防止表中数据更新。INFORMIX Universal Server 通过设置隔离级别实现更大程度并发数据保护。表级EXCLUSIVE锁防止对同个表的并发使用。因此,如果其他许多程序要使用该表时,系统性能会受到严重影响。类似数据库级EXCLUSIVE锁,表级EXCLUSIVE锁常用在非高峰时期要改变大量数据时。例如,有些应用在高峰期间并不更新表,它们可以在非高峰期间定期以批处理方式更新。
通过UNLOCK TABLE table name 解除锁。当存在事务时,事务结束时解除锁。

3. 记录级、页级、键字级锁
        表的一个记录是可设置锁的最小对象。一个程序可以锁一个记录或记录的集合,同时其他程序可以操作同一个表的其他记录。Universal Server 以磁盘页面(disk pages)为单位存储数据。一个磁盘页面包含一个或多个记录。在有些情况下,页级锁比单个锁更好些。其他数据库服务器可能不存在页级、键字级锁。

        在Universal Server上,当你创建表时,你可以选择使用记录级锁或页级锁。其他的数据库服务器不提供这种选择。页级、记录级锁有相同的效果。当Universal Server需要锁一个记录时,根据表创建时的锁模式,锁这个记录或记录所在的页面。在一定情况下,数据库服务器需要锁一个不存在的记录。它的效果相当于在记录将要存在的地方放一个锁。当表使用记录锁时,对假想的记录使用键字锁。当表使用页级锁时,含有或可能含有键字的索引页将被设置键级锁。

锁的时期

        程序控制数据库级锁的时期。数据库关闭时,数据库锁级也就释放。表级、记录级、索引级锁的时期依赖于使用的SQL语句以及是否使用事务。如果数据库没有使用事务,也就是说,事务日志不存在并且你没有使用COMMIT WORK语句,当运行UNLOCK TABLE语句时,表级锁就释放。当使用了事务时,事务结束,表级、记录级、索引级锁都释放。修改时锁的处理
当数据库服务器通过一个更新游标取一条记录时,它在该记录上设置一个PROMOTABLE锁。如果这个动作成功,数据库服务器知道其他程序不能改变此记录。因为PROMOTABLE锁不是独占的,其他程序能够继续读这条记录。由于在取此记录的程序执行UPDATE、DELETE语句或简单地取下一条记录之前,它可能花一些时间。这样就提高了性能。当它改变一个记录时,数据库服务器在这条记录上设置一个EXCLUSIVE锁。如果它已经有一个 PROMOTABLE锁,它将锁改为EXCLUSIVE状态。

        EXCLUSIVE锁的时期依赖于是否使用事务。如果没有使用事务,被修改的记录写到磁盘上就会释放该锁。当使用了事务时,锁就会保持到事务的结束。这个动作防止其他程序使用可能回滚到原来状态的记录。

        当使用了事务时,只要删除记录键级锁就会设置。使用键级锁解决下列错误:程序A删除一个记录,程序B插入有同样键的记录。程序A回滚事务,使数据库服务器恢复了删除的记录,这时程序B插入的记录怎么办?通过锁索引,数据库服务器等到程序A提交事务时才插入记录。

        由于 Universal Server数据库服务器管理自己的锁,所以它能提供不同类型的锁。其他的数据库服务器是通过操作系统的特性实现锁,所以不能提供多种选择。有些操作系统通过操作系统服务方式向外提供锁函数。在这些系统,数据库支持SET LOCK MODE语句。而有些操作系统不支持内核级的特性,数据库这时通过在数据库目录下产生小文件实现锁。这些文件带有.lok后缀。如果你的程序使用单个 SELECT语句或没有用FOR UPDATE声明的游标提取一个记录,此记录不管是否被一个未完成的交易上锁会马上被提取。这样能产生最好的性能。当你使用FOR UPDATE声明的游标时,它在提取前将当前记录上锁。如果当前记录已经有锁,随作选择模式的不同,程序会等待或返回错误。当取下一个记录时,数据库看当前记录是否更新(使用带WHERE CURRENT OF 的UPDATE

锁的模式
锁的模式决定程序遇到被锁的数据会产生怎样的结果。当程序要提取或修改一个上锁的记录时,会有下面几种情况:
        1、 数据库马上通过SQLCODE变量或SQLSTATE结构给程序返回一个错误代码。
        2、 在数据解锁前,数据库将程序挂起。
        3、数据库将程序挂起一段时间。如果锁还未解,数据库给程序返回一个错误代码。

你可以通过SET LOCK MODE模式选择以上结果。
如果你喜欢程序等待(对大多数程序而言这是最好的选择),运行下列语句:SET LOCK MODE TO WAIT。
        当设置了锁模式后,程序常忽视其他并发程序的存在性。如果程序需要访问其他程序已上锁的记录时,它等待别的程序解锁,然后继续。延迟的时间常不可预测。

        等待解锁不利的一面就是可能会等待很长时间。如果不能接受很长延迟,程序可以运行下列语句:SET LOCK MODE TO NOT WAIT选择不等待。当程序需要一个锁记录时,它马上返回一个错误代码,且当前的SQL语句终止。这时,程序必须回滚当前的交易再试一次。程序开始时,数据库初始设置为不等待。

        当你使用UNIVERSAL SERVER时,你有另外的选择。你可以让数据库设置等待时间的上限。你可用下列语句:SETLOCK MODE TO WAIT 18让数据库有18秒等待上限。若期间锁还没有解开,将返回错误代码。

        在每个程序都选择了锁等待模式情况下,有可能出现死锁。死锁是程序之间相互阻塞,每个程序在其他程序要访问的对象上设置了锁。UNIVERSAL SERVER在单个网络服务器情况下会马上检测到死锁。如果程序选择了锁等待模式,通过给程序返回错误代码,你就知道你遇到了死锁。而在多个数据库服务器的情况下,UNIVERSAL SERVER不能马上检测到。每个数据库服务器都设置锁等待的上限。如果超时,数据库服务器就认为发生了死锁且返回相关的错误代码。数据库管理员可以设置和修改等待时间的上限。
分享到:
评论

相关推荐

    informix锁表相关

    本篇文章将深入探讨Informix锁表相关的知识,包括锁的类型、工作原理以及如何有效地管理和使用锁。 一、锁的类型 Informix 支持多种类型的锁,这些锁主要分为两大类:行级锁和表级锁。 1. 行级锁:这种锁针对...

    INFORMIX锁技术

    ### INFORMIX锁技术详解 #### 一、概述 INFORMIX数据库系统为了确保数据的一致性和准确性,提供了多种锁机制来控制并发访问中的数据修改行为。锁是数据库管理系统用来控制用户之间的数据共享和独占访问的一种手段...

    informix锁表处理

    在Informix数据库管理系统中,锁表处理是一项关键操作,用于解决并发访问时可能出现的死锁问题或因长时间运行的事务导致的阻塞。以下是对标题和描述中涉及的知识点的详细说明: 1. **锁机制**: Informix支持多种...

    informix数据库 informix解锁问题 informix性能,空间监控,计算单条数据大小

    informix数据库 informix解锁问题 informix性能,空间监控,计算单条数据大小 在数据库服务器上行 执行 dbaccess sysmaster systermastertest.sql 就可看见 数据库当前空间使用比例

    informix数据库表记录加解锁的常用方法

    而ROLLBACK则回滚事务,取消所有更改,记录的锁也会被释放。 5. **隐式锁定**:在默认的隔离级别下,Informix使用隐式锁定。这意味着在INSERT、UPDATE和DELETE操作时,系统会自动对涉及的记录加锁,直到事务结束。 ...

    informix查看死锁与解锁

    informix锁查看和解锁,可以借鉴一下,有参考意义,还不错

    Informix查锁方法

    ### Informix查锁方法 #### 引言 在使用Informix数据库服务器时,用户可能会遇到应用程序执行速度突然减慢甚至完全停止的情况。这种情况通常是由数据库表被锁定导致的,即所谓的“锁冲突”。当出现锁冲突时,相关...

    如何解决informix数据库锁表问题.doc

    Informix 数据库锁表问题解决方案 在 Informix 数据库中,锁表问题是一个常见的错误,会导致系统性能下降和数据不一致。锁表问题的解决需要对数据库进行深入的分析和诊断。本文将讨论 Informix 数据库锁表问题的...

    INFORMIX使用锁技术

    INFORMIX 数据库管理系统采用了锁技术来解决在多用户环境下对数据库对象的并发访问控制问题。锁机制确保了数据的一致性和完整性,防止了多个用户同时修改同一数据导致的冲突。INFORMIX 支持复杂且可扩展的锁策略,以...

    informix 12.1官方指南(中文)

    5. **事务处理与并发控制**:讲解Informix的事务管理机制,包括ACID属性、锁机制和并发控制策略,确保数据的一致性和完整性。 6. **备份与恢复**:提供Informix的备份策略和恢复技术,包括增量备份、完整备份和热...

    informix入门指南v9.4

    5. **并发控制**:了解锁机制,包括行级锁、表级锁和页级锁,以及死锁检测和避免策略。 6. **备份与恢复**:学习如何进行全量备份、增量备份和日志备份,以及如何在数据丢失或故障后恢复数据。 7. **性能优化**:...

    informix

    4. **性能监控与调优**:理解Informix的性能指标,如查询执行计划、缓冲区管理和锁管理,学习如何通过监控和调整这些参数来提升系统性能。 5. **安全性**:学习如何设置用户权限,实施访问控制,以及使用SSL加密...

    INFORMIX函数大全及相关资料

    INFORMIX的资料太难找了,自己整理了一些,包括: 1、INFORMIX函数大全.pdf...3、informix的事务、并发控制、锁机制、隔离级别.docx 4、oracle和informix的基础区别.docx 5、Shell脚本和Informix的交互实现技巧.docx

    informix 健康检查

    【标题】:Informix数据库健康检查与锁表处理 【正文】: Informix数据库作为一款高效、可靠的数据库管理系统,其健康检查是确保系统稳定运行的关键环节。健康检查可以帮助管理员识别潜在的问题,预防性能下降和...

    informix数据库管理教程

    此外,由于使用文件锁机制,数据的一致性较差。 - **Informix Online 5.0** 这是第一个客户端/服务器(Client/Server, C/S)架构的版本,引入了共享内存机制以及磁盘管理机制,提高了处理效率。然而,它限制了...

    Informix12.1 -201406-官方训练营的培训资料

    4. **Informix的隔离级别与锁机制** (1.5_Informix 隔离级别与锁机制.pdf) 这份文档阐述了数据库事务处理中的不同隔离级别(读未提交、读已提交、可重复读、串行化),以及Informix如何实现这些级别的锁管理机制,...

    informix精华集锦

    - 锁机制与死锁处理 - 并发控制策略,如多版本并发控制(MVCC) 5. **分布式数据库** - Informix的分布式数据库体系结构 - 数据复制技术,如Informix Dynamic Server (IDS)的Shadow Tables和Data Replication - ...

    Informix 常见问题处理

    总结,Informix 数据库的日常维护和问题处理需要对系统有深入理解,包括监控日志状态、诊断锁冲突和管理长事务。通过合理的配置、优化和及时响应,可以有效地避免和解决这些问题,确保数据库系统的稳定运行。

    informix sql教程指南

    6. **事务与并发控制**:解释事务的概念,ACID属性,以及锁机制在并发操作中的应用,确保数据的一致性和完整性。 7. **触发器与事件调度**:探讨触发器的定义和用途,如何在特定操作后自动执行特定任务;同时,介绍...

    IBM_Informix.rar_informix_informix pdf

    学习锁的类型、级别和策略,有助于优化并发性能。 7. **性能优化** 通过索引、查询优化器和内存管理等手段,Informix能提供高效的查询性能。理解这些优化策略,并根据实际需求进行调整,能够显著提升系统性能。 8...

Global site tag (gtag.js) - Google Analytics