高性能MySQL笔记超详细

一、MySQL架构与历史A.并发控制1.共享锁(sharedlock,读锁):共享的,相互不阻塞的2.排他锁(exclusivelock,写锁):排他的,一个写锁会阻塞其他的写锁和读锁B.事务1.事务ACID

*原子性(atomicity)一个事务必须被视为一个不可分割的最小工作单元,整个事务中所有操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行其中的一部分操作*一致性(consistency)数据库总是从一个一致性的状态转换到另外一个一致性的状态*隔离性(isolation)一个事务所做的修改在最终提交以前,对其他事务是不可见的*持久性(durability)一旦事务提交,则其所做的修改就会永久保存到数据库中

2.四种隔离级别

*READUNCOMMITTED(未提交读),事务中的修改,即使没有提交,对其他事务也都是可见的,事务可以读取未提交的数据,也被称为脏读(DirtyRead),这个级别会导致很多问题*READCOMMITTED(提交读),大多数数据库系统的默认隔离级别,一个事务开始时,只能“看见”已经提交的事务所做的修改,一个事务从开始直到提交之前,所做的任何修改对其他事务都是不可见的,也叫不可重复读(nonrepeatableread),有可能出现幻读(PhantomRead),指的是当某个事务在读取某个范围内的记录时,另外一个事务又在该范围内插入了新的记录,当之前的事务再次读取该范围的记录时,会产生幻行(PhantomRow)*REPEATABLEREAD(可重复读),通过InnoDB和XtraDB存储引擎,是MySQL的默认事务隔离级别*SERIALIZABLE(可串行化)最高级别,通过强制事务串行执行,避免了幻读问题,会在读取的每一行数据上都加锁,可能导致大量的超时和锁争用的问题

3.死锁:指两个或多个事务在同一资源上相互占用,并请求锁定对方占用的资源,从而导致恶性循环的现象4.事务日志:存储引擎在修改表的数据时只需要修改其内存拷贝,再把该修改行为记录到持久在硬盘上的事务日志中,而不用每次都将修改的数据本身持久到磁盘。事务日志持久以后,内存中被修改的数据在后台可以慢慢地刷回到磁盘,称为预写式日志(Write-AheadLogging)C.多版本并发控制1.多版本并发控制(MVCC)是行级锁的一个变种,但是它在很多情况下避免了加锁操作,因此开销更低。虽然实现机制有所不同,但大都实现了非阻塞的读操作,写操作也只锁定必要的行2.MVCC的实现,是通过保存数据在某个时间点的快照来实现的,有乐观和悲观两种,只在REPEATABLEREAD和READCOMMITTED两个隔离级别下工作D.MySQL的存储引擎1.MySQL的.frm文件保存表的定义,SHOWTABLESTATUS显示表的相关信息2.除非有非常特别的原因需要使用其他的存储引擎,否则应该优先考虑InnoDB引擎3.不要轻易相信MyISAM比InnoDB快之类的经验之谈,这个结论并不是绝对的二、MySQL基准测试A.为什么需要基准测试1.基准测试可以观察系统在不同压力下的行为,评估系统的容量,掌握哪些是重要的变化,或者观察系统如何处理不同的数据B.基准测试的策略1.两种主要的策略:

*针对整个系统的整体测试(集成式full-stack)*单独测试MySQL(单组件式single-


转载请注明:http://www.aierlanlan.com/rzdk/863.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了