mysql逻辑结构和物理结构分析
1.⾸先,通过⼀张图来看mysql的整体逻辑架构图:
using namespace std是干嘛的下⾯对图中⼏个部分进⾏说明:
连接/线程处理:处理⽤户的连接请求、管理连接池,⽤户名密码验证,权限校验等。(要操作数据库,⾸先肯定需要建⽴与数据库的连接)查询缓存:mysql会将sql和对应返回值缓存起来,⼀个新的查询请求到来,⾸先会去缓存⾥⾯获取,有就直接返回了。(当有增删改时会删除缓存)
解析器:对sql语句进⾏词法解析(将mysql关键字和列、条件等区分开)和语法解析(验证sql语法是否符合SQL92标准)
优化器:优化sql语句,⽣成执⾏计划(是否⽤索引,⽤什么索引,where条件的执⾏顺序等)
其实下⾯还有个执⾏器:通过上步的⽣成执⾏计划,调⽤存储引擎。
mysql语句的执行顺序存储引擎:具体的和磁盘打交道,进⾏数据的增删改查。
2.下⾯我们来看物理结构:
mysql的物理结构主要分为:⽇志⽂件,和数据⽂件。
linux系统,mysql的默认配置⽂件⽬录是:/etc/myf分销系统开发哪家好
打开配置⽂件,⾥⾯有个配置:datadir=/var/lib/mysql ,表⽰mysql数据存放⽬录。
来看我的mysql⽬录(/var/lib/mysql)有哪些⽂件:
在了解⽇志⽂件前我们先来了解⼀下顺序IO和随机IO的区别:
顺序IO:物理上是⼀块连续的存储空间,在进⾏顺序追加内容时,效率⾮常⾼。(mysql的⽇志⽂件就是顺序IO)
随机IO :从逻辑上看是连续的,物理上不是连续的,在对内容进⾏操作时,每次都需要到⽂件在磁盘的位置(寻道时间消耗),mysql 的数据⽂件就是随机IO.
为什么⽇志⽂件⽤顺序IO,⽽数据⽂件⽤随机IO呢?
因为⽇志⽂件插⼊后就不会去修改删除了(除⾮整个⽂件删除),并且⽇志⽂件的效率直接决定mysql的处理效率;⽽数据⽂件本⾝就可能经常修改,删除,所以即使开始分配的是连续的存储地址,在经过多次操作后也会变成随机IO.
2.1⽇志⽂件类型
(可⽤通过命令**show variables like ‘log_%’**看你的那些⽇志是开启了的):
因为我数据库是默认配置,好多⽇志没开,所以这没有。
错误⽇志(err log):记录了运⾏过程中遇到的所有严重的错误信息,以及 MySQL每次启动和关闭的详细信息。
⼆进制⽇志(bin log):记录了数据库所有的ddl语句和dml语句,但不包括select语句内容.该⽇志还⽤于mysql主从复制和数据恢复(默认是关闭的,需要通过配置:log-bin=mysql-bin进⾏开启,mysql-bin的意思是bin⽇志⽂件的前缀)。
xquery fn函数通⽤查询⽇志(general query log):记录⽤户的所有操作,其中还包含增删查改等信息(除了调试,建议不要开启查询⽇志。)
洛阳网最新消息慢查询⽇志(slow query log):记录执⾏时间超过long_query_time秒的所有查询,便于收集查询时间⽐较长的SQL语句(默认是关闭的。需要通过设置:slow_query_log=ON进⾏开启)
事务⽇志(redo /undo log):事务⽇志(InnoDB特有的⽇志),⼊上图⽂件名为"ib_logfile0"和“ib_logfile1”。
中继⽇志(relay log):是在主从复制环境中产⽣的⽇志。主要作⽤是为了从机可以从中继⽇志中获取到主机同步过来的SQL语句,然后执⾏到从机中。
2.2 数据⽂件类型
可通过命令SHOW VARIABLES LIKE ‘%datadir%’;查看数据⽂件,结合上图看
innoDB存储引擎:
.frm :主要存放与表相关的数据信息,主要包括表结构的定义信息
.ibd:使⽤独享表空间存储表数据和索引信息,⼀张表对应⼀个ibd⽂件。
ibdata:使⽤共享表空间存储表数据和索引信息,所有表共同使⽤⼀个或者多个ibdata⽂件。
下⾯对上图进⾏说明:
1.ibdata1是共享⽂件,所有表都使⽤这个⽂件
2."ib_logfile0"和“ib_logfile1”是事务⽇志⽂件
3.vhr是个数据库⽂件夹,
看看vhr内容:
⾥⾯每个表都有⼀个.frm⽂件存表定义信息
每个表都有.ibd⽂件,存数据和索引信息。(也就是说innodb表数据和索引存在同⼀个⽂件)
3.下⾯看看innoDB和MyIsam区别:
Innodb Myisam
canvas2html存储⽂件 .frm 表定义⽂件 .ibd 数据⽂件和索引⽂件 .frm 表定义⽂件 .myd 数据⽂件 .myi 索引⽂件
锁表锁,⾏锁表锁
事务 ACID 不⽀持
CRDU 读、写读多
count 扫表专门有存储的地⽅
索引结构 B+ Tree B+ Tree
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论