图文详解mysql架构原理
本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于架构原理的相关内容,MySQL Server架构自顶向下大致可以分网络连接层、服务层、存储引擎层和系统文件层,下面一起来看一下,希望对大家有帮助。 千万级数据并发如何处理? 推荐学习:mysql视频教程 Mysql 架构原理1、Mysql体系架构 MySQL Server架构自顶向下大致可以分网络连接层、服务层、存储引擎层和系统文件层。 网络连接层服务层(MySQL Server) 服务层是MySQL Server的核心,主要包含系统管理和控制工具、连接池、SQL接口、解析器、查询优化器和缓存六个部分。 存储引擎层(Pluggable Storage Engines)系统文件层(File System) 该层负责将数据库的数据和日志存储在文件系统之上,并完成与存储引擎的交互,是文件的物理存储层。主要包含日志文件,数据文件,配置文件,pid 文件,socket 文件等。 通用查询日志(General query log)二进制日志(binary log)慢查询日志(Slow query log)配置文件数据文件pid 文件socket 文件2、MySQL运行机制 建立连接(Connectors&Connection Pool),通过客户端/服务器通信协议与MySQL建立连接。MySQL 客户端与服务端的通信方式是 “ 半双工 ”。对于每一个 MySQL 的连接,时刻都有一个线程状态来标识这个连接正在做什么。线程状态:show processlist; //查看用户正在运行的线程信息,root用户能查看所有线程,其他用户只能看自己的;Time:表示该线程处于当前状态的时间,单位是秒State:线程状态Info:一般记录线程执行的语句,默认显示前100个字符。想查看完整的使用show full processlist;查询缓存(Cache&Buffer),这是MySQL的一个可优化查询的地方,如果开启了查询缓存且在查询缓存过程中查询到完全相同的SQL语句,则将查询结果直接返回给客户端;如果没有开启查询缓存或者没有查询到完全相同的 SQL 语句则会由解析器进行语法语义解析,并生成“解析树”。show variables like ‘%query_cache%’; //查看查询缓存是否启用,空间大小,限制等show status like ‘Qcache%’; //查看更详细的缓存参数,可用缓存空间,缓存块,缓存多少等解析器(Parser)将客户端发送的SQL进行语法解析mysql原理,生成"解析树"。预处理器根据一些MySQL规则进一步检查“解析树”是否合法,例如这里将检查数据表和数据列是否存在,还会解析名字和别名,看看它们是否有歧义,最后生成新的“解析树”。查询优化器(Optimizer)根据“解析树”生成最优的执行计划。MySQL使用很多优化策略生成最优的执行计划,可以分为两类:静态优化(编译时优化)、动态优化(运行时优化)。优化count、min、max等函数提前终止查询in的优化查询执行引擎负责执行 SQL 语句,此时查询执行引擎会根据 SQL 语句中表的存储引擎类型,以及对应的API接口与底层存储引擎缓存或者物理文件的交互,得到查询结果并返回给客户端。若开启用查询缓存,这时会将SQL 语句和结果完整地保存到查询缓存(Cache&Buffffer)中,以后若有相同的 SQL 语句执行则直接返回结果。3、Mysql存储引擎 存储引擎在MySQL的体系架构中位于第三层,负责MySQL中的数据的存储和提取,是与文件打交道的子系统,它是根据MySQL提供的文件访问层抽象接口定制的一种文件访问机制,这种机制就叫作存储引擎。 使用show engines命令,就可以查看当前数据库支持的引擎信息。 在5.5版本之前默认采用MyISAM存储引擎,从5.5开始采用InnoDB存储引擎。 InnoDB和MyISAM对比锁机制索引结构并发处理能力存储文件适用场景InnoDB总结InnoDB存储结构 从MySQL 5.5版本开始默认使用InnoDB作为引擎,它擅长处理事务,具有自动崩溃恢复的特性。下面是官方的InnoDB引擎架构图,主要分为内存结构和磁盘结构两大部分。 InnoDB内存结构 内存结构主要包括Buffer Pool、Change Buffer、Adaptive Hash Index和Log Buffer四大组件。 改进型LRU算法维护Buffer Pool配置参数Change Buffer:写缓冲区,简称CB。在进行DML操作时,如果BP没有其相应的Page数据,并不会立刻将磁盘页加载到缓冲池,而是在CB记录缓冲变更,等未来数据被读取时,再将数据合并恢复到BP中。Adaptive Hash Index:自适应哈希索引,用于优化对BP数据的查询。InnoDB存储引擎会监控对表索引的查找,如果观察到建立哈希索引可以带来速度的提升,则建立哈希索引,所以称之为自适应。InnoDB存储引擎会自动根据访问的频率和模式来为某些页建立哈希索引。Log Buffer:日志缓冲区,用来保存要写入磁盘上log文件(Redo/Undo)的数据,日志缓冲区的内容定期刷新到磁盘log文件中。日志缓冲区满时会自动将其刷新到磁盘,当遇到BLOB或多行更新的大事务操作时,增加日志缓冲区可以节省磁盘I/O。InnoDB磁盘结构 InnoDB磁盘主要包含Tablespaces,InnoDB Data Dictionary,Doublewrite Buffer、Redo Log和Undo Logs。 独立表空间(File-Per-Table Tablespaces) 通用表空间(General Tablespaces) 撤销表空间(Undo Tablespaces) 临时表空间(Temporary Tablespaces) 数据字典(InnoDB Data Dictionary) 双写缓冲区(Doublewrite Buffer) 重做日志(Redo Log) 撤销日志(Undo Logs) 新版本结构演变 MySQL 8.0 版本InnoDB线程模型 Purge ThreadPage Cleaner ThreadMaster Thread每10秒的操作:InnoDB数据文件InnoDB文件存储结构 Page是文件最基本的单位,无论何种类型的page,都是由page header,page trailer和page body组成。如下图所示 File文件格式(File-Format) 通过innodb_file_format 配置参数可以设置InnoDB文件格式,之前默认值为Antelope,5.7版本开始改为Barracuda。 Row行格式(Row_format) COMPACT 行格式DYNAMIC 行格式COMPRESSED 行格式 在创建表和索引时,文件格式都被用于每个InnoDB表数据文件(其名称与*.ibd匹配)。修改文件格式的方法是重新创建表及其索引,最简单方法是对要修改的每个表使用以下命令: Undo LogUndo Log介绍Undo Log作用 实现多版本并发控制(MVCC) Redo Log 日志 Redo Log工作原理 Redo Log相关配置参数 Redo Buffer 持久化到 Redo Log 的策略,可通过 Innodb_flush_log_at_trx_commit 设置: Binlog日志Binlog文件名默认为“主机名_binlog-序列号”格式,例如oak_binlog-000001,也可以在配置文件中指定名称。文件记录模式有STATEMENT、ROW和MIXED三种,具体含义如下。STATMENT(statement-based replication, SBR):每一条被修改数据的SQL都会记录到master的Binlog中,slave在复制的时候SQL进程会解析成和原来master端执行过的相同的SQL再次执行。简称SQL语句复制。MIXED(mixed-based replication, MBR):以上两种模式的混合使用,一般会使用STATEMENT模式保存binlog,对于STATEMENT模式无法复制的操作使用ROW模式保存binlog,MySQL会根据执行的SQL语句选择写入模式。 Binlog 文件结构 Binlog文件操作 Binlog文件操作 开启Binlog功能 使用show binlog events命令 使用 mysqlbinlog 命令 使用 binlog 恢复数据 删除Binlog文件 Redo Log和 Binlog区别 推荐学习:mysql视频教程 以上就是图文详解mysql架构原理的详细内容,更多请关注php中文网其它相关文章! 声明:本文转载于:CSDN,如有侵犯,请联系admin@php.cn删除 (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |