1. MYSQL逻辑架构
第二层是mysql的核心,包括查询解析、分析、优化、缓存以及内置函数。Mysql会优化解析查询,并创建内部数据结构(解析树),然后对其进行各种优化,包括重写查询、决定表的读取顺序,以及选择合适的索引等。
2. 并发控制
2.1 读写锁
共享锁、排它锁,也叫读锁,写锁。
读锁是共享的,或者说是互不阻塞的。多个客户在同一时刻可以同时读取同一个资源,而 互不干扰。写锁是排他的,写锁会阻塞其他的读锁和写锁。
2.2 锁粒度
表锁:mysql最基本的锁策略,并且是开销最小的策略。锁定整张表。
行锁:可以最大程度支持并发处理, (带来最大的锁开销)。
3. 事物
ACID:原子性、一致性、隔离性、持久性。
隔离级别:1、read uncommited(读未提交),事物中修改即使没有提交对其它事物也是可见的,会导致脏读。
2. read commited(读提交) ,一个事物开始时,只能看见已经提交的事物所做的修改。即一个事物所做的修改对其他事物是不可见的。可能导致不可重复度。
3. repeatable read(可重复读) ,解决了脏读的问题。保证了同一事物中读取同一的记录结果是一致的。没有解决幻读,幻读指的是当某个事物在读取某个范围内的记录时,另外一个事物又在该范围内插入了新的记录,之前的事物读取该范围的记录就会产生幻行。
4. serializable(可串行化)最高隔离级别。强制事物串行执行,避免了前面说的幻读问题。
4. 死锁
死锁是指两个或多个事物在同一资源上互相占用,并请求锁定对方占用的资源,从而导致恶性循环的现象。当多个事物试图以不同的顺序锁定资源时,就可能参数死锁。多个事物同时锁定一个资源时,也会参数死锁。
InnoDB目前处理死锁的方法是,将持有最少行级排他锁的事物进行回滚。
5. 事物日志
事物日志可以帮助提高事物的效率。使用事物日志,存储引擎在修改表的数据时只需要修改其内存拷贝,再把该修改行行为记录到持久在硬盘上的事物日志中,不需要每次豆浆修改的数据持久到磁盘。
6. MySQL中的事务
两种事务的存储引擎:InnoDB和NDB Cluster.
自动提交(autocommit)
Mysql默认采用自动提交模式。
设置事物的隔离级别:set transaction isolation level read commit命令设置
隐式和显式锁定
InnoDB采用两阶段锁定协议。在事务执行过程中,随时可以执行锁定,锁只有在执行commit或者rollback的时候才会释放,并且所有的锁都是同一时刻被释放。(隐式锁)
InnoDB也支持显示锁定
select ... lock in share mode
select ... for update
多版本并发控制
MVCC是行级锁的变种,开销较少。InnDB的mvcc,是通过在每行记录后面保存两个隐藏的列来实现的。一个列是保存行的创建时间,一个保存行的过期时间,每一个事物开始系统版本号都会自动增加。保存这两个版本号,大多数事物就不用加锁了。
7. MYSQL存储引擎
http://blog.csdn.net/qq_23211905/article/details/72230981
1.专库专用,数据垂直拆分
垂直拆分的意思是把不同业务的数据拆分到不同的数据库中。影响:需要配置多个数据源,带来的是每个数据库连接池的隔离。需要考虑分布式事物的问题。好处是减轻数据库的压力。
2. 水平拆分
把同一个表中的数据拆到两个数据库中,参数原因:某个业务的数据表的数据量或者更新量达到单个数据库的瓶颈。数据水平拆分和读写分离的区别是:读写分离解决的是读压力大的问题,对数据量大和更新量的情况并不考虑。
带来的影响:访问用户信息时需要解决SQL路由的问题,需要解决在哪个数据库中获取相应的信息。主键机制,自增不能使用。