暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL Innodb体系结构之--内存结构

MySQLDBA运维零基础自学 2021-04-13
2255

Innodb由内存部分、后台线程、硬盘结构组成,下面从整体来了解内存结构


内存结构

分为SGA(系统全局区)PGA(程序缓存区)

buffer pool(缓冲池)

InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。但是由于CPU速度和磁盘速度之间的鸿沟,基于磁盘的数据库系统通常使用缓冲池记录来提高数据库的的整体性能。

InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。但是由于CPU速度和磁盘速度之间的鸿沟,基于磁盘的数据库系统通常使用缓冲池记录来提高数据库的的整体性能。


缓冲数据:数据库的数据是存储在硬盘上的,但是硬盘慢,那么就需要把我们常用的数据,缓冲到内存。


缓冲池页面的类型,如图:




在数据库中进行读取操作,首先将从磁盘中读到的页放在缓冲池中,下次再读相同的页中时,首先判断该页是否在缓冲池中。若在缓冲池中,称该页在缓冲池中被命中,直接读取该页。否则,读取磁盘上的页。


对于数据库中页的修改操作,则首先修改在缓冲池中的页,然后再以一定的频率刷新到磁盘上。页从缓冲池刷新回磁盘的操作并不是在每次页发生更新时触发,而是通过一种称为CheckPoint的机制刷新回磁盘。所以,缓冲池的大小直接影响着数据库的整体性能,可以通过配置参数

innodb_buffer_pool_size来设置。


具体来看,缓冲池中缓存的数据页类型有:索引页、数据页、undo页、插入缓冲(insert buffer)、自适应哈希索引(adaptive hash index)、InnoDB存储的锁信息(lock info)和数据字典信息(data dictionary)。


从整体来看内存就是就是红色框中的部分


在架构图上可以看到,InnoDB存储引擎的内存区域除了有缓冲池之外,还有重做日志缓冲和额外内存池。InnoDB存储引擎首先将重做日志信息先放到这个缓冲区中,然后按照一定频率将其刷新到重做日志文件中。重做日志缓冲一般不需要设置的很大,该值可由配置参数innodb_log_buffer_size控制。


查看内存分配



innodb_buffer_pool :用来缓存Innodb表的数据、索引、插入缓冲、数据字典等信息;

innodb_log_buffer:事务在内存中的缓冲,即redo log buffer的大小;

query Cache:高速查询缓存;

key_buffer_size : 只用于MyUISAM,缓存MyISAM存储;


PGA

sort_buffer_size :SQL语句在内存中的临时排序;

join_buffer_size:表连接使用;

read_buffer_size:表顺序扫描的缓存;


特殊

tmp_table_size:SQL语句在排序或者分组时,没有用到索引,就会使用临时表空间;

max_heap_table_size:管理heap、memory存储引擎表;


innodb_buffer_pool_instances        | 1

如果该值设置为2,就表示可以得到2个缓存池实例

show engine innodb status\G;可以看到实例运行状态


也可以这样查询

use information_schema;

select POOL_ID,

POOL_SIZE,

FREE_BUFFERS

,DATABASE_PAGES

from INNODB_BUFFER_POOL_STATS\G;





最后修改时间:2021-04-14 09:15:28
文章转载自MySQLDBA运维零基础自学,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论