mysql数据库实例

一个普通的程序运行过程:
mysql数据库实例mysql

五、在处理完数据,按ctl+s保存后,关闭窗口,内存的数据会进行释放,好的程序会有一些数据的回收策略,不会永久驻在内存算法

MySQL数据库实例运行过程:sql

mysql服务器构成:
一、程序加载到内存,申请空间运行起来
二、把数据加载到内存,程序处理文件,处理完数据后把数据存到硬盘
三、内存释放,程序回收垃圾数据库

画图来讲明:
mysql数据库实例
一、MySQLd守护进程的程序块先加载到内存,而后申请空间运行起来,
二、把ibd数据文件加载到内存:存放数据库和表
三、mysqld处理ibd数据
四、idb数据文件写入到磁盘,持久化缓存

五、程序不会退出,由于程序会频繁的使用数据库,因此这里不会像office用了就关闭,
避免重复去申请内存空间,这里直接使用守护进程,一直在内存中,用就调用,不用就休息等待程序来调用
适合程序频繁调用的模式服务器

六、实例:
mysqld 主进程不会直接参与数据的处理,会起master thread 数据结构

MySQL进程线程结构ide

mysqld(boss)------>master thread(Manager) ---->"worker" thread
(read thread write thread)
“办公区“(提早预约好的长期的)------>预分配内存结构优化


MySQL启动过程:

一、启动后台守护进程,并生成工做线程
二、预分配内存结构供mysql处理数据使用
mysqld+一堆thread +预分配的内存结构=实例线程

mysqld服务程序构成:
mysql数据库实例

mysqld的体系结构

一条SQL语句的执行过程? select user,host ,password from mysql.user;
链接层:【与用户打交道】
一、客户端发起数据库链接。
mysql
二、链接请求到达链接层,验证用户、密码合法性。
select user,host ,password from mysql.user;
三、链接层接受用户SQL,分配一个专门用做交互的线程(connect thread);
show [full] processlist;

**
mysql数据库实例

链接层没法处理数据,必须交给sql层

SQL层的功能

四、链接层线程会将SQL传送SQL层继续处理
五、SQL层接受到SQL语句,语法解释器验证语法
mysql数据库实例

六、语义验证器,检测语句类型(DDL、DML、DCL、DQL),根据不一样的类型交于不一样对应解析器继续处理
七、解析器接受到SQL,进行解析,解析出执行计划
八、优化器会基于成本的算法,找到成本最低的执行计划【索引优化,sql优化】
九、执行器基于最优语句的执行计划进行执行,获得获取数据的方法,
会将方法TP给下一层继续处理【扇区、磁道】
十、每条sql的解析都这么复杂,因此提供查询缓存,将上一条语句的结果【语句的sqlid】。
十一、记录日志(默认没有开启)

存储引擎层:十二、按照SQL提供的获取数据的方法,去对应磁盘位置获取数据便可。1三、将二进制或十六进制的数据结构化成表的形式,由链接线程返回给用户

相关文章
相关标签/搜索