- 浏览: 550734 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (605)
- JAVA笔霸 (20)
- JAVA面霸 (27)
- MySQL面 (21)
- LINUX面 (12)
- 并发面霸 (41)
- 架构面霸 (19)
- 综合面霸 (10)
- Spring面 (12)
- Dubbo面 (13)
- RabbitMQ面 (8)
- Kafka面 (8)
- zk面霸 (5)
- Netty面 (8)
- 网络面霸 (7)
- JVM面霸 (12)
- Cloud面 (7)
- Spring核面 (4)
- 设计模式 (22)
- JAVA核面 (4)
- 打好基础 (18)
- Redis面 (9)
- JAVA (28)
- Spring (18)
- LINUX (21)
- MySQL (43)
- Nginx (8)
- 架构 (15)
- 本地环境 (25)
- 安装配置 (4)
- 计算机组成 (1)
- 未分类 (20)
- ES (15)
- Code (24)
- 芋道面 (3)
- 多线程并发编程 (4)
- 理解IO (3)
- 原理机制 (5)
- TCP/IP/HTTP (4)
- Maven (7)
- MQ (3)
- 面试经历 (2)
- ES组件 (2)
- Spring基础 (3)
- Kafka现场问题支持 (1)
- Redis客户端 (5)
最新评论
1、事务的定义
事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元。
事务由事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操作组成。
2、数据库的ACID特征
3、数据库系统支持的两种事务模式
4、数据库的锁
5、数据库的事务隔离级别
隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也越大。
数据库一般默认Read Commited(读已提交数据)
6、乐观锁和悲观锁
当数据库系统采用read Commited隔离级别时,会导致不可重复读和第二类丢失更新的并发问题,可以在应用程序中采用悲观锁或乐观锁来避免这类问题。
7、场景1
假如数据采集服务器不断进行更新数据库的网元信息表操作,有一个统计SQL,需要全表扫面网元信息表,
1.更新SQL对网元信息表的某些行上了排它锁X;
2.统计SQL试图对网元信息表上共享锁S,当扫描到被上了排它锁的行时,就只能等待解锁。
假如1,更新操作是在一个事务里面,由于程序原因,这个事务没有提交,则排他锁永远不回释放,统计SQL则被阻塞。
假如2,此时类似的更新SQL和统计SQL有很多,操作很频繁,则网元信息表处于频繁的加锁、阻塞、解锁中,加大数据库压力,可能引起大面积阻塞。
解决办法:
读写分离
统计SQL显式声明不上锁,select…with(nolock)
8、SQL Server的事务机制
出于性能上的考虑,SQL Server将用户的改动存入缓存中,这些改变会立即写入事务日志,但不会立即写入数据文件。
begin transaction --写日志
update… --写日志,更新缓存
insert… --写日志,更新缓存
…
commit transaction --写日志,将缓存数据写到磁盘
Sybase、Oracle是否也一样?
9、数据库的死锁
死锁是指在一组进程中的各个进程均占有不会释放的资源,但因互相申请被其他进程所占用不会释放的资源而处于的一种永久等待状态
其满足上面死锁的四个必要条件:
10、数据库的死锁-程序
程序1:
begin transaction
update table1 … where id=100
select … from table2 where id=1000
commit transaction
程序2:
begin transaction
update table2 … where id=1000
select … from table1 where id=100
commit transaction
11、死锁的后果
SQL Server内部有一个锁监视器线程执行死锁检查,锁监视器对特定线程启动死锁搜索时,会标识线程正在等待的资源;然后查找特定资源的所有者,并递归地继续执行对那些线程的死锁搜索,直到找到一个构成死锁条件的循环。
检测到死锁后,数据库引擎选择运行回滚开销最小的事务的会话作为死锁牺牲品,返回1205 错误,回滚死锁牺牲品的事务并释放该事务持有的所有锁,使其他线程的事务可以请求资源并继续运行。
Oracle、Sybase也具有同样的功能。
死锁对应用程序的影响:不能按照正常的逻辑运行、可能丢数据
办法:try…catch,重新执行该事务
12、Hibernate本身并不具备事务管理能力
Hibernate 是JDBC 的轻量级封装,本身并不具备事务管理能力。在事务管理层,Hibernate将其委托给底层的JDBC或者JTA,以实现事务管理和调度功能。 Hibernate的默认事务处理机制基于JDBC Transaction。我们也可以通过配置文件设定采用JTA作为事务管理实现。
13、Hibernate的事务使用
14、getCurrentSession和openSession的区别
15、使用事务存在的问题一
16、自动提交事务
17、加入Spring的事务管理
事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元。
事务由事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操作组成。
2、数据库的ACID特征
- Atomic(原子性):指整个数据库事务是不可分割的工作单元。
- Consistency(一致性):指数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性。
- Isolation(隔离性):指的是在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各自的完整数据空间。
- Durability(持久性):指的是只要事务成功结束,它对数据库所作的更新就必须永久保存下来。
3、数据库系统支持的两种事务模式
- 自动提交模式:每个SQL语句都是一个独立的事务,当数据库系统执行完一个SQL语句后,会自动提交事务。
- 手动提交模式:必须由数据库客户程序显示指定事务开始边界和结束边界。
4、数据库的锁
- x锁 排他锁 被加锁的对象只能被持有锁的事务读取和修改,其他事务无法在该对象上加其他锁,也不能读取和修改该对象
- s锁 共享锁 被加锁的对象可以被持锁事务读取,但是不能被修改,其他事务也可以在上面再加s锁。
5、数据库的事务隔离级别
- Serializable(串行化):一个事务在执行过程中完全看不到其他事务对数据库所做的更新。
- Repeatable Read(可重复读):一个事务在执行过程中可以看到其他事务已经提交的新插入的记录,但是不能看到其他其他事务对已有记录的更新。(其他事务可以新插入记录,但是不能更新已有记录)
- Read Commited(读已提交数据):一个事务在执行过程中可以看到其他事务已经提交的新插入的记录,而且能看到其他事务已经提交的对已有记录的更新。(其他事务可以新插入记录,也可以更新已有记录)
- Read Uncommitted(读未提交数据):一个事务在执行过程中可以看到其他事务没有提交的新插入的记录,而且能看到其他事务没有提交的对已有记录的更新。
隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也越大。
数据库一般默认Read Commited(读已提交数据)
6、乐观锁和悲观锁
当数据库系统采用read Commited隔离级别时,会导致不可重复读和第二类丢失更新的并发问题,可以在应用程序中采用悲观锁或乐观锁来避免这类问题。
- 悲观锁:指在应用程序中显式的为数据资源加锁。尽管能防止丢失更新和不可重复读这类并发问题,但是它会影响并发性能,因此应该谨慎地使用。
- 乐观锁:乐观锁假定当前事务操作数据资源时,不回有其他事务同时访问该数据资源,因此完全依靠数据库的隔离级别来自动管理锁的工作。应用程序采用版本控制手段来避免可能出现的并发问题。
在应用程序中显式指定采用数据库系统的独占锁来锁定数据资源。SQL语句:select ... for update,在Hibernate中使用get,load时如session.get(Account.class,new Long(1),LockMode,UPGRADE)
7、场景1
假如数据采集服务器不断进行更新数据库的网元信息表操作,有一个统计SQL,需要全表扫面网元信息表,
1.更新SQL对网元信息表的某些行上了排它锁X;
2.统计SQL试图对网元信息表上共享锁S,当扫描到被上了排它锁的行时,就只能等待解锁。
假如1,更新操作是在一个事务里面,由于程序原因,这个事务没有提交,则排他锁永远不回释放,统计SQL则被阻塞。
假如2,此时类似的更新SQL和统计SQL有很多,操作很频繁,则网元信息表处于频繁的加锁、阻塞、解锁中,加大数据库压力,可能引起大面积阻塞。
解决办法:
读写分离
统计SQL显式声明不上锁,select…with(nolock)
8、SQL Server的事务机制
出于性能上的考虑,SQL Server将用户的改动存入缓存中,这些改变会立即写入事务日志,但不会立即写入数据文件。
begin transaction --写日志
update… --写日志,更新缓存
insert… --写日志,更新缓存
…
commit transaction --写日志,将缓存数据写到磁盘
Sybase、Oracle是否也一样?
9、数据库的死锁
死锁是指在一组进程中的各个进程均占有不会释放的资源,但因互相申请被其他进程所占用不会释放的资源而处于的一种永久等待状态
其满足上面死锁的四个必要条件:
- (1).互斥:资源R1和R2不能被共享,同一时间只能由一个任务使用;
- (2).请求与保持条件:T1持有R1的同时,请求R2;T2持有R2的同时请求R1;
- (3).非剥夺条件:T1无法从T2上剥夺R2,T2也无法从T1上剥夺R1;
- (4).循环等待条件:上图中的箭头构成环路,存在循环等待。
10、数据库的死锁-程序
程序1:
begin transaction
update table1 … where id=100
select … from table2 where id=1000
commit transaction
程序2:
begin transaction
update table2 … where id=1000
select … from table1 where id=100
commit transaction
11、死锁的后果
SQL Server内部有一个锁监视器线程执行死锁检查,锁监视器对特定线程启动死锁搜索时,会标识线程正在等待的资源;然后查找特定资源的所有者,并递归地继续执行对那些线程的死锁搜索,直到找到一个构成死锁条件的循环。
检测到死锁后,数据库引擎选择运行回滚开销最小的事务的会话作为死锁牺牲品,返回1205 错误,回滚死锁牺牲品的事务并释放该事务持有的所有锁,使其他线程的事务可以请求资源并继续运行。
Oracle、Sybase也具有同样的功能。
死锁对应用程序的影响:不能按照正常的逻辑运行、可能丢数据
办法:try…catch,重新执行该事务
12、Hibernate本身并不具备事务管理能力
Hibernate 是JDBC 的轻量级封装,本身并不具备事务管理能力。在事务管理层,Hibernate将其委托给底层的JDBC或者JTA,以实现事务管理和调度功能。 Hibernate的默认事务处理机制基于JDBC Transaction。我们也可以通过配置文件设定采用JTA作为事务管理实现。
13、Hibernate的事务使用
14、getCurrentSession和openSession的区别
15、使用事务存在的问题一
16、自动提交事务
17、加入Spring的事务管理
发表评论
-
Nested Classes
2019-11-10 07:35 252https://docs.oracle.com/javas ... -
Java应用性能远程监控系统
2019-10-25 00:05 285转自: https://github.com/yueshu ... -
Java中高级面试题部分答案解析(3)
2019-10-18 00:02 223转自:https://mp.weixin.qq.com/s ... -
Java面试题全集
2019-10-17 00:04 228转自:https://mp.weixin.qq.com/s ... -
面试题系列一
2019-10-17 00:04 354转自:https://mp.weixin.qq.com/s ... -
反射面试题-请了解下
2019-10-17 00:04 243转自:https://mp.weixin.qq.com/s ... -
注解面试题-请了解下
2019-10-17 00:04 207转自:https://mp.weixin.qq.com/s ... -
面试题之HashMap
2019-10-17 00:04 312转自:https://mp.weixin.qq.com/s ... -
JAVA面霸高频(描述篇幅简短)
2019-10-14 00:01 238一、类加载机制 二、ArrayBlockin ... -
Java SE 工作日每日一题推送历史记录
2019-10-14 00:01 225转自:https://mp.weixin.qq.com/s ... -
Java 反射相关基础面试题扫荡
2019-10-14 00:01 225转自:https://mp.weixin.qq.com/s ... -
Java反射技术——字段的获取
2018-11-10 17:46 332学习笔记,转自:https://blog.csdn.net ... -
jvm优化参数详解及实战
2018-10-29 10:38 102学习笔记,转自:http://www.ppzedu.com ... -
java深拷贝与浅拷贝
2017-07-12 11:01 358java深拷贝与浅拷贝 -
Java 前端加密传输后端解密以及验证码功能
2017-07-04 16:05 601Java 前端加密传输后端解密以及验证码功能 学习,参考文 ... -
连接泄漏监测
2016-11-08 17:54 468连接泄漏监测 -
JVM系列三:JVM参数设置、分析
2014-11-10 11:44 644学习笔记,转自:http://www.cnblogs.co ... -
主题:Java面试122题
2014-10-30 12:25 692学习笔记,转自:http://blog.csdn.net/m1 ... -
过滤器与拦截器的区别
2014-10-29 10:05 802学习笔记,转自:http://blog.sina.com. ... -
过滤器、监听器、拦截器的区别
2014-10-22 12:11 783学习笔记,转自:http://blog.csdn.net/ ...
相关推荐
### 详解Hibernate事务处理机制 #### 一、引言 Hibernate作为一款优秀的对象关系映射(ORM)框架,在Java开发领域扮演着极其重要的角色。它不仅简化了数据持久化的复杂性,还提供了一系列强大的功能来支持高效的...
3. **Hibernate事务配置:**在Spring中,需要配置Hibernate SessionFactory,并将其注入到需要进行数据库操作的服务中。同时,通过`PlatformTransactionManager`接口(如HibernateTransactionManager)配置事务管理...
2. Hibernate事务管理:使用`HibernateTransactionManager`结合SessionFactory进行事务控制。 3. AOP(面向切面编程)在事务管理中的应用:`TransactionInterceptor`基于AOP拦截方法调用,处理事务。 4. 配置事务...
**Hibernate事务管理详解** 在Java开发中,尤其是在企业级应用中,事务管理是不可或缺的一部分。Hibernate作为一款流行的ORM(对象关系映射)框架,提供了强大的事务处理能力。本篇文章将深入探讨Hibernate中的事务...
本文将深入探讨Hibernate中的事务和并发控制,这对于开发高效、稳定的数据库应用至关重要。 首先,我们来理解Hibernate中的事务管理。在数据库操作中,事务是保证数据一致性的重要手段。一个事务包含了一组数据库...
【hibernate事务管理机制】是指在使用Hibernate框架进行数据库操作时,如何管理和协调事务的一系列规则和策略。事务管理是确保数据一致性、完整性和并发控制的重要机制。 **悲观锁**是预防性的锁定策略,它假设并发...
在Spring框架中集成和配置Hibernate事务管理是企业级Java应用中的常见实践,它能提供高效且灵活的事务处理策略。Spring作为一款强大的依赖注入(DI)和面向切面编程(AOP)容器,能够轻松地管理和协调不同数据访问...
然而,单独使用Hibernate时,事务管理往往需要手动处理,增加了复杂性。 当Spring与Hibernate整合时,Spring的事务管理可以自动地覆盖Hibernate的事务管理,实现全局的一致性。在Spring中,我们可以配置`...
一、Hibernate事务管理 在数据库操作中,事务确保了数据的一致性和完整性。Hibernate提供了四种事务隔离级别:读未提交(READ UNCOMMITTED)、读已提交(READ COMMITTED)、可重复读(REPEATABLE READ)和串行化...
下面我们将详细讲解如何配置和使用Spring+Hibernate注解声明式事务: 1. **配置Spring**: - 首先,我们需要在Spring配置文件中启用事务管理器,通常是`HibernateTransactionManager`,并配置数据源。 - 然后,...
将Spring与Hibernate整合并使用事务管理,能进一步提升应用的稳定性和效率。下面我们将详细讲解如何进行Spring AOP整合Hibernate以及如何在其中使用事务。 1. **Spring AOP简介** 面向切面编程(AOP)是Spring框架...
而Hibernate则是一款强大的对象关系映射(ORM)工具,它简化了数据库操作,使开发者可以使用面向对象的方式来处理数据库事务。本篇文章将重点讨论如何在Spring框架中集成Hibernate,并探讨编程式事务管理和Spring ...
在本篇“Spring Hibernate 事务管理学习笔记(二)”中,我们将深入探讨Spring框架与Hibernate集成时如何实现高效、安全的事务管理。这是一篇关于源码分析和技术工具使用的文章,适合对Java开发和数据库操作有基础...
2. **Hibernate事务**: Hibernate本身也提供了一种事务管理机制,但在Spring环境中,我们通常使用Spring的事务管理器来协调。当@Transactional注解应用于方法上,Spring会在该方法执行前后自动管理事务的开始和结束...
在`Spring_1800_Spring_Hibernate_Transaction_Annotation`这个压缩包文件中,很可能包含了使用注解方式实现Spring整合Hibernate事务处理的相关示例代码和配置文件。通过阅读和理解这些代码,你可以更好地掌握这一...
4. **配置Hibernate**:配置Hibernate的SessionFactory,指定使用的数据源,并启用JTA事务。 5. **配置Spring事务管理器**:创建Atomikos事务管理器的bean,并配置Spring的PlatformTransactionManager,指定使用...
在本示例中,我们将探讨如何整合Spring AOP(面向切面编程)与Hibernate ORM框架,并利用它们来实现事务管理,模拟一个简单的买书过程。这个过程将涉及到数据库操作,事务的开始、提交和回滚,以及AOP在处理事务中的...
事务和并发控制是数据库管理中的核心概念,特别是在使用ORM框架如Hibernate时,理解它们的工作原理至关重要。本文将深入探讨Hibernate中的事务管理和并发控制。 首先,事务是数据库操作的基本单位,它保证了数据的...
##### 2.3 Hibernate事务使用 在Hibernate中使用事务的典型方法是在Session的生命周期内管理事务。 ##### 2.4 事务性模式(和反模式) **241. 会话/操作反模式** 会话/操作反模式指的是在每个操作都开启一个新的...
本项目是关于如何使用Spring MVC与Hibernate结合来实现事务管理的实践教程,通过MyEclipse自动生成所需的包和配置文件。这里将详细讲解这一过程,以及涉及到的关键知识点。 首先,Spring MVC作为Spring框架的一部分...