`
苦逼的程序员
  • 浏览: 28212 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

《高性能 MySql》 第一章 Mysql架构(笔记)

 
阅读更多

 

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;

 

  •  索引的时候对于textbolb只支持前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快一个数量级左右,但是重启后会丢失。
主要用于CacheMap,中间处理结果等类似操作
表级锁定
它不同于临时表

2.5  Archive Engine
不支持索引,只支持selectinsert
自动用zlib压缩,低I/O消耗
主要用途:ReplicationMySQL复制集群)中的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,非常年轻。主要是事务操作全部在内存中执行因此commitrollback比较快。

2.11  The solidDB Engine
SolidDB公司开发的引擎,很多特性与InnoDB类似。

 

4、如何选择合适的MySQL Engine

以下依据仅是一些参考因素:

事务:业务是否需要支持事务,如果需要InnoDB是最好的选择,否则MyISAM

并发:如果只是少量的insertselectMyISAM是最好的选择。

备份:如果业务不允许离线备份(挺掉MySQL直接拷贝),请参考11章。

故障恢复:InnoDB的故障恢复速度远快于MyISAM

cluster indexInnoDBsolidDB

全文索引:MyISAM

5、从业务场景出发选择Engine

Logging:高insert速度,MyISAMArchive。如果需要进行大量在线分析,可用Rplication,在slaveread操作。或者对Table切割(Merge Table),缩小出冲突区域然后再进行分析。

只读或读操作占多MyISAM,但是崩溃后恢复起来会很慢。

处理订单:一般需要事务支持,InnoDB是首选

股票数据处理:如果数据已经收集完毕,MyISAM。如果需要并发地读和写,行级锁定的引擎是好的选择。

BBS:每个Request都需要好多个queryselectinsertupdate等)来支持。特别需要注意一些特殊SQL语句:

mysql> SELECT COUNT(*) FROM table;

不是每个Engine都能快速的完成这个查询,MyISAM可以,但是其他很多都不行。对于每种引擎,都有一些这样的语句速度Bug”

基于CDROMDVD的程序:使用MyISAM或者压缩的MyISAM,特别是后者,因为占用空间小,而且CDDVD本来就是只读的。

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 第四版 英文版 PDF下载 [high performance mysql 4th edition PDF]

    《高性能MySQL第四版》是MySQL领域的一本经典著作,由Silvia Botros和Jeremy Tinley共同撰写,并由Jeremy Cole作序。这本书自初次发行以来,已经伴随MySQL社区走过了17年,见证了MySQL的不断进化和发展。随着技术的...

    高性能MySQL.pdf

    《高性能MySQL》是一本深入探讨MySQL数据库系统优化与管理的经典著作。这本书涵盖了MySQL的架构、历史、性能调优以及基准测试等多个重要主题,对于数据库管理员、开发人员以及对数据库性能有高要求的技术人员来说,...

    高性能MySQL(第3版).Baron.Scbwartz_2

    第1章 mysql 架构与历史 1 第2章 mysql 基准测试 35 第3章 服务器性能剖析 67 第4章 schema 与数据类型优化 111 第5章 创建高性能的索引 141 第6章 查询性能优化 195 第7章 mysql 高级特性 259 第8章 优化服务器设置...

    MySQL性能优化和高可用架构实践.pptx

    本书《MySQL性能优化和高可用架构实践》是一本详细介绍MySQL性能优化和高可用架构实践的书籍,旨在帮助读者提升MySQL数据库的性能和可靠性。本书的内容涵盖了查询优化的基本原则和最佳实践,例如索引的设计和使用,...

    高性能mysql PDF 中英文合集

    《高性能MySQL》是数据库管理员、开发人员和系统架构师必备的一本经典著作,特别是对于处理大规模数据和高并发场景的企业来说,这本书提供了丰富的知识和实践经验。该书的第三版不仅涵盖了MySQL的基础操作,还深入...

    高性能mysql第三版word+pdf版电子文件

    《高性能MySQL》是数据库管理员、开发人员和系统架构师必备的一本经典著作,它深入探讨了MySQL的各个方面,包括性能优化、高可用性、备份、恢复、复制和安全性等。这本书的第三版更是包含了最新的MySQL技术和最佳...

    高性能mysql第三版.pdf

    高性能Mysql Mysql书籍 索引 SQL优化 高可用 系统架构

    《高性能MySQL》(第3版)高清中文带目录版.pdf

    全书共分为16 章和6 个附录,内容涵盖MySQL 架构和历史,基准测试和性能剖析,数据库软硬件性能优化,复制、备份和恢复,高可用与高可扩展性,以及云端的MySQL 和MySQL相关工具等方面的内容。 改资料对高级和中级...

    高性能MySQL_第3版_超清中文带目录版[PDF]

    高性能MySQL_第3版_超清中文带目录版[PDF] 序 I 前言 III 第1章:MySQL架构 1 第2章:寻找瓶颈:基准测试(Benchmarking)与性能分析(Profiling) 32 ...第14章:用于高性能MySQL的工具 583 附录 索引 659

    [[高性能MySQL(第3版)].Baron.Scbwartz等.扫描版[电子书.pdf

    扫描版[电子书.pdf,主要内容包括:第一章mysql架构与历史;第二章mysql基准与测试;第三章服务器性能剖析;第四章schema与数据类型优化;第五章创建高性能索引;第六章查询性能优化;第七章mysql高级特性;第八章...

    高性能MySQL(第3版).part2

    第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 第三版读书笔记 一至六】主要涵盖了MySQL服务器优化、操作系统和硬件优化、复制技术、可扩展性方案、MySQL分支与变种以及高可用性策略等多个方面。以下是对这些知识点的详细说明: 1. **优化服务器...

    高性能MySQL(第3版).Baron.Scbwartz_1

    第1章 mysql 架构与历史 1 第2章 mysql 基准测试 35 第3章 服务器性能剖析 67 第4章 schema 与数据类型优化 111 第5章 创建高性能的索引 141 第6章 查询性能优化 195 第7章 mysql 高级特性 259 第8章 优化服务器设置...

    高性能mysql 第三版 高清 pdf

    全书共分为16 章和6 个附录,内容涵盖MySQL 架构和历史,基准测试和性能剖析,数据库软硬件性能优化,复制、备份和恢复,高可用与高可扩展性,以及云端的MySQL 和MySQL相关工具等方面的内容。每一章都是相对独立的...

    高性能MYSQL第三版 KINDLE NODRM

    高性能MYSQL第三版 高性能MYSQL第三版 高性能MYSQL第三版 高性能MYSQL第三版 KINDLE版,

    《高性能MySQL(第3版)》书中示例代码

    《高性能MySQL(第3版)》是一本深受数据库管理员、开发者和系统架构师喜爱的经典书籍,专注于MySQL的性能优化和高效使用。这本书深入探讨了如何在实际应用中最大化利用MySQL的潜能,涵盖了许多关键主题,包括查询...

    高性能mysql源码.rar

    MySQL是一款广泛使用的开源关系型数据库管理系统,以其高效性能、稳定性及易用性著称。"高性能MySQL源码"指的是MySQL...因此,对"高性能MySQL源码"的探索对于数据库管理员、开发者和系统架构师来说都具有很高的价值。

Global site tag (gtag.js) - Google Analytics