学习总结---INNODB 事务并发
目前在做一个OLTP的数据库系统,批量读写和随机读写并发,情况比较复杂。INNODB是我们的MYSQL引擎,他的主要特点是读操作可以不受阻塞,而修改操作会加锁。如何才能最高效的使用innodb是我们需要解决的问题。为此我研究了innodb的在线文档。文中不确切的地方敬请指正。
INNODB的读数据总是一致的,如果在Session-1读的过程中,Session-2对数据进行修改,不管session-2是否提交,在session-1的事务中都会读到修改前的值。读操作保持一致性并不受阻塞的原因是多版本机制。所谓多版本机制是指innodb会保存被修改数据的旧版本,以支持并发和回滚。多版本也决定了delete操作不会立刻导致数据从数据文件移除,而是等事务log被清理的时候才删除。多版本机制的关键是undo和redo事务日志,每行为支持多版本包含3个域:
DB_TRX_ID最近一次修改或者插入该行的事务号;这会决定某个select是否能获取到某行数据;
Db-roll-ptr指向undo日志的操作;
DB_ROW_ID递增的行版本号;
如果执行的不止是select操作,而是select for update,或者select for share lock,则会在对应的数据上加上lock,目前innodb支持3种锁:
Record lock,锁定一条记录,加载index上;
Gap lock 锁定一个记录区间,如果通过唯一性索引进行select则不会导致gap lock,因为record lock就够了;
Next key locks结合了上面两种,用于搜索并阻止“幻读”,因为该锁不仅能锁住检索到的行,还会锁住该记录前面的记录集合,这样如果加了锁insert就不会成功。需要注意的是如果检索的不是索引,或者没有检索到结果,lock会加在整个表上,导致其他的排它锁不能申请成功。
这就要求我们在做update的时候必须以索引作为过滤条件,并且尽快结束。
学习总结---INNODB 事务并发的更多相关文章
- spring学习笔记---数据库事务并发与锁详解
多事务运行并发问题 在实际应用中,往往是一台(或多台)服务器向无数客户程序提供服务,当服务器查询数据库获取数据时,如果没有采用必要的隔离机制,可能会存在数据库事务的并发问题,下面是一些常见的并发问题分 ...
- 多事务运行并发问题spring学习笔记——数据库事务并发与锁详解
多事务运行并发问题 在实际应用中,往往是一台(或多台)服务器向无数客户程序提供服务,当服务器查询数据库获取数据时,如果没有采用必要的隔离机制,可能会存在数据库事务的并发问题,下面是一些常见的并发问题分 ...
- 搞懂MySQL InnoDB事务ACID实现原理
前言 说到数据库事务,想到的就是要么都做修改,要么都不做.或者是ACID的概念.其实事务的本质就是锁和并发和重做日志的结合体.那么,这一篇主要讲一下InnoDB中的事务到底是如何实现ACID的. 原子 ...
- 一文快速搞懂MySQL InnoDB事务ACID实现原理(转)
这一篇主要讲一下 InnoDB 中的事务到底是如何实现 ACID 的: 原子性(atomicity) 一致性(consistency) 隔离性(isolation) 持久性(durability) 隔 ...
- Spring5.0源码学习系列之事务管理概述
Spring5.0源码学习系列之事务管理概述(十一),在学习事务管理的源码之前,需要对事务的基本理论比较熟悉,所以本章节会对事务管理的基本理论进行描述 1.什么是事务? 事务就是一组原子性的SQL操作 ...
- Select for update/lock in share mode 对事务并发性影响
select for update/lock in share mode 对事务并发性影响 事务并发性理解 事务并发性,粗略的理解就是单位时间内能够执行的事务数量,常见的单位是 TPS( transa ...
- MySQL · 引擎特性 · InnoDB 事务锁简介
https://yq.aliyun.com/articles/4270# zhaiwx_yinfeng 2016-02-02 19:00:43 浏览2194 评论0 mysql innodb lock ...
- MySQL · 引擎特性 · InnoDB 事务子系统介绍
http://mysql.taobao.org/monthly/2015/12/01/ 前言 在前面几期关于 InnoDB Redo 和 Undo 实现的铺垫后,本节我们从上层的角度来阐述 InnoD ...
- MySQL · 引擎特性 · InnoDB 事务系统
前言 关系型数据库的事务机制因其有原子性,一致性等优秀特性深受开发者喜爱,类似的思想已经被应用到很多其他系统上,例如文件系统等.本文主要介绍InnoDB事务子系统,主要包括,事务的启动,事务的提交,事 ...
随机推荐
- jquery读取本地文件,Windows上报错。XMLHttpRequest cannot load xxx. Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https, chrome-extension-resource.k.cors.a.c
问题: 测试报告,使用本地的json.txt文件,结果文件读取失败,报错如下: XMLHttpRequest cannot load xxx. Cross origin requests are on ...
- oracle查询锁表
select b.username,b.sid,b.serial#,logon_time from v$locked_object a,v$session b where a.session_id = ...
- js:二级联动示例
联动原理 当用户点击省级的下拉选项,选择所在省,下一个下拉选项里的选项,则变成用户选择省下的所有市的信息,不会出现其它省市的信息. 省市数据 把省市数据,保存在js文件中,以json形式保存,以便读取 ...
- hdoj1014 互质
Uniform Generator Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- unity profiler - Loading.ReadObject
关于Loading.ReadObject耗费比较高,有什么推荐的方法吗? Loading.ReadObject是Unity引擎的资源加载函数,一般出现在切换场景和加载API调用时,这其中包括纹理.网格 ...
- phpcms与discuz的ucenter整合
1.安装phpcms系统,域名为pc.me 2.安装discuz,并选择安上uc_server,域名为dz.me 3.在phpcms下phpsso的系统设置 4.到ucenter管理中心- ...
- Struts2的拦截器技术
1. 拦截器的概述 * 拦截器就是AOP(Aspect-Oriented Programming,面向切面)的一种实现.(AOP是指用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作 ...
- iOS.Dev.Guru
1. Ricardo Quesada Cocos2d https://github.com/ricardoquesada http://www.elance.com/s/rquesada/ 2. Je ...
- iOS.Book.Effective Objective-C 2.0
1. 中文翻译版 (更新中) https://github.com/HagerHu/effective-objective-c-2.0 2. Book的主页 和 代码主页 http://www.eff ...
- [SoapUI] 通过正则表达式从xml格式的response中提取ID
import com.eviware.soapui.support.GroovyUtils import java.util.regex.* //Get response def groovyUtil ...