MySQL基本组成

SQL执行流程

  • Server 层主要包括连接器、查询缓存、分析器、优化器、执行器,包含了MySQL主要的很多核心功能,以及所有的内置函数、存储过程、触发器、视图等,其实就是所有跨存储引擎的功能都是在这一层实现的
  • 存储引擎层,主要负责数据的存储和读取,是以插件的形式存在的 ,支持如 InnoDBMyISAMMemory 等多个存储引擎,现在默认为 InnoDB

查询缓存

  • 当一个SQL执行时首先会进入查询缓存

  • 查看之前是否执行过该语句,如果执行过则会以key-value的形式保存在缓存中,key是查询语句,value是查询结果

  • 如果缓存命中则直接返回结果,如果查询语句不在缓存中继续后面的流程

  • 大多数情况下我们不推荐使用查询缓存,因为缓存失效非常频繁,只要一个更新,那么这个表上所有的缓存都会失效,吐过数据的更新比较多,那么缓冲命中的效率很低,不断的在失效

  • 在MySQL中提供了参数 query_cache_type 参数来设置,默认是 DEMAND ,表示对默认的SQL都不使用查询缓存,如果要对特的语句进行缓存查询,则可以使用 SQL_CACHE 来显示的指定,如 select SQL_CACHE * from T where ID=1;

  • 在MySQL8.0 开始,查询缓存整个功能模块已经删除掉不再拥有

分析器

  • 分析器主要包含词法分析语法分析
  • 词法分析主要分析一条SQL中各个字符串代表什么,比如 select 标记出来,这就是一个查询,在具体的表名,查询 的字段等等全部分析出来
  • 语法分析主要是分析SQL语句是否符合MySQL的规范,如果我们SQL写的有问题,那么经常看到的一个异常就是 You have an error in your SQL syntax 的提示

优化器

  • 对我们的SQL进行优化,得到更高的执行计划
  • 如有多个索引时确定要用那个索引
  • 当有多变联查join 时,查询表的顺序
  • 对查询条件和语句的优化

执行器

  • 首先校验是否有对这张表的访问权限,如果没有权限则会报错
  • 如果有,则根据引擎接口打开表进行数据的查询筛选

Buffer Pool

  • 默认大小128MB, 偏小
  • 对于16核32G机器,可以分配2G内存,配置文件:my.ini 配置:

[server]

innodb_buffer_pool_size = 2147483648

数据页

  • MySQL中对数据进行抽象,按照数据页的形式来存放到文件,当查询时,首先定位到要查询数据所在的数据页,之后将整个数据页加载到Buffer Pool 中,
  • 数据页默认的大小是 16KB , 也就是一页数据包含16KB的数据
  • BufferPool 中的数据页一般我们叫缓存页,默认情况下缓存页与磁盘上的数据页大小是对应的
  • 对于每个缓存页都有一个描述信息
  • 描述信息包括:数据页的所属表空间,数据页的标号,这个缓存页在Buffer Pool 中的内存地址以及其他一些信息
  • Buffer Pool 中,所有的描述信息都在最前面,然后各个缓存页放在后面

  • 描述数据大小相当于缓存页大小的5% 左右,也就是大概800字节,所以当我们设置buffer pool 的大小为128MB ,但是实际上 Buffer Pool 的真实大小会超出一些,可能有有130MB 左右,这多出来的就是每个缓存页的描述信息

表空间

  • 平时我们创建张表时都会在磁盘上对应着一个表名.ibd , 这样的磁盘数据文件,这就是表空间的概念和物理体现
  • 对于一些系统表空间可能存在着对应多个磁盘文件,我们自己创建的表对应的表空间一般都是对应一个 表名.ibd 的数据文件

数据区

  • 在表空间中有太多的数据页不好管理,这是引入了数据区的概念,英文:extent

  • 一个数据区中有连续的64个数据页,每个数据页16kb, 所以每个数据区大小是1MB

  • 同时265个数据区被划分为一组

  • 在表空间中第一组数据区的第一个数据区前三个数据页是固定的,存放一些特殊的描述性的信息

    • FSP_HDR 数据页: 存放一些表空间和这一组数据区的属性
    • IBUF——BITMAP 数据页:存放这组数据页所有的 insert buffer 的一些信息
    • INODE 数据页:存放一些特殊信息
  • 表空间中其他各组数据区的第一个数据区的头两个数据页都是存放特殊信息的


本文由AnonyStar 发布,可转载但需声明原文出处。

欢迎关注微信公账号 :云栖简码 获取更多优质文章

更多文章关注笔者博客 :云栖简码 i-code.online

