那个网站可以做视频app制作,代网站备案费用吗,南京网站设计培训价格,麻油厂网站怎么做1、基础架构#xff1a;一条SQL查询语句是如何执行的#xff1f; 1.1 连接器 连接器负责跟客户端建立连接、获取权限、维持和管理连接。
mysql -h$ip -P$port -u$user -p输完命令之后#xff0c;输入密码。
1.2 查询缓存 MySQL 拿到一个查询请求后#xff0c;会先到查询缓…1、基础架构一条SQL查询语句是如何执行的 1.1 连接器 连接器负责跟客户端建立连接、获取权限、维持和管理连接。
mysql -h$ip -P$port -u$user -p输完命令之后输入密码。
1.2 查询缓存 MySQL 拿到一个查询请求后会先到查询缓存看看之前是不是执行过这条语句。之前执行过的语句及其结果可能会以 key-value 对的形式被直接缓存在内存中。key 是查询的语句value 是查询的结果。
1.3 分析器 分析器先会做“词法分析”。你输入的是由多个字符串和空格组成的一条 SQL 语句MySQL 需要识别出里面的字符串分别是什么代表什么。 MySQL 从你输入的”select”这个关键字识别出来这是一个查询语句。它也要把字符串“T”识别成“表名 T”把字符串“ID”识别成“列 ID”。 做完了这些识别以后就要做“语法分析”。根据词法分析的结果语法分析器会根据语法规则判断你输入的这个 SQL 语句是否满足 MySQL 语法。
1.4 执行器 执行语句。 2、日志系统一条SQL更新语句是如何执行的
2.1 redo long 重做日志
在一个办公室里有一个写字板白板和一个记事本正式账本用于记录每一天的待办事项和完成情况。具体过程如下
场景 记录新任务 当有新的任务需要记录时秘书会先写在白板上同时在内存中留有一份副本以便随时查询当前的任务进度。这样秘书可以迅速记录下来不影响办公效率。 任务完成更新 当某个任务完成时秘书会在白板上修改状态并在内存中同步更新这个任务的状态。如果当前有新的任务需要记录同样在白板上添加记录。 账户最终核算 到了当天工作结束或者系统闲暇时秘书会把白板上的记录同步更新到记事本上正式账本。这样即使第二天忘记了新任务和完成状态也可以通过查看记事本获取前一天的全部信息。
图示
白板记录和账本更新的过程
白板临时记录 记事本最终记录初始状态 初始状态
白板为空 记事本为空记录新任务 未同步
TASK 1: Pending 记事本为空更新任务状态 未同步
TASK 1: Completed 记事本为空记录新任务 未同步
TASK 2: Pending 记事本为空同步白板到记事本
白板状态
TASK 1: Completed
TASK 2: Pending 记事本状态TASK 1: CompletedTASK 2: Pending白板和账本协作保证数据安全
任务来了并记录在白板上 - 办公室突然断电重启 - 恢复后秘书通过白板和账本找到任务数据并继续工作实现细节 白板相当于 InnoDB 中的 redo log而记事本相当于是数据库的数据文件。通过这样的设计即便系统突然崩溃重启后依然可以通过 redo log 恢复到最新的状态。
关键点
Write-Ahead Logging (WAL)所有的更新操作先写到 redo log然后才写到数据文件。Crash-Safe 能力即使数据库发生了异常重启只要 redo log 中有记录已经提交的事务也不会丢失。 2.2 binlog 前面我们讲过MySQL 整体来看其实就有两块一块是 Server 层它主要做的是 MySQL 功能层面的事情还有一块是引擎层负责存储相关的具体事宜。上面我们聊到的粉板 redo log 是 InnoDB 引擎特有的日志而 Server 层也有自己的日志称为 binlog归档日志。 为什么会有两份日志因为MySQL 自带的引擎 MyISAM不能 crash-safe 。binlog 日志只能用于归档。 而 InnoDB 是另一个公司以插件形式引入 MySQL 的既然只依靠 binlog 是没有 crash-safe 能力的所以 InnoDB 使用另外一套日志系统——也就是 redo log 来实现 crash-safe 能力。
未完待续。。。。。