欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

高性能MYSQL(mysql架构与历史)

程序员文章站 2024-03-20 22:39:58
...

1. MYSQL逻辑架构
高性能MYSQL(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路由的问题,需要解决在哪个数据库中获取相应的信息。主键机制,自增不能使用。