Mysql知识点1:架构

原文引用

MySQL架构你了解多少?

Mysql架构组成

整体架构:
在这里插入图片描述

连接层

客户端连接线程管理

每个请求都对应一个执行线程,该线程处理连接的身份验证和具体请求。执行线程使用线程池技术进行缓存,当一个请求需要处理时,先从线程池中查找是否有可用的线程,如果没有则新创建一个,当连接结束时,如果线程池没有满,则把当前线程放入线程池,主要的作用是提高线程的复用,减少创建线程造成的系统开销从而提高效率。

  • thread_cache_size (系统变量):线程池缓存的大小,服务器在启动时会自动调整大小,值为0时禁用缓存,此时为每个新连接创建执行一个线程,并在连接断开时释放;
  • thread_stack:调整线程堆栈大小,有些复杂的SQL语句在执行过程中可能会有深层递归从而消耗更多的内存。

线程需要管理:数据库查询、存储过程、事务处理等操作:查询涉及很多函数调用和数据处理,每个函数都会在堆栈中占用一些空间。如果线程堆栈的大小不够,就会导致程序崩溃或者错误。

问题1: 线程需要管理数据库查询!查询时候这个线程堆栈里面存储了什么?肯定不是数据结果集吧!根本放不下啊!
解答1: 查询时线程堆栈里存储的内容:

  1. 函数调用链
  2. 局部变量
  3. 返回地址
  4. 函数参数

问题2: 那么,结果集存储在哪里?
解答1: 存储在 MySQL 的内存池或临时文件中,取决于结果集的大小和配置。

  • 小的结果集:可能直接存储在内存中(通常是缓冲区)。
  • 大的结果集:如果结果集非常大,MySQL 可能会将其写入磁盘的临时文件,以节省内存。

连接器管理

  • max_connections(系统变量):可以控制服务器允许同时连接的最大客户端数,当服务器达到max_connections 指定的连接数时会拒绝所有新的连接请求,同时会增加状态变量Connection_errors_max_connections 的值;
    1. 实际上允许 max_connections+1个客户端连接。额外的连接为拥有CONNECTION_ADMIN 权限的帐户(管理员)使用,即使普通连接达到了 max_connections 的数量,管理员也可以连接到服务器进行管理操作;
    2. 在部署为主从复制的环境中,从节点的连接数也会计入 max_connections 中,如果连接达到上限主从复制将会失败;

服务层

核心:Parser(语法分析器)

语法分析器的主要作用是将客户端发来的SQL语句中的关键字和自定义字段进行提取、解析,最终将 SOL语句转换为一棵解析树:

  • 词法分析:主要是对关键字进行提取,比如 select/update/delete/create…
  • 语法分析:主要判断 SQL 语句是否满足语法规则,如果语法错误则异出异常,也就是我们常见的ERROR 1064(42000):You have anerror in your SOL syntax。
    淡绿色:词法分析---其他:语法分析

核心:Optimizer(查询优化器)

通过语法校验的SQL语句将进入查询优化器处理阶段,查询优化器会将解析树转化为查询计划,一般情况下,一条查询可以有很多种执行方案,查询优化器会根据执行计划匹配合适的索引,选择最佳的执行方案,最终把确定要执行的SOL交给执行器调用存储引擎API。

核心: SQL语句的执行流程

在这里插入图片描述
在这里插入图片描述

存储引擎

InnoDB

特点:

  1. 事务支持:InnoDB 支持 ACID(原子性、一致性、隔离性、持久性)事务,这使得它非常适合需要事务处理的应用场景。
  2. 外键支持:InnoDB 支持外键约束,可以确保数据的完整性和一致性。
  3. 行级锁定:InnoDB 采用行级锁定(Row-level Locking),可以更好地处理并发,适合高并发写入的场景
  4. 崩溃恢复:InnoDB 具有自动崩溃恢复功能,通过重做日志(redo log)在系统崩溃后恢复数据。
  5. 表空间管理:InnoDB 会将数据和索引存储在表空间中,可以是共享表空间,也可以是单独的表空间文件。

应用场景:

  • 需要事务处理的系统:如金融系统、电商平台等,要求数据一致性和安全性,适合使用 InnoDB。
  • 高并发写入的系统:如社交网络、在线游戏等,需要频繁读写操作的应用,InnoDB 的行级锁定能减少锁冲突。
  • 有外键约束的应用:如复杂的关系型数据库系统,需要确保数据之间的关联性和完整性。

MyISAM

特点:

  1. 无事务支持:MyISAM 不支持事务和外键约束,因此数据一致性和完整性依赖于应用程序的实现。
  2. 表级锁定:MyISAM 采用表级锁定(Table-level Locking),在写操作时会锁定整个表(串行操作-读写互斥),因此在高并发写入时可能会出现性能瓶颈。
  3. 存储效率高:MyISAM 的存储结构比较简单,通常在读取密集型操作中表现良好,数据存储和索引占用的空间较小(以读,检索数据为主)。
  4. 全文索引支持:MyISAM 提供了对全文索引的支持,这在文本搜索方面有优势。
  5. 崩溃恢复较弱:MyISAM 没有像 InnoDB 那样的自动崩溃恢复功能,崩溃后可能需要手动修复表。

应用场景:

  • 读多写少的应用:如内容管理系统(CMS),数据主要以读为主,MyISAM 的表级锁定不会对性能造成太大影响。
  • 全文检索的应用:如博客系统、文档管理系统等,需要快速进行全文搜索,MyISAM 提供了高效的全文索引。
  • 存储需求低的应用:MyISAM 的存储效率高,可以在不需要事务支持的小型应用或数据量较少的场景下使用。

文件系统

  1. 数据目录:

    datadir参数来指定数据目录的位置

  2. 配置文件(my.cnf 或 my.ini)
    • Unix/Linux系统:通常是/etc/my.cnf或/etc/mysql/my.cnf
    • Windows系统:通常是C:\ProgramData\MySQL\MySQL Server x.x\my.ini
  3. 日志文件
    • 错误日志(Error Log)
    • 查询日志(General Query Log):记录所有执行的SQL语句,默认未开启。可以通过general_log和general_log_file参数开启并指定文件名。
    • 慢查询日志(Slow Query Log):记录执行时间超过指定阈值的SQL语句,用于优化查询性能。可以通过slow_query_log和slow_query_log_file参数开启并指定文件名。
    • 二进制日志(Binary Log):记录所有更改数据的SQL语句,用于数据恢复和主从复制。默认文件名是hostname-bin。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值