(二)MySQL全解----MySQL运行时的缓存和缓冲

前言

上一篇:MySQL架构,主要介绍了MySQL整体架构,对MySQL有了宏观上的了解
本篇则聚焦于MySQL运行时的缓存和缓冲,接下来详细盘一盘

MySQL运行时的缓存和缓冲

MySQL运行时内存中包含的缓存和缓冲,结构如下
MySQL运行时内存结构图

1 全局共享缓存

全局共享缓存,MySQL所有线程共享的内存缓存区, 主要包括:

Key Buffer:MyISAM表的索引缓冲区。提高MyISAM表索引读写效率

Query Cache:查询缓存区。存储查询SQL的结果,提高查询效率

Thread Cache:线程缓存区。主要存放可复用的空闲线程,以及线程运行期间需要共享的数据

Table Cache:表数据文件的文件描述符缓存。提高数据表的打开效率

Table Definition Cache:表结构文件的文件描述符缓存。提高数据表的打开效率

文件描述符本质上是一个地址指针,指向文件所在的具体位置。当需要对表操作,如:修改数据,增加索引,修改表字段,需要把整个磁盘检索一遍,确定表所在的具体位置,整个过程有大量的触发磁盘IO。有了文件描述符缓存之后,直接去文件描述符缓存中找,然后根据指针去磁盘中找到对应的位置,再对表做相应的操作

2 工作线程缓存

工作线程缓存,是每个工作线程独立的内存缓存区,MySQL在创建一条线程时,都会为其分配这些内存,主要包括:

thread_stack:线程堆栈。主要用于暂时存储运行的SQL语句,运算数据,和Java虚拟机栈类似

sort_buffer:排序缓冲区。执行排序SQL时,存放排序后数据的缓冲区,提高排序效率

join_buffer: 表连接缓冲区。连表查询时,存放符合连表查询条件的数据的缓冲区,提高表连接效率

read_buffer:顺序读缓冲区。存放顺序读取的数据的缓冲区(MySQL磁盘IO一次读一页),提高顺序读效率

read_rnd_buffer:随机读缓冲区。存放随机读取的数据的缓冲区,提高随机读效率

net_buffer:工作线程连接缓冲区。主要存放当前工作线程连接的客户端信息

tmp_table:内存临时表。用到临时表时,存放临时表的结构及数据的缓冲区

bulk_insert_buffer:MyISAM批量插入缓冲区。存放批量insert数据的缓冲区

bin_log_buffer:binlog缓冲区。提高binlog写入效率

3 存储引擎的缓冲区

MySQL几乎所有的存储引擎在启动时,都会向操作系统申请一块连续的内存空间作为缓冲区。每个存储引擎的缓冲区不一定相同,如:InnoDB的缓冲区是innodb_buffer_pool,而MyISAM是key_buffer

本篇只简单介绍一下存储引擎缓冲区的基本知识,更详细的留待下一章详解,下一篇将会详细剖析InnoDB存储引擎的缓冲区

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值