1.MySql的逻辑架构
最顶层的各种服务并非Mysql独有。他们是许多基于网络的客户端服务器工具或服务器都需要的服务,比如连接处理,授权认证,安全等。
第二层值得关注。它包括了MySql的大多数核心内容,比如查询解析,分析,优化,缓存以及所有内建函数(如时间处理,数学,加密等)的代码。各种存储引擎提供的功能也集中在这层,如存储过程,触发器,视图等。
第三层包含了存储引擎,存储引擎负责存储和提权所有存放在MySql中的数据。存储引擎不会进行SQL解析,也不会互相通信,他们只是简单的响应服务器的请求。
其中应用层为所有RDBMS用户提供用户接口,逻辑层包括了所有核心功能的实现,物理层则负责将数据存储在硬件设备上。
图中右侧更为具体的描述了逻辑层的组成,查询处理子系统、事务管理子系统、恢复管理子系统和存储管理子系统共同组成了MySQL的逻辑层。相信Storage Engine的位置是在Storage Management处,既Storage Engine属于Storage Management子系统的一部分
为了让思路更清晰一些,下面给出一幅比较全面的体系结构图(或更确切的说是流程图,只是忽略了反馈)
2.MySql的并发控制
每种MySQL存储引擎都可以实现独有的锁策略(Lock Policy)或锁粒度(Lock Granularitey)。在存储引擎设计中,锁管理(Lock Management)事个非常重要的议题。将锁粒度调整到某一水平,就能为某种应用提供更佳的性能,由于MySQL提供了多种引擎,所以不需要一个通用的解决方案,下面介绍两种重要的锁策略:
表锁(Table Lock)
MySQL支持大多数基本的锁策略,其中开销最小的所策略是表锁,他将整个表加锁,当一个用户对表进行写操作时,用户可以获得一个写锁,写锁禁止其他的用户读写操作。写锁比读锁的优先级更高,即使有读操作用户已排在队列中,一个被申请的写锁仍可以排在所队列的前列。
行级锁(Row Lock)
行级锁可以支撑最大的并发处理,同时也带来最大的锁开销。行级锁由存储引擎实现,而不是由MySQL服务器实现。服务器完全不了解存储引擎里的锁实现方式
2.MySql的存储引擎
2.1获取表的存储引擎:
-
show table status like ‘%user%’ \G
这个\G可以让数据格式按照(key-value模式)格式。
2.2 MyISAM
-
MYISAM对整张表进行加锁,而不是行。用户在运行select查询时,可在一张表内插入新行(也称之为‘并发插入’)
-
修复方法:
check table user;
repair table user;
-
索引的时候对于text和bolb只支持前500个字符。
-
支持Delay key write,即主键变动不会马上写入磁盘以提升性能,因此在重启MyISAM引擎后有必要check myisam
-
使用myisampack工具可将MyISAM数据库进行压缩,压缩后具有更小的存放空间和性能,但是只读的。
-
MyISAM支持Merge Engine,将其他MyISAM表虚拟的合并到一个表中。
2.3 InnoDB
InnoDB主要用于“事务型”处理
InnoDB支持外键。
InnoDB支持“Raw Disk分区”直接作为数据的存储空间
使用MVCC进一步提升锁的并发性。
默认REPEATABLE READ事务隔离级别。
它使用Cluster Index,查询主键的速度非常快
非主键的索引一定会包含主键索引,因此要注意主键的大小。
InnoDB创建、修改索引的时间比MyISAM消耗的要大。
InnoDB当初是基于“低磁盘空间、单CPU、有限内存”的条件构建的,现在面临规模上拓展的难题。
2.4 Memory Engine
比MyISAM快一个数量级左右,但是重启后会丢失。
主要用于Cache,Map,中间处理结果等类似操作
表级锁定
它不同于临时表
2.5 Archive Engine
不支持索引,只支持select和insert
自动用zlib压缩,低I/O消耗
主要用途:Replication(MySQL复制集群)中的Master,因为slave可以用任意其他形式,复制的时候非常有优势。
2.6 CSV Engine
支持将csv文件格式(以;分隔,好多通讯录导出的那个玩意儿)作为数据库。。
一般用于MySQL和其他支持csv格式程序的数据交换。
2.7 The Federated Engine
目前仍在实验中,一般用于Hack的方式解决Rplication中遇到的问题。
2.8 The Blackhole Engine(黑洞引擎)
丢弃所有的insert操作不存储,但是仍记录下日志。。这个很搞笑
据说也是Rplication和审计日志的时候用到
2.9 NDB Engine
这个是索爱开发的(没错,就是那个索爱手机)
为高速(实时系统),冗余和负载均衡而设计。
我理解这是个分布式数据库引擎:
每个Node上存放若干Segment的数据(可冗余,多份copy),对上面是透明的。
据说这个引擎非常NB,但是不是一般应用可以用的,光搞清楚配置就可以写好几本书……我觉得Apache下的按个Ca什么应该更适用于实际一点。
2.10 The Falcon Engine
Jim Starkey(MVCC的发明者)开发的引擎,2006年刚引入MySQL,非常年轻。主要是事务操作全部在内存中执行因此commit和rollback比较快。
2.11 The solidDB Engine
SolidDB公司开发的引擎,很多特性与InnoDB类似。
4、如何选择合适的MySQL Engine
以下依据仅是一些参考因素:
事务:业务是否需要支持事务,如果需要InnoDB是最好的选择,否则MyISAM
并发:如果只是少量的insert和select,MyISAM是最好的选择。
备份:如果业务不允许离线备份(挺掉MySQL直接拷贝),请参考11章。
故障恢复:InnoDB的故障恢复速度远快于MyISAM
cluster index:InnoDB或solidDB
全文索引:MyISAM
5、从业务场景出发选择Engine
Logging:高insert速度,MyISAM、Archive。如果需要进行大量在线分析,可用Rplication,在slave上read操作。或者对Table切割(Merge Table),缩小出冲突区域然后再进行分析。
只读或读操作占多:MyISAM,但是崩溃后恢复起来会很慢。
处理订单:一般需要事务支持,InnoDB是首选
股票数据处理:如果数据已经收集完毕,MyISAM。如果需要并发地读和写,行级锁定的引擎是好的选择。
BBS:每个Request都需要好多个query(select,insert、update等)来支持。特别需要注意一些特殊SQL语句:
mysql> SELECT COUNT(*) FROM table;
不是每个Engine都能快速的完成这个查询,MyISAM可以,但是其他很多都不行。对于每种引擎,都有一些这样的“语句速度Bug”。
基于CD-ROM或DVD的程序:使用MyISAM或者压缩的MyISAM,特别是后者,因为占用空间小,而且CD/DVD本来就是只读的。
6、改变表的引擎
方法1:
mysql >> alter table mytable engine = InnoDB;
警告:MySQL默认采用row-by-row的拷贝,这可能会导致严重的I/O性能下降。
方法2:
也可以通过mysqldump导入,然后mysq再导入,只需修改create中的引擎即可。
方法3:
mysql >> create table test_innodb like test; //只复制结构
mysql >> alter test_innodb engine = innodb; //修改引擎
mysql >> insert into test_innodb select * from test; //快速的插入
但是万一有失败的话会非常麻烦,因此不如采用事务的方式:
mysql >> START TRANSACTION;
mysql >> INSERT INTO innodb_table SELECT * FROM myisam_table WHERE id BETWEEN x AND y;
mysql >> COMMIT;
如果修改过程中不希望有新数据捣乱,可以直接Lock Table.
- 大小: 46.3 KB
- 大小: 99.5 KB
- 大小: 44 KB
分享到:
相关推荐
高性能MySQL_第3版_超清中文带目录版[PDF] 序 I 前言 III 第1章:MySQL架构 1 第2章:寻找瓶颈:基准测试(Benchmarking)与性能分析(Profiling) 32 ...第14章:用于高性能MySQL的工具 583 附录 索引 659
《高性能MySQL第四版》是MySQL领域的一本经典著作,由Silvia Botros和Jeremy Tinley共同撰写,并由Jeremy Cole作序。这本书自初次发行以来,已经伴随MySQL社区走过了17年,见证了MySQL的不断进化和发展。随着技术的...
《高性能MySQL》是一本深入探讨MySQL数据库系统优化与管理的经典著作。这本书涵盖了MySQL的架构、历史、性能调优以及基准测试等多个重要主题,对于数据库管理员、开发人员以及对数据库性能有高要求的技术人员来说,...
第1章 mysql 架构与历史 1 第2章 mysql 基准测试 35 第3章 服务器性能剖析 67 第4章 schema 与数据类型优化 111 第5章 创建高性能的索引 141 第6章 查询性能优化 195 第7章 mysql 高级特性 259 第8章 优化服务器设置...
本书《MySQL性能优化和高可用架构实践》是一本详细介绍MySQL性能优化和高可用架构实践的书籍,旨在帮助读者提升MySQL数据库的性能和可靠性。本书的内容涵盖了查询优化的基本原则和最佳实践,例如索引的设计和使用,...
《高性能MySQL》是数据库管理员、开发人员和系统架构师必备的一本经典著作,特别是对于处理大规模数据和高并发场景的企业来说,这本书提供了丰富的知识和实践经验。该书的第三版不仅涵盖了MySQL的基础操作,还深入...
《高性能MySQL》是数据库管理员、开发人员和系统架构师必备的一本经典著作,它深入探讨了MySQL的各个方面,包括性能优化、高可用性、备份、恢复、复制和安全性等。这本书的第三版更是包含了最新的MySQL技术和最佳...
《高性能MySQL》汇聚了著名MySQL 专家在实践中构建大型系统的多年宝贵经验,指导你如何使用MySQLTF发出快速可靠的系统。的第二版着眼于健壮性、安全性及数据完整性,涵盖了 MySQL性能的细微之处。 《高性能MYSQL》...
高性能Mysql Mysql书籍 索引 SQL优化 高可用 系统架构
全书共分为16 章和6 个附录,内容涵盖MySQL 架构和历史,基准测试和性能剖析,数据库软硬件性能优化,复制、备份和恢复,高可用与高可扩展性,以及云端的MySQL 和MySQL相关工具等方面的内容。 改资料对高级和中级...
扫描版[电子书.pdf,主要内容包括:第一章mysql架构与历史;第二章mysql基准与测试;第三章服务器性能剖析;第四章schema与数据类型优化;第五章创建高性能索引;第六章查询性能优化;第七章mysql高级特性;第八章...
第1章MySQL架构与历史1 1.1MySQL逻辑架构1 1.1.1连接管理与安全性2 1.1.2优化与执行3 1.2并发控制3 1.2.1读写锁4 1.2.2锁粒度4 1.3事务6 1.3.1隔离级别8 1.3.2死锁9 1.3.3事务日志10 1.3.4MySQL中的事务...
高性能mysql第三版 高性能mysql第三版 高性能mysql第三版 高性能mysql第三版
【高性能MySQL 第三版读书笔记 一至六】主要涵盖了MySQL服务器优化、操作系统和硬件优化、复制技术、可扩展性方案、MySQL分支与变种以及高可用性策略等多个方面。以下是对这些知识点的详细说明: 1. **优化服务器...
第1章 mysql 架构与历史 1 第2章 mysql 基准测试 35 第3章 服务器性能剖析 67 第4章 schema 与数据类型优化 111 第5章 创建高性能的索引 141 第6章 查询性能优化 195 第7章 mysql 高级特性 259 第8章 优化服务器设置...
全书共分为16 章和6 个附录,内容涵盖MySQL 架构和历史,基准测试和性能剖析,数据库软硬件性能优化,复制、备份和恢复,高可用与高可扩展性,以及云端的MySQL 和MySQL相关工具等方面的内容。每一章都是相对独立的...
《高性能MySQL(第3版)》是一本深受数据库管理员、开发者和系统架构师喜爱的经典书籍,专注于MySQL的性能优化和高效使用。这本书深入探讨了如何在实际应用中最大化利用MySQL的潜能,涵盖了许多关键主题,包括查询...