学习总结---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事务子系统,主要包括,事务的启动,事务的提交,事 ...
随机推荐
- Gradle with Android
[Gradle with Android] The Android Studio build system is based on Gradle, and the Android plugin for ...
- 表单跳转到Struts2
在使用表单跳转到Struts2时,路径一直不正确. login.html如下: <form action="login.do" method=post> 账号:< ...
- 带图标的input
<style> .text{ border:solid 2px #ccc; width:400px; height:40px; background:url(http://d.lanren ...
- 破解版ps
http://www.sdifen.com/adobe-photoshop-cc.html
- [leetcode]139. Word Break单词能否拆分
Given a non-empty string s and a dictionary wordDict containing a list of non-empty words, determine ...
- jDeveloper运行慢
最近在使用 Jdeveloper 10.1.3.3 版本时发现速度奇慢无比,后经Google,发现如下解决方案:在 jdev.conf 文件的末尾加上如下两行,速度即可得到显著的提高. AddVMOp ...
- Android 获取ROOT权限原理解析
一. 概述 本文介绍了android中获取root权限的方法以及原理,让大家对android玩家中常说的“越狱”有一个更深层次的认识. 二. Root的介绍 1. Root 的目的 可以让 ...
- 767A Snacktower
A. Snacktower time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...
- laravel加载视图
1.控制器 2.路由 3.视图
- 2018.09.27 bzoj4300: 绝世好题(二进制dp)
传送门 简单dp. 根据题目的描述. 如果数列bn{b_n}bn合法. 那么有:bi−1b_{i-1}bi−1&bi!=0b_i!=0bi!=0,因此我们用f[i]f[i]f[i]表示数 ...