数据库事务

关于事务的传播特性和隔离级别的问题

断了今生、忘了曾经 提交于 2020-01-04 03:12:32
REQUIRED:业务方法需要在一个事务中运行。如果方法运行时,已经处在一个事务中,那么加入到该事务,否则为自己创建一个新的事务。 NOT_SUPPORTED:声明方法不需要事务。如果方法没有关联到一个事务,容器不会为它开启事务。如果方法在一个事务中被调用,该事务会被挂起,在方法调用结束后,原先的事务便会恢复执行。 REQUIRESNEW:属性表明不管是否存在事务,业务方法总会为自己发起一个新的事务。如果方法已经运行在一个事务中,则原有事务会被挂起,新的事务会被创建,直到方法执行结束,新事务才算结束,原先的事务才会恢复执行。 MANDATORY:该属性指定业务方法只能在一个已经存在的事务中执行,业务方法不能发起自己的事务。如果业务方法在没有事务的环境下调用,容器就会抛出例外。 SUPPORTS:这一事务属性表明,如果业务方法在某个事务范围内被调用,则方法成为该事务的一部分。如果业务方法在事务范围外被调用,则方法在没有事务的环境下执行。 Never:指定业务方法绝对不能在事务范围内执行。如果业务方法在某个事务中执行,容器会抛出例外,只有业务方法没有关联到任何事务,才能正常执行。 NESTED:如果一个活动的事务存在,则运行在一个嵌套的事务中. 如果没有活动事务, 则按REQUIRED属性执行.它使用了一个单独的事务, 这个事务拥有多个可以回滚的保存点

springMVC+mybatis事务管理总结

