mysql数据库编程实例_mysql数据库实例

一个普通的程序运行过程:

b5c3c050c4775471c2dd102bf275349a.png

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

MySQL数据库实例运行过程:

mysql服务器构成:

1、程序加载到内存,申请空间运行起来

2、把数据加载到内存,程序处理文件,处理完数据后把数据存到硬盘

3、内存释放,程序回收垃圾

画图来说明:

9ccb37d64b3ead524f71ee03a5fb3ba9.png

1、MySQLd守护进程的程序块先加载到内存,然后申请空间运行起来,

2、把ibd数据文件加载到内存:存放数据库和表

3、mysqld处理ibd数据

4、idb数据文件写入到磁盘,持久化

5、程序不会退出,因为程序会频繁的使用数据库,所以这里不会像office用了就关闭,

避免重复去申请内存空间,这里直接使用守护进程,一直在内存中,用就调用,不用就休息等待程序来调用

适合程序频繁调用的模式

6、实例:

mysqld 主进程不会直接参与数据的处理,会起master thread

MySQL进程线程结构

mysqld(boss)------>master thread(Manager) ---->"worker" thread

(read thread write thread)

“办公区“(提前预定好的长期的)------>预分配内存结构

MySQL启动过程:

1、启动后台守护进程,并生成工作线程

2、预分配内存结构供mysql处理数据使用

mysqld+一堆thread +预分配的内存结构=实例

mysqld服务程序构成:

3a5681e1c80674892c93ae549697546d.png

mysqld的体系结构

一条SQL语句的执行过程? select user,host ,password from mysql.user;

连接层:【与用户打交道】

1、客户端发起数据库连接。

mysql

2、连接请求到达连接层,验证用户、密码合法性。

select user,host ,password from mysql.user;

3、连接层接受用户SQL,分配一个专门用作交互的线程(connect thread);

show [full] processlist;

**

f0933bf222bff4eaa3aa45cd4b469bfb.png

连接层无法处理数据,必须交给sql层

SQL层的功能

4、连接层线程会将SQL传送SQL层继续处理

5、SQL层接受到SQL语句,语法解释器验证语法

785fc29d7139316be8751df6b47692c4.png

6、语义验证器,检测语句类型(DDL、DML、DCL、DQL),根据不同的类型交于不同对应解析器继续处理

7、解析器接受到SQL,进行解析,解析出执行计划

8、优化器会基于成本的算法,找到成本最低的执行计划【索引优化,sql优化】

9、执行器基于最优语句的执行计划进行执行,得到获取数据的方法,

会将方法TP给下一层继续处理【扇区、磁道】

10、每条sql的解析都这么复杂,所以提供查询缓存,将上一条语句的结果【语句的sqlid】。

11、记录日志(默认没有开启)

存储引擎层:

12、按照SQL提供的获取数据的方法,去对应磁盘位置获取数据即可。

13、将二进制或十六进制的数据结构化成表的形式,由连接线程返回给用户

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值