- 浏览: 388911 次
文章分类
最新评论
-
小尜:
写的很详细,也很简单,一看就懂。多谢啦。
关于工厂模式和spring的IOC -
fjjiaboming:
代码排版!!!!!
JDBC事务和JTA (XA)事务 -
fjjiaboming:
排版有问题吗? 望交流.
做人有三个层次 -
fjjiaboming:
看来数据库连接池 必须用JNDI 注册在容器 , 对吗?
JDBC事务和JTA (XA)事务 -
fd1803:
SSL工作原理:http://www.wosign.com/B ...
SSL(Server Socket Layer)简介
在通过JDBC对数据库进行并发访问时,为了解决并发之间的锁的控制,JDBC提供了一个隔离级别(Isolation)的方式解决并发访问的问题。
因为最近时间在解决公司工作流在客户现场的高并发情况下经常出现死锁(dead lock)或者事务超时情况,而工作流的应用大多数主要这几种业务:查询工作项、领取工作、完成(或者提交)工作。根据以前公司在其他应用中并没有出现这些故障,对所上线的环境进行的分析,主要差异是出问题的系统是DB2(其他系统基本上是ORACLE)。针对上面的问题进行了下面分析。
数据库的差异性:
- ORACLE数据库比较强调能够支持高并发情况下的访问,保证能够“读”到数据
- DB2数据库比较强调高并发情况下的数据完整性,保证能够“读一致”的数据
数据库的隔离级别分析:
- ORACLE缺省使用的是CS级别的数据库访问
- DB2缺省使用的是RS级别的数据库访问
JDBC的数据隔离级别设置:
JDBC隔离级别<o:p></o:p> |
数据库隔离级别<o:p></o:p> |
数据访问情况<o:p></o:p> |
TRANSACTION_READ_UNCOMMITTED<o:p></o:p> |
<st1:place w:st="on"><st1:city w:st="on">ur</st1:city></st1:place><o:p></o:p> |
就是俗称“脏读”(dirty read),在没有提交数据时能够读到已经更新的数据<o:p></o:p> |
TRANSACTION_READ_COMMITTED<o:p></o:p> |
cs<o:p></o:p> |
在一个事务中进行查询时,允许读取提交前的数据,数据提交后,当前查询就可以读取到数据。update数据时候并不锁住表 |
TRANSACTION_REPEATABLE_READ<o:p></o:p> |
rs<o:p></o:p> |
<o:p>在一个事务中进行查询时,不允许读取其他事务update的数据,允许读取到其他事务提交的新增数据</o:p> |
TRANSACTION_SERIALIZABLE<o:p></o:p> |
rr<o:p></o:p> |
<o:p>在一个事务中进行查询时,不允许任何对这个查询表的数据修改。</o:p> |
在websphere环境中通过JDBC连接DB2数据库的隔离级别的情况:
- 只有使用实体(Entity Bean)的情况下可以通过修改ibm的部署文件修改当前数据操作的隔离级别
- 如果通过session bean,jdbc connection方式获得的数据库连接缺省都是TRANSACTION_REPEATABLE_READ
- 在通过数据源获得DB2的数据库连接时候,DB2的JDBC driver会缺省修改当前连接的隔离级别到TRANSACTION_REPEATABLE_READ
工作流应用分析:
在工作流应用中,主要是这些操作:查询工作项、领取工作、完成(或者提交)工作。
- 查询工作项,数据库操作是select,在工作流应用中的操作频率最高
- 领取工作,数据库操作是update,在工作流应用中的操作频率较低
- 完成(或者提交)工作,数据库操作主要是update、insert,在工作流应用中的操作频率较低
根据上面的应用分析,工作流应用中大量的select,少量对数据进行update,而发生死锁(dead lock)的现象是在DB2,在ORACLE上基本没有发生的主要原因是:
在DB2中数据库的隔离级别是rs,如果系统中有大量的select,特别是如果查询的工作项特别多,查询慢的情况下,造成其他的update操作等待select请求结束,如果又有大量的select请求过来时会出现死锁(dead lock)
解决方案:
首先考虑参照ORACLE的模式,将DB2的JDBC连接的隔离级别改为TRANSACTION_READ_COMMITTED,来提高并发能力,通常情况下获取数据库连接都是通过一个方法获得,因此可以直接改这个方法获得连接后直接将JDBC的Connection的隔离级别调整为TRANSACTION_READ_COMMITTED<o:p></o:p>。但是在验证这种方案是发现了一个问题:
如果在一个JTA事务中,先获取一个JDBC的Connection,程序修改了隔离级别到TRANSACTION_READ_COMMITTED,在这个Connection中进行了数据库操作,然后关闭连接,再从数据源中获取Connection时候,DB2的Driver会修改当前的连接的隔离级别,造成了在一个全局事务中修改了隔离级别,系统会自动抛出异常。
上面的方案中是对任何一个Connection都修改隔离级别,因为存在问题,因此只能对单个数据库请求进行隔离级别的操作。对所有的获取工作项的select查询语句之后添加上 with cs的方式,这样这条查询请求并不会锁住表,其他update操作就能够正常工作。
发表评论
-
考试成绩
2011-03-19 11:56 0uuuuuuuu -
db2cat 命令
2009-06-24 21:53 1978今天无意看到一个命令:db2cat(系统目录分析). 现把测 ... -
关于db2分区特性的一点心得
2008-10-29 00:31 2443最近了解了下db2的分区特性,发现不是想象中的那样强大,而且 ... -
痛饮咖啡,熟读手册,方可为DBA
2008-10-25 16:09 1247嫦娥上天了。为了庆祝 ... -
关于db2diag.log里面ZRC和ecf的说明
2008-09-28 16:41 4971今天同事给了个db2diag。log文件给分析下 ,对其中的e ... -
关于db2dart dbname /dhwm /tsi 的测试
2008-08-08 01:25 1931下面是db2dart database /dhwm /tsi ... -
db2 初级证书:730.731
2008-07-01 21:29 1357一个偶然的机会,获得了 这2个证书.要学的很还多 db os ... -
关于db2的OLAP的一些函数
2007-07-21 17:00 1422看到人家说OLAP函数的强大,到网上搜了一般。看了下面2个文章 ... -
db2学习笔记(二)
2007-07-15 21:22 2202表空间方面: 1.创建数据库的时候,默认会有3个页大小为4k的 ... -
创新性应用-王涛 (关于db2)转载
2007-07-14 15:09 1325原文: http://blog.csdn.net/best_d ... -
DB2资料(REDBOOK) 转载
2007-07-11 15:16 2485原文为:http://bbs.chinaunix.net/ar ... -
不管怎么强调sortheap的重要性都不为过
2007-07-10 00:14 2829今天看了一篇文章,觉得不管怎么强调sortheap的重要性都不 ... -
db2学习代码例子(代码为转载网上)
2007-07-05 14:31 2224搞db2也2年了,一直都没搞过存储过程,最近想学下,到网上 ... -
DB2SQL存储过程语法官方权威指南(翻译)(转载)
2007-07-04 21:07 2465这个还不错,网上这个文章太多了 : 背景:DB2的数据库性能很 ... -
DB2 存储过程开发最佳实践(转载)
2007-07-04 17:00 6266这个文章对初学者理解 ... -
java调用db2存储过程例子(新手用,熟悉的就不用看了)
2007-07-04 14:15 11012搜索java 调用db2(版本为8.2)存储过程 没几个文章能 ... -
最近db2学习笔记(06.29--07.03)
2007-07-03 20:03 4247有点乱 ,我认为重要的 ... -
关于DB2数据库的ADM11003E和ADM0501C错误的处理(转载)
2007-06-28 10:55 3992补充说明:对于第一个错误,如果你确信你的系统没有使用存储过 ... -
在JBoss中配置DB2的数据源
2007-03-30 17:34 2453在用myeclipse+db2学习hibernate时,老报 ... -
编写高性能的mysql语法
2007-03-27 15:18 1239...
相关推荐
5. **事务管理**:可能包含对数据库事务的支持,使得开发者可以控制数据操作的原子性、一致性、隔离性和持久性。 6. **连接池集成**:为了提高性能和资源利用率,可能会集成常见的JDBC连接池,如HikariCP、Druid等...
5. **事务管理**:讨论Spring JDBC如何配合Spring的事务管理,实现编程式和声明式事务控制,以及在不同隔离级别下的事务处理。 6. **批处理操作**:可能包含如何使用Spring JDBC进行数据库批处理,提高性能和效率。...
- **事务特性**:ACID(原子性、一致性、隔离性、持久性)是事务的核心属性,JDBC支持设置事务级别。 - **开始/提交/回滚事务**:`Connection.setAutoCommit(false)`禁用自动提交,`commit()`提交事务,`rollback()`...
在IT领域,Spring框架是Java开发中的核心工具之一,它为构建高质量的、可维护的、松耦合的应用程序...在实践中,你可能会遇到的问题包括事务传播行为、异常回滚规则、事务隔离级别等,这些都是进一步学习和研究的方向。
3. 隔离级别研究:"DB2 JDBC的隔离级别研究"和"Robin DB2如何改变隔离级别"涉及到数据库事务的四个标准隔离级别:读未提交(READ UNCOMMITTED)、读已提交(READ COMMITTED)、可重复读(REPEATABLE READ)和串行化...
4. **事务控制**:说明如何在JDBC中处理事务,包括手动和自动提交,以及回滚和隔离级别。 5. **异常处理**:讨论在Java中处理JDBC相关的错误和异常,以及如何使用SQLException类。 6. **性能优化**:涵盖如何提升...
事务的隔离级别定义了事务之间的交互程度,本书详细解释了不同的隔离级别以及它们如何影响应用程序的行为: - **读未提交**(Read Uncommitted):最低的隔离级别,可能导致脏读等问题。 - **读已提交**(Read ...
2. 支持多种事务隔离级别:READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ 和 SERIALIZABLE。 3. 自动重连:当网络故障导致连接中断时,驱动程序可以自动尝试重新建立连接。 4. 缓存 PreparedStatements:...
类提供的方法,可以控制事务的提交、回滚和隔离级别。 6. **异常处理**: 源码中包含了大量的异常类,如`com.mysql.jdbc.exceptions.MySQLSyntaxErrorException`,这些异常类对应于MySQL数据库的各种错误情况,帮助...
在这些源码中,我们可以学习到如何处理不同数据库系统的特性和差异,例如Oracle的PL/SQL语法、MySQL的InnoDB存储引擎特性、MSSQL的T-SQL和事务隔离级别,以及OLEDB如何通过统一接口访问多种数据源。此外,源码还可能...
为了防止脏读,可以使用`setTransactionIsolation`方法设置事务隔离级别为`READ_COMMITTED`,这将阻止事务读取其他事务未提交的数据。 - **避免不可重复读**:不可重复读是指在同一个事务中多次读取同一数据项,但...
9. **事务处理**:`ConnectionImpl` 类提供了对事务的支持,包括开始、提交、回滚事务,以及设置事务隔离级别。 10. **元数据获取**:`com.mysql.cj.jdbc.DatabaseMetaData` 类提供了获取数据库元数据的方法,如表...
Java源码:附加数据库 这个压缩包文件"java源码:附加数据库.rar"显然包含了与Java编程相关的源代码,特别是涉及到数据库...通过分析和研究这些源码,开发者能够加深对JDBC和其他相关库的理解,提升数据库操作的技能。
Spring 提供了 `TransactionDefinition` 接口来定义事务属性,如隔离级别、传播行为等;`TransactionStatus` 接口则用来表示事务的状态,如是否回滚、是否已提交等;而 `PlatformTransactionManager` 是所有事务管理...
4. **事务处理**:在异构环境中,确保事务的一致性和完整性是一项挑战,需要考虑两数据库的事务隔离级别和回滚策略。 5. **性能优化**:针对数据传输的效率和带宽使用进行优化,减少不必要的数据转换和网络延迟。 ...
- 事务的隔离级别。 - 如何确保数据一致性。 - **高级映射** - 继承映射。 - 组件映射。 - 集合映射。 - **高级查询** - HQL (Hibernate Query Language) 的使用。 - Criteria API 的介绍。 - 如何进行...
Oracle数据库中的Java执行安全性研究主要关注的是如何在Oracle数据库内部安全地运行Java代码,利用Java的强大功能和Oracle数据库的安全特性来提升应用程序的安全性。Oracle JVM(Java Virtual Machine)是Oracle...
5. **事务管理**:学习如何在Java代码中控制数据库事务,包括提交、回滚和隔离级别。 6. **数据库兼容性**:查看源码如何处理不同MySQL版本间的差异,以及如何进行版本适配。 7. **性能优化**:研究源码中的性能调优...
- **事务管理**:理解Hibernate如何处理JTA和JDBC事务,以及如何配置事务隔离级别。 - **懒加载和代理**:研究如何实现关联对象的延迟加载,以及Hibernate的代理对象机制。 - **事件监听器**:探索EntityListener和...