MySQL运行机制

MySQL运行机制

开局一张图 内容全靠编

本文主要说一下,应用程序在与数据库交互时,数据库的大概执行流程。整体上了解一下一条SQL的流转。

  1. 建立连接

应用程序与MySQL各自使用线程池,来维护之间的连接。每个连接都是一个线程,从而实现并发访问MySQL。

  1. 客户端发送 SQL
  2. 查询缓存,查询语句与缓存中的完全一致(包括参数且不能存在不确定参数比如 now()),则将查询到的结果返回。
  3. SQL 解析器,解析 SQL 判断 SQL 是否合法。
  4. 查询优化器,根据解析器结果生成最佳的执行计划。
  5. 选择合适的存储引擎进行操作数据(图中是 InnoDB 存储引擎)
    InnoDB执行流程
    1. 将需要操作的数据从磁盘文件中查询出来,放入缓冲池(Buffer Pool)。如果缓冲池中已经存在则不需要查询磁盘。(查询SQL此时会返回结果)

    2. 将 旧数据 写入 undo log。(undo log 用于事务回滚)

    3. 更新缓冲池中的数据。

    4. 写入 Redo Log Buffer。(redo log 主要用于 MySQL 突然宕机的数据恢复)(此时写入的日志存储于内存中)

    5. redo log 写入磁盘的时机。

      innodb_flush_log_at_trx_commit mysql 的这个配置来控制写入 redo log 的时机 默认 为 1
      0时 事务提交时,不写入redo 磁盘文件,而是由 InnoDB存储引擎线程来定时写入磁盘. 性能最好,但是宕机会丢失数据
      1时 事务提交时,写入 redo 磁盘文件。安全性最高,不会丢失数据,相对性能差。
      2 事务提交时,不写入redo 磁盘文件,而是写入 os cache。然后再从os cache 写入 磁盘文件。性能比1好,但是比0差,如果机器宕机则会丢失数据。

    6. 写入 binlog 日志. (用于数据库恢复和主从复制)

      sync_binlog控制binlog写入磁盘策略 默认=0
      =0时先写入 OS cache 然后写入磁盘
      =1直接写入磁盘

    7. redo log 与 bin log 全部写入成功后提交事务完成

以上就是大概 SQL 的运行流程。主要描述的是 InnoDB 存储引擎。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. 运行机制图解 2. 运行过程 2.1 建立连接(Connectors & Connection Pool) ...
    雪砺青松灬阅读 1,033评论 0 0
  • 本文来自于拜读《高性能MySQL(第三版)》时的读书笔记作者:安明哲转载时请注明部分内容来自《高性能MySQL(第...
    代号027阅读 10,830评论 0 21
  • 要理解MySQL的运行机制,先要看一下MySQL的语句是一个基本的执行过程,我们在客户端写的SQL先查缓存,缓存命...
    david161阅读 3,544评论 0 0
  • SQL-运行机制.png 查询缓存: 解析器: 预处理器: 语义解析 生成新的解析树 查询优化器: 因为一条SQL...
    程序员阿奇阅读 2,325评论 0 0
  • MySQL 里经常说到的 WAL技术,也就是先写日志,再写磁盘。 当内存数据页跟磁盘数据页内容不一致的时候,我们成...
    如梦又似幻阅读 16,989评论 3 6