高性能混凝土,高性能MySQL

第一章:MySQL架构
1.1MySQL的逻辑架构



最顶层的各种服务并非MySQL所有,它们是基于网络的客户端/服务器/服务(连接处理,授权认证,安全等)
第二层包括了MySQL大多数的核心内容,比如查询解析,分析,优化,缓存以及所有的内建函数,各种存储引擎提供的功能也集中在这层,如存储过程,触发器,视图等
第三层包含了存储引擎,服务器通过存储引擎API(Storage Engine API)与引擎进行通信
1.1.1连接管理与安全性
每个客户连接在服务器中都有自己的线程,每个连接所属的查询都会在指定的某个单独线程中完成.服务器负责缓存线程,因此不需要为每个新的连接重建或者撤销线程.当客户端连接到MySQL服务器时,服务器要对其进行认证(Authenticate),对于安全套接字层方式的连接,还使用了X.509证书,连接成功后服务器会验证该用户是否有权限执行某个具体查询
1.1.2优化与执行
MySQL解析查询,并创建一个内部数据结构(解析数),然后对其进行各种优化(重写查询,索引),在解析查询之前服务器会查询缓存(只保存Select语句和相应的结果)
1.2并发控制
无论何时,只要不止一个查询同时修改数据,都会产生一个并发控制问题 Concurrent Reader并发读 Concurrent Write并发写
1.2.1读锁(Read Lock)/写锁(Write Lock)
读锁也称为共享锁(Shared Lock) 写锁也成为排它锁(Exclusive Lock)
1.2.2锁粒度(Lock Granularity)
一种提高共享资源并发性的方法就是让锁定对象更有选择性,理想方式是只对要修改的数据片精确加锁,然而每一种锁操作(获得锁,检查锁)都会消耗系统资源,所谓的锁策略就是在锁开销和数据安全之间寻求一种平衡(这种平衡也影响系统性能)
表锁(Table Lock)开销最小的就是表锁,它将加锁整张表(MyISAM)
行级锁(Row locks)行级锁可以支持最大的并发处理,同时也带来最大的锁开销(InnoDB)
1.3事务
事务是一组原子性的SQL查询语句,事务ACID测试:
原子性(Atomicity):一个事务必须被视为一个单独的内部"不可分"的工作单元
一致性(Consistency):最终事务没有提交,任何事务处理过程中所做的数据改变,也不会影响到数据库的内容
隔离性(Lsolation):事务完成后才对其它事务可见,事务过程通常不可见(Invisible)
持久性(Durability):事务提交后,数据改变将是永久性的
1.3.1隔离级
隔离级限定事务内外的哪些改变是可见的,哪些是不可见的,低级别的隔离级一般支持更高的并发处理,并拥有更低的系统开销
READ UNCOMMITTED(读取未提交内容)也称之为脏读(Dirty read)
READ COMMITTED(读取提交内容)大多数DB的默认级别,
REPEATABLE READ(可重读)MySQL的默认级别,幻读(Phantom Read),
SERIALIZABLE(可串行化)最高级别的隔离级,强制事务排序,使之不可能相互冲突
1.3.2死锁
死锁是指两个或多个事务子同一资源上相互占用,并请求加锁时,而导致的恶性循环现象.
1.3.3事务日志
预写式日志(Write-Ahead Logging):存储引擎先更新数据在内存中的拷贝,并写入事务日志(磁盘上),最后相关进程会在某个时间把数据更新到磁盘上
1.3.4MySQL中的事务
MySQL提供3个事务型存储引擎:InnoDB,NDB Cluster,Falcon,第三方事务引擎:solidDB,PBXT
AUTOCOMMIT(自动提交):MySQL默认操作模式,除非显式的开始一个事务,否则它将每个查询视为一个单独的事务执行>show variables like 'AUTOCOMMIT' >set AUTOCOMMIT=on,对于非事务表(MyISAN,Memeory Table)意义不大,这些表一直在操作AUTOCOMMIT模式
在事务中混合使用存储引擎:MySQL AB正打算为服务器增加一个高层次的事务管理服务,使用户可以安全的在事务中混合和匹配事务性表(Transactional Table)(混合使用InnoDB,MyISAN!)
隐式和显式锁定:InnoDB使用二相锁定协议(Two-PHase Locking Protocol),一个事务在执行过程中的任何时候都可以获得锁,只有在COMMIT或ROLLBACK语句后才可以释放这些锁,InnoDB自动处理锁定,InnoDB也支持显式锁定,MySQL支持Lock Tables和Unlock Tables,
一个应用从MyISAN引擎转换到InnoDB引擎后,没必要使用Lock Tables,会引发服务器的性能问题
1.4多版本并发控制
多版本并发控制(MVCC,Multiversion Concurrency Control)通过及时保存在某些时刻的数据快照,某一时刻同一事务数据视图是一致的,不同事务看到的数据却是不一样的.保存额外记录,使大多数读操作都不必申请加锁,但需要做额外的整理操作(houseKeeping Operations)
MVCC又分为乐观并发控制(Optimistic Concurrency Control),悲观并发控制(Pessimistic Concurrency Control)
1.5MySQL的存储引擎
MySQL会把每个数据库保存为一个目录,每个表保存为同名以.frm为后缀的文件,类Unix中大小写敏感
检查MySQL数据库中的u_user表:show table status like 'u_user' \g
Name:u_user(表名)
Engine:MyISAM(引擎)
Version:(引擎版本?)
Row_format:行格式,对于MyISAM可能是Dynamic(包含varchar,blob等可变字段),Fixed(char,integer等固定字段),Compressed(压缩)
Rows:表的行数(事务性表,这通常是估值)
Avg_row_length:平均每行包括的字节数
Data_length:整个表的数据量
Max_data_length:表可以容纳的最大数据量
Index_length:索引占用磁盘空间的大小
Data_free:已分配,但未被使用的空间
Auto_increment:下一个AUTO_INCREMENT值
Create_time:表最初创建时的时间
Update_time:表数据最近被更新的时间
Check_time:使用CHECK TABLE或myisamchk检查最近的时间
Collation:默认字符集和字符排列规则
Checksum:如果开启对整个表的内容计算实时的校验和(Checksum)
Create_options:创建时的其它所有选线
Comment:MyISAM将显示注释,InnoDB显示剩余空间,视图显示VIEW
1.5.1MyISAM引擎
MySQL的默认引擎,在性能和可用特征之间,提供一种良好的平衡,包含全文检索(Full-Text Indexing),压缩,空间函数(GIS),不支持事务&行级锁
存储:MyISAM将每个表存储为两个文件:数据文件(.myd)和索引文件(.myi),MyISAM的格式是平台通用的,MyISAM表可以包含动态行(Dynamic Row)和静态行(Static Row 固定长度),MyISAM表可容纳的总行数,一般只受限于数据库服务器的可用磁盘空间,以及操作系统支持创建的最大文件大小
加锁与并发:MyISAM对整张表加锁,Reader获得共享锁,writer获得排它锁
修复:MyISAM支持自动修复,也可以手工修复:check mytable/repair table mytable/myisamchk
索引:
延迟更新索引:使用表创建选项Delayed key writes ,不会将索引的改变写入磁盘,而是在内存的键缓存区(in-memory key buffer),大大提高表的处理性能
压缩:使用myisampack对表进行压缩打包,压缩表一般是不能改变的
1.5.2MyISAM Merge引擎
合并表(Merge Table)是指将几个相同的MyISAM表合并为一个虚表(Virtual Table),它对于MySQL记录日志或数据仓库特别有空
1.5.3InnoDB引擎
Tags:  高性能接收器 高性能计算 高性能纤维 高性能笔记本 高性能混凝土

延伸阅读

最新评论

发表评论