这一生的挚爱 提交于 2020-01-04 02:52:42
1.spring,mybatis事务管理配置与@Transactional注解使用: 概述 事务管理对于企业应用来说是至关重要的,即使出现异常情况,它也可以保证数据的一致性。 Spring Framework对事务管理提供了一致的抽象,其特点如下: 为不同的事务API提供一致的编程模型,比如JTA(Java Transaction API), JDBC, Hibernate, JPA(Java Persistence API和JDO(Java Data Objects) 支持声明式事务管理,特别是基于注解的声明式事务管理,简单易用 提供比其他事务API如JTA更简单的编程式事务管理API 与spring数据访问抽象的完美集成 事务管理方式 spring支持编程式事务管理和声明式事务管理两种方式。 编程式事务管理使用TransactionTemplate或者直接使用底层的PlatformTransactionManager。对于编程式事务管理,spring推荐使用TransactionTemplate。 声明式事务管理建立在AOP之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。声明式事务最大的优点就是不需要通过编程的方式管理事务,这样就不需要在业务逻辑代码中掺杂事务管理的代码

性能测试结果分析

∥☆過路亽.° 提交于 2020-01-04 02:46:24
性能测试 工程师基本上都能够掌握利用测试工具来作负载、 压力测试 ,但多数人对怎样去分析工具收集到的测试结果感到无从下手,下面我就把个人 工作 中的体会和收集到的有关资料整理出来,希望能对大家分析测试结果有所帮助。 分析原则: 1. 具体问题具体分析(这是由于不同的应用系统,不同的测试目的,不同的性能关注点) 2. 查找瓶颈时按以下顺序,由易到难。 服务器硬件瓶颈-〉网络瓶颈(对局域网,可以不考虑)-〉服务器 操作系统 瓶颈(参数配置)-〉中间件瓶颈(参数配置, 数据库 , web 服务器等)-〉应用瓶颈( SQL 语句、数据库设计、业务逻辑、算法等) 注:以上过程并不是每个分析中都需要的,要根据测试目的和要求来确定分析的深度。对一些要求低的,我们分析到应用系统在将来大的负载压力(并发用户数、数据量)下,系统的硬件瓶颈在哪儿就够了。 3 分段排除法 很有效 分析的信息来源: 1 根据场景运行过程中的错误提示信息 2 根据测试结果收集到的监控指标数据 一.错误提示分析 分析实例: 1 Error: Failed to connect to server “10.10.10.30:8080″: [10060] Connection Error: timed out Error: Server “10.10.10.30″ has shut down the connection

事务 相关概念理解

馋奶兔 提交于 2020-01-04 02:42:05
1.事务(Transaction)及其ACID属性 事务是由一组SQ语句组成的逻辑处理单元,事务具有以下4个属性,通常简称为事务的ACID属性。 原子性(Atomicity):事务是一个原子操作单元,其对数据的修改,要么全都执行,要么全都不执行。 一致性(Consistent):在事务开始和完成时,数据都必须保持一致状态。这意味着所有相关的数据规则都必须应用于事务的修改,以保持数据的完整性;事务结束时,所有的内部数据结构(如B树索引或双向链表)也都必须是正确的。 隔离性(Isoation):数据库系统提供一定的隔离机制,保证事务在不受外部并发操作影响的“独立”环境执行。这意味着事务处理过程中的中间状态对外部是不可见的,反之亦然。 持久性(Durabe):事务完成之后,它对于数据的修改是永久性的,即使出现系统故障也能够保持。 银行转帐就是事务的一个典型例子。 2.并发事务处理带来的问题 更新丢失(lost Update): 当两个或多个事务选择同一行,然后基于最初选定的值更新该行时,由于每个事务都不知道其他事务的存在,就会发生丢失更新问题--最后的更新覆盖了由其他事务所做的更新。例如,两个编辑人员制作了同一文档的电子副本。每个编辑人员独立地更改其副本,然后保存更改后的副本,这样就覆盖了原始文档。最后保存其更改副本的编辑人员覆盖另一个编辑人员所做的更改

4种事务特性,5种隔离级别,7种传播行为

ⅰ亾dé卋堺 提交于 2020-01-04 01:41:39
什么是事务? 事务逻辑上的一组操作,组成这组操作的各个逻辑单元,要么一起成功,要么一起失败. 事务特性(4种): 原子性 (atomicity):强调事务的不可分割. 一致性 (consistency):事务的执行的前后数据的完整性保持一致. 隔离性 (isolation):一个事务执行的过程中,不应该受到其他事务的干扰 持久性(durability) :事务一旦结束,数据就持久到数据库 如果不考虑隔离性引发安全性问题: 脏读 :一个事务读到了另一个事务的未提交的数据 不可重复读 :一个事务读到了另一个事务已经提交的 update 的数据导致多次查询结果不一致. (针对某条记录,两次查询不一致) 虚幻读 :一个事务读到了另一个事务已经提交的 insert 的数据导致多次查询结果不一致.(针对某张表,两次查询到条数不一致,查到了多的数据) 事务隔离级别(5种) DEFAULT 这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别. 未提交读(read uncommited) :脏读,不可重复读,虚读都有可能发生 已提交读 (read commited):避免脏读。但是不可重复读和虚读有可能发生 可重复读 (repeatable read) :避免脏读和不可重复读.但是虚读有可能发生. 串行化的 (serializable)

事务的传播机制

谁说我不能喝 提交于 2020-01-04 01:40:34
1.什么是事务:   事务是程序中一系列严密的操作,所有操作执行必须成功完成,否则在每个操作所做的更改将会被撤销,这也是事务的原子性(要么成功,要么失败)。   数据库向用户提供保存当前程序状态的方法,叫 事务提交 (commit ) ;当事务执行过程中,使数据库忽略当前的状态并回到前面保存的状态的方法叫 事务回滚( rollback ) 2.事务的传播机制   以spring的事务传播机制为例子:   Spring事务机制主要包括 声明式事务 和 编程式事务 ,此处侧重讲解声明式事务,编程式事务在实际开发中得不到广泛使用,仅供学习参考。   Spring声明式事务让我们从复杂的事务处理中得到解脱。使得我们再也无需要去处理获得连接、关闭连接、事务提交和回滚等这些操作。再也无需要我们在与事务相关的方法中处理大量的try…catch…finally代码。我们在使用Spring声明式事务时,有一个非常重要的概念就是事务属性。事务属性通常由事务的传播行为,事务的隔离级别,事务的超时值和事务只读标志组成。我们在进行事务划分时,需要进行事务定义,也就是配置事务的属性。    spring在TransactionDefinition接口中定义了七个事务传播行为: propagation_requierd :如果当前没有事务,就新建一个事务,如果已存在一个事务中,加入到这个事务中,这是最常见的选择

oracle事务

半城伤御伤魂 提交于 2020-01-04 01:39:47
事务定义: (1)原子性:要么执行完成,要么不执行。 (2)一致性:业务逻辑一致性。例如:业务逻辑为,A表新增一条数据,B表需要更新一条数据,这两个操作需要都执行或者都不执行,就是一致性。此时,可以用@Transactional注解实现 (3)隔离性:多线程需要考虑隔离性,即线程1和线程2需要修改同一个表数据时,其中一个线程看到的要么是另一个线程执行完成或者未执行的结果,不会看到中间数据。 (4)永久性:事务一旦提交,则持久化保存在数据库中。 隔离级别 声明式事务的第二个方面是隔离级别。隔离级别定义一个事务可能受其他并发事务活动活动影响的程度。另一种考虑一个事务的隔离级别的方式,是把它想象为那个事务对于事物处理数据的自私程度。 在一个典型的应用程序中,多个事务同时运行,经常会为了完成他们的工作而操作同一个数据。并发虽然是必需的,但是会导致一下问题: 脏读(Dirty read)-- 脏读发生在一个事务读取了被另一个事务改写但尚未提交的数据时。如果这些改变在稍后被回滚了,那么第一个事务读取的数据就会是无效的。 不可重复读(Nonrepeatable read)-- 不可重复读发生在一个事务执行相同的查询两次或两次以上,但每次查询结果都不相同时。这通常是由于另一个并发事务在两次查询之间更新了数据。 幻影读(Phantom reads)-- 幻影读和不可重复读相似。当一个事务(T1

Spring事务管理

时间秒杀一切 提交于 2020-01-04 01:39:00
1.Spring事务介绍: 什么是事务: 事务逻辑上的一组操作,组成这组操作的各个逻辑单元,要么一起成功,要么一起失败. 事务的4个特性(ACID): 1)原子性(Atomicity):事务是一个原子操作,由一系列动作组成。事务的原子性确保动作要么全部完成,要么完全不起作用。 2)一致性(Consistency):一旦事务完成(不管成功还是失败),系统必须确保它所建模的业务处于一致的状态,而不会是部分完成部分失败。在现实中的数据不应该被破坏。 3)隔离性(Isolation):可能有许多事务会同时处理相同的数据,因此每个事务都应该与其他事务隔离开来,防止数据损坏。 4)持久性(Durability):一旦事务完成,无论发生什么系统错误,它的结果都不应该受到影响,这样就能从任何系统崩溃中恢复过来。通常情况下,事务的结果被写到持久化存储器中。 2.事务管理器 :JDBC、Hibernate、JPA、JTA四种事务管理器。 spring事务管理原理是动态代理。 3.基本事务属性 3.1 事务的5种隔离级别 并发事务引起的问题: 在典型的应用程序中,多个事务并发运行,经常会操作相同的数据来完成各自的任务。并发虽然是必须的,但可能会导致以下的问题 : 脏读 :一个事务读到了另一个事务的 未提交 的update数据 . 不可重复读 :一个事务读到了另一个事务 已经提交 的 update

