- 浏览: 614035 次
- 性别:
- 来自: 厦门
-
文章分类
- 全部博客 (669)
- oracle (36)
- java (98)
- spring (48)
- UML (2)
- hibernate (10)
- tomcat (7)
- 高性能 (11)
- mysql (25)
- sql (19)
- web (42)
- 数据库设计 (4)
- Nio (6)
- Netty (8)
- Excel (3)
- File (4)
- AOP (1)
- Jetty (1)
- Log4J (4)
- 链表 (1)
- Spring Junit4 (3)
- Autowired Resource (0)
- Jackson (1)
- Javascript (58)
- Spring Cache (2)
- Spring - CXF (2)
- Spring Inject (2)
- 汉字拼音 (3)
- 代理模式 (3)
- Spring事务 (4)
- ActiveMQ (6)
- XML (3)
- Cglib (2)
- Activiti (15)
- 附件问题 (1)
- javaMail (1)
- Thread (19)
- 算法 (6)
- 正则表达式 (3)
- 国际化 (2)
- Json (3)
- EJB (3)
- Struts2 (1)
- Maven (7)
- Mybatis (7)
- Redis (8)
- DWR (1)
- Lucene (2)
- Linux (73)
- 杂谈 (2)
- CSS (13)
- Linux服务篇 (3)
- Kettle (9)
- android (81)
- protocol (2)
- EasyUI (6)
- nginx (2)
- zookeeper (6)
- Hadoop (41)
- cache (7)
- shiro (3)
- HBase (12)
- Hive (8)
- Spark (15)
- Scala (16)
- YARN (3)
- Kafka (5)
- Sqoop (2)
- Pig (3)
- Vue (6)
- sprint boot (19)
- dubbo (2)
- mongodb (2)
最新评论
在进行多事务,并发读写的管理时,Mysql的InnoDB引擎采用的是Multiversion Concurrency Control机制,MVCC机制也被其他数据库所采用。每种引擎实现MVCC机制的具体细节不同,但大体思想类似。因此了解其思想,结合场景去应用。
1、MVCC机制是行级锁的一种妥协,多线程事务读取时,避免使用锁,而是采用一种更小的开销,允许非阻塞读取,写操作进行时只锁定必要的记录
2、简单的实现方式:MVCC保存某个时间点上的数据快照。一个事务内,看到的是同一个版本的快照,数据一致。不同事务在同一时间点看到的数据会不一致,因为他们得到的数据版本不一样。InnoDB在每一行记录添加两个额外的隐藏值,分别记录创建时间,和过期(或者删除)时间,这里的时间并不是真正意义上的时分秒,而是事件发生时数据库记录的系统版本号。
(1)每个事务创建时,Innodb的系统版本号会增加,而事务会记录这个作为自己的版本号,如上所述,每条数据库记录会保存两个版本号,一个是创建,一个是过期。当进行查询操作时,遵循两个原则:
a.满足查询条件的记录,其创建版本号必须不大于事务版本,这样保证数据是事务开始前创建
b.过期版本必须是未定义或者大于事务版本,开始后才过期,这样的数据是可读的。
(2)当一个事务修改了数据之后,数据的版本号会变化。其他事务就不会读取修改后的数据,因为和它们创建时获取的版本号不一致。
insert:InnoDB为这个新行记录当前的系统版本号;
delete:InnoDB将当前的系统版本号设置为这一行的删除ID;
update:InnoDB会写一个这行数据的新拷贝,这个拷贝为当前的系统版本号。同时将这个版本号写到旧行的过期时间中。
(3)优点在于,大多数查询不需要获取额外的锁。但是Innodb会为每一行存储多个版本的数据。原理类似于copyonwrie。
(4)可以解决脏读和不可重复读的问题,但是解决不了幻读的问题。脏读就是,事务A读取一个事务B没提交的数据,然后事务B回滚了。MVCC保证事务A读取的肯定是上一个版本的。不可重复读也是同理,事务A只读取其创建时的版本数据,其他事务对数据的修改只会得到新的版本数据。幻读解决不了是因为事务A更新所有数据,而事务B插入数据,但是由于版本问题事务A不能更新新插入的数据。
转自:http://longlongchang.blog.51cto.com/4725201/1175930
发表评论
文章已被作者锁定,不允许评论。
-
mysql 技术内幕学习
2018-10-22 12:42 625... -
mysql 全文索引(fulltext)学习
2018-10-15 11:09 567使用索引是数据库性能优化的必备技能之一。在MySQL数据库中, ... -
mysql cast和convert函数学习(将字符串转数字)
2018-08-03 11:12 1030MySQL 的CAST()和CONVERT()函数可用来获取一 ... -
mysql 外键锁机制
2014-12-09 10:25 1146在mysql的多个存储引擎中,innodb支持外键,但是由于外 ... -
mysql 常见函数总结
2014-11-06 19:41 761--获取当前的database se ... -
MySQL checksum了解
2014-11-05 19:51 542在主从复制中Checksum常常需要对某些重要的表进行一致性检 ... -
Mysql 常见命令总结
2014-11-04 20:01 3681.linux下启动mysql的命令: mysqladm ... -
MySql 数据库的创建和查看
2014-11-04 19:51 411使用SHOW语句找出在服务器上当前存在什么数据库 mys ... -
MySQL独立表空间VS共享表空间
2014-11-04 19:19 570在使用Innodb引擎时将要 ... -
mysql 操作索引FORCE INDEX
2014-09-01 17:14 17271、创建索引 索引的创建可以在CREATE TABLE语句中 ... -
InnoDB Insert Buffer(插入缓冲)
2014-08-30 11:40 1163插入缓冲,并不是缓存的 ... -
mysql 存储过程例子
2014-08-28 11:36 567(1)循环遍历值 drop procedure if e ... -
MySQL if case语句使用总结
2014-08-26 19:47 588Mysql的if既可以作为表达式用,也可在存储过程中作为流程控 ... -
mysql 事务隔离级别
2014-08-25 12:00 689用户可以用SET TRANSACTION语句改变单个会话或者所 ... -
mysql cpu占100%调优案例
2014-08-23 21:44 527解决 MYSQL CPU 占用 100% 的经验总结 ... -
mysql cursor使用
2014-08-22 20:24 883一,什么是游标(cursor) 个人觉得就是一个cursor, ... -
mysql 查看表数据量
2014-08-22 16:55 501数据库中有几十上百张表,那么哪些表的数据量比较大呢,总不 ... -
mysql mysqldump导入导出
2014-08-22 16:32 1060我们来看几个常用用例: (1)导出整个数据库 mysqld ... -
mysql DATE_FORMAT() 函数
2014-08-22 16:23 477定义和用法 DATE_FORMAT() 函数用于以不同的格式显 ... -
MySQL性能调优 - Table_cache(table_open_cache)
2014-08-14 16:12 0table_cache是一个非常重 ...
相关推荐
此外,可能还涉及了并发控制机制,如锁定(Locking)、多版本并发控制(Multiversion Concurrency Control,MVCC)和死锁检测,这些都是解决并发问题的关键技术。 在分布式系统和客户-服务器架构中,数据处理的复杂...
另一种并发控制技术是多版本并发控制(Multiversion Concurrency Control, MVCC),如PostgreSQL和MySQL的InnoDB存储引擎。MVCC允许多个事务并行读取数据,每个事务都有自己的数据视图,即快照,这使得事务可以在不...
MySQL的多版本并发控制(Multiversion Concurrency Control,简称MVCC)是一种用于实现数据库并发访问的机制,尤其在读写频繁的场景下,能够显著提高数据库系统的性能和并发能力。在MySQL中,InnoDB存储引擎支持MVCC...
3. **多版本并发控制(MVCC, Multiversion Concurrency Control)**:每个事务看到的是一个一致性视图,即事务开始时的数据库状态,不受其他事务的影响。例如,InnoDB存储引擎在MySQL中使用的就是MVCC。 4. **乐观...
* MVCC(Multiversion Concurrency Control) 八、数据库原理 * Innodb是如何实现事务的 * B树和B+树的区别 * Mysql锁有哪些? * 如何理解Mysql慢查询 * 什么是RDB和AOF 九、Redis缓存 * Redis的过期键的删除...
1. **多版本并发控制(MVCC,Multiversion Concurrency Control)**: MVCC是一种并发控制机制,它允许事务看到数据的历史版本,而不是最新的状态。在InnoDB中,每行数据都有两个额外的字段,分别表示行的创建版本...
事务隔离的实现通常依赖于两种主要技术:**多版本并发控制(MVCC,Multiversion Concurrency Control)**和**锁定(Locking)**。在可重复读隔离级别下,InnoDB使用MVCC来实现,每个事务看到的是事务开始时刻的快照...