事务的ACID概念相信大家都很熟悉了。这里简单带过。
就像锁粒度的升级会增加系统开销一样,事务处理过程中也会增加服务器的开销。需要更强的CPU,更大的内存和磁盘空间。用户可以根据业务是否需要事务,来选择合适的存储引擎。
本节第一个要分享的点:隔离级别
SQL标准中定义了4种隔离级别。每一种级别都规定了一个事务中所做的修改,哪些在事务内和事务间可见,哪些不可见。较低级别的隔离通常可以执行更高的并发。系统开销也更低。
第二个分享的点:死锁
死锁是指两个或多个事务在同一资源上相互占用,并请求锁定对方占用的资源,从而导致恶性循环的现象。当多个事务以不同的顺序锁定资源时,可能会发生死锁。多个事务同时锁定同一个资源时,也会产生死锁。
如何解决死锁呢?数据库系统实现了各种死锁检测和死锁超时机制。越复杂的系统,比如InnoDB存储引擎,越能检测到死锁的循环依赖,并立即返回一个错误。这种解决方式很有效,否则死锁会导致出现非常慢的查询。还有一种解决方式,将持有最少行级排他锁的事务进行优先回滚,InnoDB目前采用的这种。对于事务型的系统,死锁是不可避免的,应用程序设计时需要考虑如何处理死锁。大多数情况下只需要重新执行因死锁回滚的事务即可。
每天学习一点,每天进度一点!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。