- 浏览: 599878 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (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 611... -
mysql 全文索引(fulltext)学习
2018-10-15 11:09 552使用索引是数据库性能优化的必备技能之一。在MySQL数据库中, ... -
mysql cast和convert函数学习(将字符串转数字)
2018-08-03 11:12 1012MySQL 的CAST()和CONVERT()函数可用来获取一 ... -
mysql 外键锁机制
2014-12-09 10:25 1127在mysql的多个存储引擎中,innodb支持外键,但是由于外 ... -
mysql 常见函数总结
2014-11-06 19:41 736--获取当前的database se ... -
MySQL checksum了解
2014-11-05 19:51 513在主从复制中Checksum常常需要对某些重要的表进行一致性检 ... -
Mysql 常见命令总结
2014-11-04 20:01 3471.linux下启动mysql的命令: mysqladm ... -
MySql 数据库的创建和查看
2014-11-04 19:51 387使用SHOW语句找出在服务器上当前存在什么数据库 mys ... -
MySQL独立表空间VS共享表空间
2014-11-04 19:19 554在使用Innodb引擎时将要 ... -
mysql 操作索引FORCE INDEX
2014-09-01 17:14 16971、创建索引 索引的创建可以在CREATE TABLE语句中 ... -
InnoDB Insert Buffer(插入缓冲)
2014-08-30 11:40 1135插入缓冲,并不是缓存的 ... -
mysql 存储过程例子
2014-08-28 11:36 546(1)循环遍历值 drop procedure if e ... -
MySQL if case语句使用总结
2014-08-26 19:47 566Mysql的if既可以作为表达式用,也可在存储过程中作为流程控 ... -
mysql 事务隔离级别
2014-08-25 12:00 671用户可以用SET TRANSACTION语句改变单个会话或者所 ... -
mysql cpu占100%调优案例
2014-08-23 21:44 504解决 MYSQL CPU 占用 100% 的经验总结 ... -
mysql cursor使用
2014-08-22 20:24 863一,什么是游标(cursor) 个人觉得就是一个cursor, ... -
mysql 查看表数据量
2014-08-22 16:55 485数据库中有几十上百张表,那么哪些表的数据量比较大呢,总不 ... -
mysql mysqldump导入导出
2014-08-22 16:32 1042我们来看几个常用用例: (1)导出整个数据库 mysqld ... -
mysql DATE_FORMAT() 函数
2014-08-22 16:23 460定义和用法 DATE_FORMAT() 函数用于以不同的格式显 ... -
MySQL性能调优 - Table_cache(table_open_cache)
2014-08-14 16:12 0table_cache是一个非常重 ...
相关推荐
多版本并发控制(Multiversion Concurrency Control, MVCC) MVCC允许事务看到不同的数据版本,从而减少锁的使用,提高并发性能。每个数据项可以有多个版本,每个事务可以看到它开始时的快照,这样就减少了锁的...
4. **多版本并发控制(Multiversion Concurrency Control, MVCC)**:每个事务看到的是数据的一个特定版本,而不是单一的数据状态。这样可以减少锁定带来的性能影响。 5. **冲突检测和恢复(Conflict Detection and...
3. **多版本并发控制(Multiversion Concurrency Control, MVCC)**:每个数据项可以存储多个版本,每个版本都有关联的时间戳或版本号。事务读取数据时,可以选择与其开始时间最接近的版本。这样即使在事务执行过程...
Avout 为 Clojure 的内存 state 模型带来分布式应用发布,通过提供一个分布式实现的 Clojure's Multiversion Concurrency Control (MVCC) STM ,相当于分布式、持久性和可扩展的 Clojure's Atom and Ref 并发原语。...
- **实现方法**:常见的并发控制技术包括锁机制(Lock-based)、乐观并发控制(Optimistic Concurrency Control, OCC)、多版本并发控制(Multiversion Concurrency Control, MVCC)等。 - **恢复**: - **定义**...
此外,可能还涉及了并发控制机制,如锁定(Locking)、多版本并发控制(Multiversion Concurrency Control,MVCC)和死锁检测,这些都是解决并发问题的关键技术。 在分布式系统和客户-服务器架构中,数据处理的复杂...
Chapter 16 of "Database System Concepts," 5th Edition, by Silberschatz, Korth, and Sudarshan delves into the crucial topic of Concurrency Control in database systems. This chapter explores various ...
MVCC:多版本控制(Multiversion Concurrency Control): 指的是一种提高并发的技术。最早 的数据库系统,只有读读之间可以并发,读写,写读,写写都要阻塞。引入多版本之后, 只有写写之间相互阻塞,其他三种操作都...
另一种并发控制技术是多版本并发控制(Multiversion Concurrency Control, MVCC),如PostgreSQL和MySQL的InnoDB存储引擎。MVCC允许多个事务并行读取数据,每个事务都有自己的数据视图,即快照,这使得事务可以在不...
这两种锁定模式通过多版本并发控制(Multiversion Concurrency Control, MVCC)实现,MVCC确保了在读取数据时不会被正在进行的写操作阻塞,从而提高了系统的并发性能。 外键索引在锁定中扮演着重要角色,因为它们...
Oracle9i使用了多版本并发控制(Multiversion Concurrency Control, MVCC),通过读写一致性(Read-Write Consistency)和快照隔离(Snapshot Isolation)确保用户在执行事务时不会看到其他事务的中间状态。...
Oracle的多版本并发控制(Multiversion Concurrency Control, MVCC)允许事务读取数据的旧版本,从而避免锁定当前事务正在修改的数据。 总结来说,SQL Server和Oracle在处理锁和死锁方面有各自的特点和策略。理解并...
5. **并发控制**:Oracle使用多版本并发控制(Multiversion Concurrency Control, MVCC),允许多个用户同时访问数据库而不冲突。 6. **备份与恢复**:Oracle提供多种备份策略,如RMAN(恢复管理器)和物理/逻辑...
常见的并发控制机制包括锁定、乐观并发控制(Optimistic Concurrency Control)和多版本并发控制(Multiversion Concurrency Control, MVCC)。 2. **锁定**:数据库通过锁定数据记录或整个表来防止并发冲突。有...
7. **锁机制(Locking Mechanism)**:SQLite采用多版本并发控制(Multiversion Concurrency Control, MVCC)来处理并发操作,确保多个连接可以同时读取数据库,而写操作则会加锁以防止冲突。 8. **错误处理和日志...
Oracle采用多版本并发控制(Multiversion Concurrency Control, MVCC)机制,每个事务看到的数据是基于事务开始时的一致性视图。当事务尝试访问被锁定的资源时,会根据锁的类型进行等待或者回滚。死锁检测机制会在...
3. **并发控制**:Oracle使用多版本并发控制(Multiversion Concurrency Control, MVCC)来实现高并发性。每个事务看到的数据是事务开始时的一致性视图,即使其他事务正在修改数据。这种机制使得读操作无须锁定,写...
9. **并发控制**:学习Oracle的锁定机制,包括行级锁(Row Locks)、表级锁(Table Locks)和多版本并发控制(Multiversion Concurrency Control, MVCC),以及死锁的概念和解决方案。 10. **数据库架构设计**:...
Oracle采用多版本并发控制(Multiversion Concurrency Control,MVCC)机制来实现高并发。在MVCC中,每个事务看到的数据是该事务开始时的一致性视图,即使其他事务在此期间对数据进行了修改。这种方式避免了读写冲突...