mysql_原理
2018-05-23 本文已影响19人
飞翔的鲲
MySQL运行原理与基础架构
http://blog.csdn.net/quyuedage/article/details/51993409
并发控制和锁的概念
- 锁在功能上分为共享锁(shared lock)和排它锁(exclusive lock)即通常说的读锁和写锁。
事务的隔离级别
image.png
这个写的比较好
https://www.cnblogs.com/snsdzjlz320/p/5761387.html
数据库事务四种隔离级别
http://blog.csdn.net/tolcf/article/details/49283575
- READ UNCOMMITTED( 读未提交 ) , 一个事务能读取另一个交叉事务未提交的数据
事务中的修改即使未提交也是对其它事务可见 - READ COMMITTED( 读提交 ) , 一个事务能读取另一个交叉事务提交后的数据
事务提交后所做的修改才会被另一个事务看见,可能产生一个事务中两次查询的结果不同。 - REPEATABLE READ( 可重读 ) 一个事务不能读取另一个交叉事务的数据
只有当前事务提交才能看见另一个事务的修改结果。解决了一个事务中两次查询的结果不同的问题。 - SERIALIZABLE( 串行化 )
只有一个事务提交之后才会执行另一个事务。
存储引擎
- InnoDB引擎
1.将数据存储在表空间中,表空间由一系列的数据文件组成,由InnoDB管理;
2.支持每个表的数据和索引存放在单独文件中(innodb_file_per_table);
3.支持事务,采用MVCC来控制并发,并实现标准的4个事务隔离级别,支持外键;
4.索引基于聚簇索引建立,对于主键查询有较高性能;
5.数据文件的平台无关性,支持数据在不同的架构平台移植;
6.能够通过一些工具支持真正的热备。如XtraBackup等;
7.内部进行自身优化如采取可预测性预读,能够自动在内存中创建hash索引等。
- MyISAM引擎
1.MySQL5.1中默认,不支持事务和行级锁;
2.提供大量特性如全文索引、空间函数、压缩、延迟更新等;
3.数据库故障后,安全恢复性差;
4.对于只读数据可以忍受故障恢复,MyISAM依然非常适用;
5.日志服务器的场景也比较适用,只需插入和数据读取操作;
6.不支持单表一个文件,会将所有的数据和索引内容分别存在两个文件中;
7.MyISAM对整张表加锁而不是对行,所以不适用写操作比较多的场景;
8.支持索引缓存不支持数据缓存。
-
NDB集群引擎
MySQL Cluster专用。 -
第三方存储引擎...
-
存储引擎选取
4.存储引擎选取参考因素
1.是否有事务需求
如果需要事务支持最好选择InnoDB或者XtraDB,如果主要是select和insert操作MyISAM比较合适,一般使用日志型的应用。
2.备份操作需求
如果能够关闭服务器进行备份,那么该因素可以忽略,如果需要在线进行热备份,则InnoDB引擎是一个不错的选择。
3.故障恢复需求
在对恢复要求比较好的场景中推荐使用InnoDB,因为MyISAM数据损坏概率比较大而且恢复速度比较慢。
4.性能上的需求
有些业务需求只有某些特定的存储引擎才能够满足,如地理空间索引也只有MyISAM引擎支持。所以在应用架构需求环境中也需要管理员折衷考虑,当然从各方面比较而言,InnoDB引擎还是默认应该被推荐使用的。