数据库 | 001-MySQL梳理系列(一)的更多相关文章

  1. Mysql优化系列(2)--通用化操作梳理

    前面有两篇文章详细介绍了mysql优化举措:Mysql优化系列(0)--总结性梳理Mysql优化系列(1)--Innodb引擎下mysql自身配置优化 下面分类罗列下Mysql性能优化的一些技巧,熟练 ...

  2. Mysql备份系列(1)--备份方案总结性梳理

    mysql数据库备份有多么重要已不需过多赘述了,废话不多说!以下总结了mysql数据库的几种备份方案: 一.binlog二进制日志通常作为备份的重要资源,所以再说备份方案之前先总结一下binlog日志 ...

  3. 2、ABPZero系列教程之拼多多卖家工具 更改数据库为Mysql

    因为要部署项目到云服务器,不想在服务器上装SqlServer,所以需要把项目改为Mysql. 项目初始化 1.下载项目压缩包,前面文章已经说到,可以加群到群文件里下载.解压缩下载的项目源码,使用VS2 ...

  4. Mysql备份系列(4)--lvm-snapshot备份mysql数据(全量+增量)操作记录

    Mysql最常用的三种备份工具分别是mysqldump.Xtrabackup(innobackupex工具).lvm-snapshot快照.前面分别介绍了:Mysql备份系列(1)--备份方案总结性梳 ...

  5. 数据库 之MySQL 简单教程

      So Easy系列之MySQL数据库教程 1.   数据库概述 1.1.  数据库概述 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和 ...

  6. Mysql数据库的mysql Schema 究竟有哪些东西& 手工注入的基础要领

    #查看数据库版本号 mysql> select @@version; +------------+ | @@version  | +------------+ | 5.5.16-log | +- ...

  7. 关于数据库管理系统DBMS--关系型数据库(MySQL/MariaDB)

    数据库的结构(3种):层次,网状,关系型(用的最多): DBMS的三层模型: 视图层:面向最终用户: 逻辑层:面向程序员或DBA: 物理层:面向系统管理员: 关系型数据库管理系统——RDBMS: 主要 ...

  8. EntityFramework Core 2.1重新梳理系列属性映射(一)

    前言 满血复活啦,大概有三个月的时间没更新博客了,关于EF Core最新进展这三个月也没怎么去看,不知现阶段有何变化没,本文将以EF Core 2.1稳定版本作为重新梳理系列,希望对看本文的你有所帮助 ...

  9. (转)MySQL优化系列

    原文:http://blog.csdn.net/jack__frost/article/details/71194208 数据库,后端开发者必学,而且现在以MySQL居多.这个系列将系统化MySQL一 ...

  10. Mysql数据库的mysql Schema 究竟有哪些东西& 手工注入的基础要领

    #查看数据库版本号 mysql> select @@version; +------------+ | @@version  | +------------+ | 5.5.16-log | +- ...

随机推荐

  1. C4 模型 - 可视化架构设计

    前言 世界上最难的两件事是: 1. 把我的思想放进你的脑袋 2. 把你的钱放进我的口袋 第二点我们不探讨,因为这是众所周知的,不信?过来试试:) 对于第一点,对我们程序员来说,其实也是我个人一直强调的 ...

  2. 如何用Python判断一个文件是否被占用?

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理 今天有同学问,用os模块的access()能否判断一个文件是否被占用?直觉上,这是行不通的,因为ac ...

  3. Spring Cloud正式移除Hystrix、Zuul等Netflix OSS组件

    1. 前言 2020-12-22日Spring官方博客宣布,Spring Cloud 2020.0.0正式发布.2020.0.0是第一个使用新的版本号命名方案的Spring Cloud发行版本.在此之 ...

  4. jdbc编程学习之增删改查(2)

    一,enum类型的使用 在SQL中没有布尔类型的数据,我们都使用过布尔类型,当属性的值只用两种情况时.例如性别等.那在数据库对这些属性的值个数比较少时我们应该使用什么数据类型呢?SQL给我们提供了枚举 ...

  5. ES标签搜索并解决评分排序问题

    一.概述 需求: 最近在做一个新闻项目,有这样一个需求,如下: 用户根据视频内容手动创建标签,标签个数不限 在视频详情页提供根据标签推荐视频功能,即按本视频的标签进行搜索,标签匹配多的排在前面,匹配少 ...

  6. Fragment学习

    利用Fragment可以动态的加载页面,减少Activity的数量. 便于开发 类似与html中FragmentSet一样 嵌套在一起,使每个页面为独立的 代码如下: package com.exam ...

  7. eclipse的相关操作和使用快捷键

    修改字体Window->preferences->General->Appearance->ColorsandFonts ->Basic->text Font 在e ...

  8. centos7搭建sonarqube环境+jenkins部署全流程

    一.简介sonarqube是一个用于代码质量管理的开源平台,用于管理源代码的质量 不遵循代码标准sonar可以通过PMD,CheckStyle,Findbugs等等代码规则检测工具规范代码编写.潜在的 ...

  9. Sentinel限流之快速失败和漏桶算法

    距离上次总结Sentinel的滑动窗口算法已经有些时间了,原本想着一口气将它的core模块全部总结完,但是中间一懒就又松懈下来了,这几天在工作之余又重新整理了一下,在这里做一个学习总结. 上篇滑动窗口 ...

  10. Sentry(v20.12.1) K8S 云原生架构探索, SENTRY FOR JAVASCRIPT 手动捕获事件基本用法

    系列 Sentry-Go SDK 中文实践指南 一起来刷 Sentry For Go 官方文档之 Enriching Events Snuba:Sentry 新的搜索基础设施(基于 ClickHous ...