摘要:
MVCC(Multi-Version Concurrency Control): 多版本并发控制,主要是为了提高数据库的并发性能 在很多情况下为了避免加锁,大都实现了非阻塞的读操作,写操作也只需要锁定必要的行 innodb的mvcc通过在每行记录后面保存2个隐藏的列来实现 这2个列一个保存了行的创建 阅读全文
摘要:
未提交读 READ UNCOMMITTED 在该级别的事务中的修改即使没有提交,对其他事务也是可见的 事务可以读取其他事务修改完但是没提交的数据,这种问题叫做脏读 这个级别的事务还会造成不可重复读和幻读 性能没比别的级别好很多,所以很少使用 提交读 READ COMMITED 多数数据库默认的隔离级 阅读全文
摘要:
ACID A:原子性(atomicity) 一个事务在逻辑上必须是不可分割的最小单元 整个事务中的所有操作要么全执行成功,要么全失败回滚。不可能只执行其中一部分 C:一致性(consistency) 数据库总是从一个一致性状态转换到另一个一致性状态 怎么理解一致性 I:隔离性(isolation) 阅读全文
摘要:
事务 是一组原子性的sql查询 如果数据库引擎可以成功的对数据库执行这一组查询的所有语句,那么就执行这组查询。 如果其中有任何一句语句无法执行,那么所有语句都不会执行 总结:事务里面的语句要么全执行成功,要么全部执行失败 阅读全文
摘要:
死锁 指的是多个事务在同一个资源上互相占用并请求对方占用的资源,导致的恶行循环的现象。 当多个事务以不同顺序锁定资源的时候就可能产生死锁 多个事务同时锁定一个资源也会产生死锁 解决死锁问题 数据库系统实现了各种死锁检测和死锁超时机制。 越复杂的系统,例如innoDB存储引擎,越能检测到死锁的循环依赖 阅读全文
摘要:
第一层:服务器层/客户端层 提供连接处理,授权认证,安全等功能 第二层:核心服务层/功能层 实现MySQL的核心服务功能,包括查询解析、分析、优化、缓存以及日期时间等所有内置函数,所有跨存储引擎的功能都在这一层实现。例如存储过程、触发器、视图等 第三层:存储引擎层 存储引擎负责MySQL中数据的存储 阅读全文
摘要:
MySQL最基本的锁策略:表锁(并且是开销最小的策略) 表锁会锁定整张表,一个用户对表进行写操作前需要先获得写锁,来阻塞其他用户对该表的所有读写操作。没有写锁时,其他用户才可以正常读 行锁: 可以最大程度支持并发,同时带来最大开销 InnoDB和XtraDB等存储引擎实现了行锁。 行锁只在存储引擎层 阅读全文
摘要:
处理并发读/写的时候,通过实现一个由2种类型组成的锁系统来处理。 即共享锁(读锁),排它锁(写锁)。 读锁是共享的,相互不阻塞,多个用户可以同一时刻同时读取同一资源 写锁是排它的,一个写锁会阻塞其他写锁和读锁,确保只有一个用户在写入数据,并且防止其他用户读取该数据 写锁比读锁有更高优先级,写锁请求可 阅读全文