Spring事务隔离级别和传播特性

我的梦境 提交于 2020-01-04 01:37:34
传播行为 事务的第一个方面是传播行为。传播行为定义关于客户端和被调用方法的事务边界。Spring定义了7中传播行为。 传播行为 意义 PROPAGATION_MANDATORY [ propagation_manadatory ] 表示该方法 必须运行 在一个事务中。如果当前没有事务正在发生,将 抛出一个异常 PROPAGATION_NESTED [ propagation_nested ] 表示如果当前正有一个事务在进行中,则该方法应当运行在一个 嵌套式事务 中。被嵌套的事务可以独立于封装事务进行提交或回滚。如果封装事务不存在,行为就像PROPAGATION_REQUIRES一样。 PROPAGATION_NEVER [ propagation_never ] 表示当前的方法 不应该在一个事务中运行 。如果一个事务正在进行,则会 抛出一个异常 。 PROPAGATION_NOT_SUPPORTED [ propagation_not_supported ] 表示该方法 不应该 在一个事务中运行。如果一个现有事务正在进行中,它将在该方法的运行期间 被挂起 。 PROPAGATION_SUPPORTS [ propagation_supports ] 表示当前方法 不需要 事务性上下文,但是如果有一个事务已经在运行的话,它也可以在这个事务里运行。 PROPAGATION

SpringBoot 事务隔离性和传播性

隐身守侯 提交于 2020-01-04 01:37:15
propergation 传播性 Spring中七种Propagation类的事务属性详解: REQUIRED:支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。 SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行。 MANDATORY:支持当前事务,如果当前没有事务,就抛出异常。 REQUIRES_NEW:新建事务,如果当前存在事务,把当前事务挂起。 NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。 NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。 NESTED:支持当前事务,如果当前事务存在,则执行一个嵌套事务,如果当前没有事务,就新建一个事务。 isolation 隔离性 声明式事务的第二个方面是隔离级别。隔离级别定义一个事务可能受其他并发事务活动活动影响的程度。另一种考虑一个事务的隔离级别的方式,是把它想象为那个事务对于事物处理数据的自私程度。 在一个典型的应用程序中,多个事务同时运行,经常会为了完成他们的工作而操作同一个数据。并发虽然是必需的,但是会导致一下问题: 脏读(Dirty read)-- 脏读发生在一个事务读取了被另一个事务改写但尚未提交的数据时。如果这些改变在稍后被回滚了,那么第一个事务读取的数据就会是无效的。 不可重复读(Nonrepeatable read)--