mysql的架构、数据结构(内存+磁盘)

启停:

重启:systemctl restart mysqld.service

停止:systemctl stop mysqld.service

查看状态:systemctl status mysqld.service

mysql的内部模块:

上面是查询的逻辑,一条更新语句是如何查询的

     更新语句的基本流程和查询前面是一致的,区别在于,更新语句,拿到了符合条件数据之后的操作是怎么进行处理的?

下面介绍一下基本概念:

mysql 内存结构: 

mysql内存主要结构:buffer pool、change buffer、Log Buffer 、adaptive Hash Index

1、缓冲池 buffer pool

 Innodb的数据上面我们也介绍了,数据是存在磁盘的idb文件中,交互时速度必然是比较慢的。这时就需要将数据加载到内存中。

innodb逻辑上的最小单位是页(16k),那么每次加载的页到内存的区域(预读),就是buffer pool。下一次取数据(数据页或者索引页)时,会优先判断在不在buffer页中。修改时,会修改内存中的数据,当buffer pool中数据和磁盘不一致时,这时就叫脏页。会有工作线程会定时同步,这个操作就叫刷脏

满了怎么办?默认大小是128M  LRU的淘汰策略(简单来说就是链表,有头和尾,并且划分年轻代和老年代,以解决预读和扫表产生的问题)

mysql的LRU算法:

 普通的LRU:

  • 新数据插入到链表头部;
  • 每当缓存命中(即缓存数据被访问),则将数据移到链表头部;
  • 当链表满的时候,将链表尾部的数据丢弃。

 mysql改进的LRU:

  1.   buffer pool 分为了young(5/8)和old(5/3)两个部分
  2.   数据会在用户的sql用到了页中的数据,或者mysql猜测你很可能会用到的数据-预读,这两种情况加载到buffer pool
  3.   数据优先进入old,old满了会移出队列尾部。young区呢? 用户sql使用的页,会被移入young(且需要在old中待满配置的秒数)。而预读的数据,没被使用则会一直在old区,直到被清除

问题: 当一次大表扫描,会导致大量数进入young? 

解决:mysql防止一次扫描数据过大,替换了大量热数据,有参数控制 innodb_old_blocks_time(需要在old区待满多少秒,且再被用户sql调用时,才会进入young)。

2、change Buffer

  • 3
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
MySQL数据库的内存结构主要包括以下几个部分:buffer pool、change buffer、Log Buffer和adaptive Hash Index。 buffer pool是MySQL最重要的内存结构,它用于缓存数据页,提高查询性能。当查询需要读取或写入数据时,首先会检查buffer pool是否已经存在相应的数据页,如果存在,则直接在内存进行操作,避免了频繁的磁盘读写操作。 change buffer是用于处理插入、删除和修改等操作引起的索引变化。当数据页不在buffer pool时,change buffer会将这些操作记录下来,然后在将来的某个时刻将其应用到对应的索引页上,减少了直接修改索引页的次数,提高了性能。 Log Buffer是用于缓存事务日志的内存区域。当执行事务操作时,MySQL会将修改数据的操作记录到事务日志。Log Buffer可以减少对硬盘的写操作,提高了事务的执行速度。 adaptive Hash Index是一种自适应哈希索引,用于加速热点数据的访问。它会根据查询的模式动态地调整哈希索引的大小和形状,以提高查询性能。 通过这些内存结构的合理使用,可以提高MySQL数据库的性能和响应速度。更详细的信息可以参考MySQL官方文档关于InnoDB内存结构的说明。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [mysql架构数据结构(内存+磁盘)](https://blog.csdn.net/early_or_later/article/details/106407689)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [mysql 内存架构](https://blog.csdn.net/jnrjian/article/details/129204260)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值