- 浏览: 959880 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (385)
- 搜索引擎学习 (62)
- 算法 (1)
- 数据库 (15)
- web开发 (38)
- solr开发 (17)
- nutch 1.2 系统学习 (8)
- cms (1)
- 系统架构 (11)
- linux 与 unix 编程 (16)
- android (15)
- maven (1)
- 关注物流 (1)
- 网址收集 (1)
- 分布式,集群 (1)
- mysql (5)
- apache (1)
- 资料文档备份 (7)
- 上班有感 (0)
- 工作流 (15)
- javascript (1)
- weblogic (1)
- eclipse 集成 (1)
- JMS (7)
- Hibernate (1)
- 性能测试 (1)
- spring (6)
- 缓存cache (1)
- mongodb (2)
- webservice (1)
- HTML5 COCOS2D-HTML5 (1)
- BrowserQuest (2)
最新评论
-
avi9111:
内陷到android, ios, winphone里面也是随便 ...
【HTML5游戏开发】二次开发 BrowserQuest 第一集 -
avi9111:
呵呵,做不下去了吧,没有第二集了吧,游戏是个深坑,谨慎进入,其 ...
【HTML5游戏开发】二次开发 BrowserQuest 第一集 -
excaliburace:
方案3亲测完全可用,顺便解决了我其他方面的一些疑问,非常感谢
spring security 2添加用户验证码 -
yuanliangding:
Spring太强大了。
Spring Data JPA 简单介绍 -
小高你好:
什么是hibernate懒加载?什么时候用懒加载?为什么要用懒加载?
1、事务
事务是指作为单个逻辑工作单元执行的一系列操作。
事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单
元,可以简化错误恢复并使应用程序更加可靠。数据库服务器保证在事务范围内执行的操作完整且正确地提交至磁盘,否则数据库会复原至事务启动之前的状态。
数据库在读取的记录上加共享锁,验证是否可以读取数据,直到事务提交,锁才能释放,其他用户可以读取数据,但是不能修改。可以保证在同一事务中前后两次读
取记录是一致的。当必须要信任所有读取的记录,保证记录不被修改,我们可以采用repeatable
read,例如统计数据(银行账号的余额情况)、关联查询多个表等。 相对Committed Read而言,提高了并发量和系统的吞吐量。可以通过ONCONFIG参数设置为隔离级别:USELASTCOMMITTED。表需要设置为行级锁,不能是页级锁。
一个逻辑工作单元要成为事务,必须满足所谓的ACID属性。ACID的具体含义如下:
1)A(Atomicity):操作序列要么完整的执行,否则什么都不做;
2)C(Consistency):一致性,事务执行后,保证数据库从一个一致性状态到另外一个一致性状态;
3)I(Isolation):隔离,一个事务的中间状态对其他事务不可见,即每个用户都感觉他们在单独使用数据库。隔离级别用来定义多大程度的隔离多个不同的事务;
4)D(Durability):持久性,事务的有效性,不会应用硬件或软件的失败而丢失。
2、并发控制
1)相关概念
i)隔离(+一致性) => 并发控制;
ii)多个事务可以访问或修改相同的资源;
iii)只要多个进程共享资源,就需要对访问进程进行排队控制;
iv)在进行并发控制时,数据库内部将生成多个并发事务访问资源的操作序列表,并且每一个事务内部的各个操作都需要序列化。
2)串行调度存在的问题
在串行调度中,采用操作序列,一个事务完成了再完成另外一个,即使两个事务T1、T2更新的是数据库中不同的对象。此种方式从并发和性能角度考虑,都不能很好的利用计算机资源。
为了改善性能,需要采用非串行调度,即允许事务并发执行,即一个事务内的操作可以在其他事务提交前开始执行。
3)并发调度的常见问题
i)脏读:事务T2读取到了事务T1没有提交的结果
例如如下的操作序列会导致脏读:
事务T1读取记录,然后更新记录;
事务T2读取了更新后的记录;
若T1后续操作失败,会导致更新的记录回滚,而同时事务T2已经使用了这个没有提交的值。
ii)不可重复读:事务T1中多个读操作返回不同的结果
事务T1读取一个对象;
事务T2读取并更新同一个对象;
事务T1再次读取同一个对象返回了不同的值。
iii)幻影读:如果事务T1在同样的情况下多次执行select读取的结果不同
事务T1从一个表中检索满足特定条件的记录返回m条记录;
事务T2往该表中insert/delete其他满足相同条件的记录;
事务T1再次以相同的条件检索该表的数据返回的数据记录不为m条。
3、锁机制
1)相关概念
i)用户可以锁定一个对象,可以防止 其它用户修改锁定的对象;
ii)在多个用户并发访问数据库的情况下,为保证数据完整性,锁是很有必要的;
iii)程序可以显式的对数据枷锁,数据库系统可以隐式的对对象进行加锁。
2)锁的类型
i)共享锁(Shared locks)
:多个用户可以读取相同的记录
如果一个对象上没有排他锁,则共享锁可以加在该对象上,它可以防止其他事务更新数据,但同时,其他事务可以读取该数据,多个事务可以在同一个对象上加多个共享锁。
ii)排他锁(Exclusive locks)
:同一时间仅仅有一个用户可以读取相同的记录
如果一个对象上没有任何锁,排他锁才可以加在该对象上。一旦在记录上加了排他锁,则不能在该记录上增加任何锁了,直至锁释放。它可以防止其他事务读取和更新数据。
iii)提升/更新锁(Promotable/Update lock)
:可以对锁进行升级或者降级
在更新游标时使用,由游标在含有“for update”选项执行时产生,只能在没有排他锁或其他更新锁的记录上加更新锁。当锁定的记录真正执行的时候,更新锁将提升为排他锁。
iv)专一锁(Intent lock)
:是一种表级锁,标识在该表上有一个游标在读取数据
由IDS自动分配,如果一条记录上的记录被更新,一个排他锁将分配在该记录上,同时将该记录的表上自动加上专一锁,这能保证没有session可以在该表上增加排他锁,只要该表中有记录被增加了排他锁。
3)锁的有效期
i)程序可以控制数据库锁的有效期;
ii)当数据库关闭后,数据库锁将被释放;
iii)根据数据库使用了事务的情况,表锁的有效期不同。如果数据没有使用事务(没有使用事务日志,也不使用commit work语句),显式对一个表lock,当执行unload table时,锁将被释放;
iv)当数据库使用了事务,事务结束时,将释放事务所有的锁。
4)不同粒度的锁
i)数据库级别的锁
:数据库管理活动,比如imports和exports。例如:
创建排他锁实例:
iv)行级锁
:OLTP事务采用行级锁效率高。创建表时指定为行级锁的参考语句如下:
i)如果更新表中相对较小一部分数据的时候,采用行级锁将获取最好的性能,如果一个事务只访问表中的一小部分数据,那就采用行级锁。
ii)如果一个事务频繁访问整个表中的数据,设置更粗的力度,比如表级锁;
iii)如果更新数据库中大部分表的大部分数据的情况下,采用数据库级别的锁;
iv)informix默认的锁模式为页级锁。
v)ONCONFIG参数DEF_TABLE_LOCKMODE用于设置默认锁模式;
vi)查看表锁模式的方法如下:
方法1:
1)Dirty Read(脏读)
设置为Dirty Read隔离级别的参考语句如下:
静态表(没有更新,只读的表),速度比100%准备更重要的情况,以及不能等待锁的释放的情况中。
2)Commited Read(只读已提交的数据)
设置为该级别的参考语句如下:
在读取数据前,数据库服务器尝试在记录上加共享锁。加锁前,需要先检查是否可以对对象加共享锁;如果可以加锁,则要保证要加锁的记录没有其他进程正在更新;当继续正在更新时,记录上有排他锁,此时我们不能对记录加共享锁。
3)Cursor Stability(游标稳定性)
参考设置语句如下:
4)Repeatable Read(可重复读)
参考设置语句如下:
5)Last Committed Read(读取最后提交的数据)
这是一种乐观锁,它解决了Commited Read的不足,因为Commited Read在记录被锁时,其它进程需要等待。
这种隔离级别常被用在WEB应用系统中,例如在电子商务系统中,可以选择商品添加到购物篮中,但是此时后台可能你正在对商品的价格进行更新,当再次检查的时候,可能发现商品的价格已经发生变化。
设置语句参考如下:
6)几种隔离级别的比较
隔离级别 脏读? 不可重复读? 幻影读?
Dirty Read Yes Yes Yes
Last Commited Read No Yes Yes
Commited Read No Yes Yes
Cursor Stability No No Yes
Repeatable Read No No No
5、设置事务/会话的锁模式
1)不等待锁的释放
为默认的锁模式,如果数据库对象被锁,则立即返回错误。错误消息参考如下:
•
107
: ISAM error: record
is
locked
一个事务可能发生死锁或挂住,等待资源的释放。设置为此种模式的语句如下:
直到等待n秒后,如果锁一直没有释放将返回锁等待超时错误信息。参考设置语句如下:
1)监控session的隔离级别
使用: onstat –g sql 或者 onstat –g ses,例如在笔者测试服务器上运行onstat -g sql,运行结果如下:
Sess SQL
Current
Iso Lock SQL ISAM F.E.
Id Stmt type
Database
Lvl Mode ERR ERR Vers Explain
880
-
sdp CR Wait
20
0
0
9.03
Off
878
SELECT
sdp CR
Not
Wait
0
0
9.03
Off
877
-
sdp CR Wait
20
0
0
9.03
Off
756
-
sdp CR Wait
20
0
0
9.03
Off
755
-
sdp CR Wait
20
0
0
9.03
Off
754
-
sdp CR Wait
20
0
0
9.03
Off
753
-
sdp CR Wait
20
0
0
9.03
Off
752
sdp CR Wait
20
0
0
9.03
Off
751
-
sdp CR Wait
20
0
0
9.03
Off
750
-
sdp CR Wait
20
0
0
9.03
Off
480
-
sdp CR Wait
20
0
0
9.03
Off
479
-
sdp CR Wait
20
0
0
9.03
Off
478
-
sdp CR Wait
20
0
0
9.03
Off
477
-
sdp CR Wait
20
0
0
9.03
Off
476
-
sdp CR Wait
20
0
0
9.03
Off
475
-
sdp CR Wait
20
0
0
9.03
Off
474
-
sdp CR Wait
20
0
0
9.03
Off
473
-
sdp CR Wait
20
0
0
9.03
Off
472
-
sdp CR Wait
20
0
0
9.03
Off
471
-
sdp CR Wait
20
0
0
9.03
Off
470
-
sdp CR Wait
20
0
0
9.03
Off
469
-
sdp CR Wait
20
0
0
9.03
Off
468
-
sdp CR Wait
20
0
0
9.03
Off
467
-
sdp CR Wait
20
0
0
9.03
Off
466
-
sdp CR Wait
20
0
0
9.03
Off
465
-
sdp CR Wait
20
-
232
0
9.03
Off
464
-
sdp CR Wait
20
0
0
9.03
Off
463
-
sdp CR Wait
20
0
0
9.03
Off
43
-
sdp CR Wait
20
0
0
9.03
Off
40
-
sdp CR Wait
20
0
0
9.03
Off
Id Stmt type
Database
Lvl Mode ERR ERR Vers Explain
878
-
sdp CR Wait
20
0
0
9.03
Off
Last parsed SQL statement :
select
count
(
*
)
from
2)查看用户进程锁等待情况
使用: onstat –u。
3)查看锁使用和等待情况
使用: onstat -k
4)监控数据库事务及其状态
使用: onstat -x
发表评论
-
informix 写的存储过程
2012-04-01 16:23 1933CREATE PROCEDURE informix.remov ... -
用MySQL-Proxy实现读写分离【转】
2011-10-14 15:32 1274MySQL-Proxy, 6月份发布的MySQL-Proxy是 ... -
分布式数据库拆表拆库的常用策略
2011-10-12 18:21 1055分布式数据库拆表拆库 ... -
【转】 MYSQL 时间查询的范围
2011-09-09 23:31 1815对于每个类型拥有的值范围以及并且指定日期何时间值的有效格式的描 ... -
mongodb 的安装使用
2011-01-25 10:21 1595安装 OS X 32-bit ... -
linux 数据库安装
2009-12-17 21:36 32331、查看要求的安装包(和RHEL4有点小区别)rpm -q b ... -
oracle 10g 数据库 导入
2009-10-06 17:21 1878今天,把公司的数据库导出了,通过pl/sql导出来了,格式为 ... -
Oracle创建表空间、创建用户以及授权、查看权限
2009-10-06 15:55 1268创建临时表空间CREATE TEMPORARY TA ... -
产品分类设计
2009-09-20 00:02 1150网页树形结构问题的一种解决办法 在一个标准的树形 ... -
linux 操作 oracle
2009-08-20 14:58 1527linux 连接oracle [test@local ... -
linux 数据库导入 从windows一个用户导出,由系统dba导入
2009-07-31 09:08 1861linux下导入:进入linux下 ... -
oracle 日期处理
2009-06-08 14:35 1832oracle当月、当年、本周数据 当月数据 ... -
接触oracle存储过程
2009-06-04 16:16 1223这是我写的第一个存储 ... -
oracle 10g 数据库数据导入dmp
2009-05-25 21:25 1797今天从公司服务器里把数据导出来.本想导进自己的电脑里,弄了半天 ...
相关推荐
此外,还可以结合其他的并发控制机制,如事务隔离级别(读未提交、读已提交、可重复读、串行化)和行级锁定策略,来进一步优化并发处理。例如,提高事务隔离级别可以减少脏读或幻读的可能性,但可能会增加锁的使用,...
6. **多版本并发控制(MVCC)**:Informix的MVCC机制允许读取操作在不锁定记录的情况下进行,从而提高并发性能。读取操作看到的是事务开始时的数据视图,而不是当前数据库的状态,这被称为“快照隔离”。 7. **死锁...
Informix支持多种类型的锁,包括行级锁、页级锁和表级锁等,用于控制并发事务对数据的访问。锁用于防止多个事务同时修改同一资源,以确保数据的一致性和完整性。 2. **HDR+X锁**: 在描述中提到的`HDR+X`锁是一种...
在 Informix 中,锁是用于控制并发访问数据的主要机制,确保数据的一致性和完整性。本篇文章将深入探讨Informix锁表相关的知识,包括锁的类型、工作原理以及如何有效地管理和使用锁。 一、锁的类型 Informix 支持...
而文件内容则围绕着数据库系统的并发控制、事务隔离级别、SQL编程、游标操作、以及不同数据库管理系统(DBMS)特有的并发控制机制进行了阐述。 **并发控制** 并发控制是数据库管理系统(DBMS)用来确保数据库的...
在Informix环境中,事务是数据库操作的基本单位,它保证了一组操作的原子性、一致性、隔离性和持久性(ACID)。一个事务可以是一个简单的SQL语句,也可以是一系列复杂的操作序列。当一个事务开始后,如果没有显式地...
INFORMIX的资料太难找了,自己整理了一些,包括: 1、INFORMIX函数大全.pdf...3、informix的事务、并发控制、锁机制、隔离级别.docx 4、oracle和informix的基础区别.docx 5、Shell脚本和Informix的交互实现技巧.docx
这份文档阐述了数据库事务处理中的不同隔离级别(读未提交、读已提交、可重复读、串行化),以及Informix如何实现这些级别的锁管理机制,确保数据一致性。 5. **Informix数据库性能优化案例分享** (2.1_Informix...
学习事务的提交、回滚和保存点操作,以及并发控制机制如锁定和多版本并发控制(MVCC)。 6. **数据库设计与优化** 学习如何设计高效的数据库模式,包括正常化理论和范式。了解索引的类型(如唯一索引、非唯一索引...
它提供了多种事务隔离级别,以满足不同级别的并发控制需求。 **五、复制与高可用性** Informix提供了多种复制解决方案,如同步复制、异步复制等,以确保数据的冗余和灾难恢复能力。全局事务处理和故障切换机制...
- 在日志数据库中,以游标稳定读、重复读隔离级别卸载表时,会对表记录的不同数据集加上共享锁。 - **装载锁情况**: - 在日志数据库中,对装载表加排他锁,锁定粒度默认为行锁或页锁,具体取决于表的创建方式。当...
1. **锁级别调整**:根据应用需求,合理配置事务隔离级别(READ COMMITTED、REPEATABLE READ等),减少不必要的锁冲突。 2. **事务设计**:尽量保持事务短暂,减少长时间持有的锁,避免阻塞其他操作。 3. **死锁...
5. **并发控制**:了解锁机制,包括行级锁、表级锁和页级锁,以及死锁检测和避免策略。 6. **备份与恢复**:学习如何进行全量备份、增量备份和日志备份,以及如何在数据丢失或故障后恢复数据。 7. **性能优化**:...
6. **并发控制**:Informix 使用多版本并发控制(MVCC)实现事务隔离,理解其工作原理有助于解决并发问题。 7. **性能调优**:涉及内存配置、日志管理、连接池设置等多个方面,通过对系统参数的调整,提高数据库的...
Informix通过锁定机制实现并发控制,保证多用户环境下数据的一致性。学习锁的类型、级别和策略,有助于优化并发性能。 7. **性能优化** 通过索引、查询优化器和内存管理等手段,Informix能提供高效的查询性能。...
- 调整数据库隔离级别,如采用脏读。 - 将表的默认页级锁改为行级锁。 - 设置锁等待时间。 - 优化 SQL 查询,提高事务处理速度,尽快释放资源。 - 如需立即解决问题,可使用 `onmode -z` 命令终止指定会话,释放锁...
其多版本并发控制(MVCC)机制,使得在高并发环境下也能实现高效且一致的数据操作。 五、Informix性能优化 Informix提供了多种性能优化手段,如索引创建、分区表、存储过程、触发器等。通过合理的索引设计和查询优化...
本篇主要探讨了几个关键的性能调整方法,包括索引的建立、with hold的使用、隔离级别的设定、事物管理和数据分割。 1. **索引设计**: 索引对数据库性能的影响至关重要。在创建索引时,应结合实际应用需求,分析...
书中的内容可能涉及事务的开始、提交、回滚,以及并发控制机制如锁定和多版本并发控制(MVCC)。 5. **备份与恢复**:数据保护是数据库管理的重要部分。书中可能会详细阐述Informix的备份策略,包括全备、增量备和...