MySQL内存(Buffer Pool)

Buffer Pool

MySQL 的数据存在磁盘,但是不能每次读取数据都从磁盘里去,这样磁盘IO太频繁,存在性能问题。
InnoDB设计了一个缓存池(Buffer Pool),缓冲池在内存中。
默认配置Buffer Pool大小为128MB,可以通过innodb_buffer_pool_size参数调整。一般调整为可用物理内存的60%~80%。

Buffer Pool缓存什么?

InnoDB会把存储的数据划分为若干,以页作为磁盘与内存的交互的基本单位,一个页默认大小为16KB,Buffer Pool中也是由构成。
Buffer Pool除了缓存索引页数据页,还包括undo页,插入缓存页、自适应哈希索引、锁信息等等。
在这里插入图片描述

Buffer Pool管理

InnoDB为每个缓存页都创建了一个控制块(类似于文件系统的PCB)

控制块信息包括:缓存页的表空间、页号、缓存页地址、链表节点等等

在这里插入图片描述

空闲页(Free 链表)

为了能够快速找到空闲的缓存页,可以使用链表结构,将空闲缓存页的控制块作为链表的节点,这个链表称为:Free 链表
在这里插入图片描述

脏页(Flush 链表)

与Free 链表类似
在这里插入图片描述

提高缓存命中率

使用简单的LRU算法会导致两个问题:

  • 预读失效
  • Buffer Pool污染

预读失效

  • MySQL有预读机制:
    MySQL在加载数据页时,会提前把它相邻的数据页一并加载进来,目的是较少磁盘IO。原理是程序具有空间局部性。
  • 预读失效:这些被提前加载进来的数据页,并没有被访问,相当于这个预读是白做了。这就是预读失效。
  • 解决:改进LRU算法,将LRU划分为2个区域:old 区 和 young区
    在这里插入图片描述
    预读的数据页放到old区,真正访问的也放到young区。如果预读也一直没被访问,就会从old区域移除。
    young被淘汰的页,会挤到old区的头部。

Buffer Pool 污染

当一个SQL语句扫描大量数据时,会把Buffer Pool的所有数据替换出去,导致大量热数据被淘汰了。
等这些热数据再次被访问时,就没有命中,再次进行磁盘IO,导致性能下降。

解决:
young区里是热数据,提高数据进入young的门槛,可以解决这个问题。
MySQL的解决方法:进入young区条件增加一个停留在old区域的时间判断。 具体如下:

  • 如果后续访问时间与第一次访问时间在某个时间间隔内,该缓存页就不会从old区进入young区。
  • 相反,该缓存页就会移动移动到young区头部。

这个间隔时间有innodb_old_blocks_time控制,默认为1s。

也就是说,只有同时满足[被访问]与 [在old区域停留时间超过1s] 这两个条件,才会被插入到young区头部

MySQL针对young区其实做了一个优化,为了防止young区域节点频繁移动到头部。young区前1/4被方位不会移动到链表头部,只有后3/4被访问才会。

脏页刷新时机

以下几种情况会触发脏页的刷新:

  • 当 redo log 日志满了,会主动触发脏页刷新到磁盘
  • Buffer Pool 空间不足时,需要将一部分数据页淘汰掉,如果淘汰的是脏页,那么需要先将脏页同步到磁盘。
  • MySQL认为空闲时,后天线程会定期把适量的脏页刷入磁盘
  • MySQL正常关闭之前,会把所有脏页刷入到磁盘。

总结

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/147474.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Trapezoidal Decomposition梯形分解算法(TCD)

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录前言Trapezoidal Decomposition梯形分解算法(TCD)原理(1)第一种原理(2…

DataX实战:从MongoDB到MySQL的数据迁移--修改源码并测试打包

在现代数据驱动的业务环境中,数据迁移和集成是常见的需求。DataX,作为阿里云开源的数据集成工具,提供了强大的数据同步能力,支持多种数据源和目标端。本文将介绍如何使用DataX将数据从MongoDB迁移到MySQL。 环境准备 安装MongoDB…

智慧医院人工智能应用场景 | 智能导诊系统源码

近年来,智能医疗在国内外的发展热度不断提升。图像识别、深度学习、神经网络、大模型、语音等关键技术的突破带来了人工智能技术新一轮的发展。 场景一:智能机器人 医疗机器人是指能够在医疗领域执行特定任务或功能的机器人,包括手术机器人、…

【LLaMa2入门】从零开始训练LLaMa2

目录 1 背景2 搭建环境2.1 硬件配置2.2 搭建虚拟环境2.2.1 创建虚拟环境2.2.2 安装所需的库 3 准备工作3.1 下载GitHub代码3.2 下载模型3.3 数据处理3.3.1 下载数据3.3.2 数据集tokenize预处理 4 训练4.1 修改配置4.2 开始训练4.3 多机多卡训练 5 模型推理5.1 编译5.1.1 安装gc…

Java算法专栏

专栏导读 在当今这个技术日新月异的时代,Java算法作为软件开发的核心,对于提升程序性能和解决复杂问题至关重要。本“Java算法”专栏旨在帮助读者深入理解Java编程语言中的算法原理和应用,通过实战案例和深入分析,使读者能够掌握…

软媒市场新探索:软文媒体自助发布,开启自助发稿新篇章

在繁华喧嚣的软媒市场中,每一个声音都在竭力呼喊,每一个品牌都在奋力展现。而软文,作为一种温柔而坚韧的营销力量,正逐渐崭露头角。特别是软文媒体自助发布平台的出现,更是为企业提供了一个全新的、高效的自助发稿渠道。 软媒市场自助发布平台,正如其名,是一个让企业能够自主发…

【LeetCode】每日一题 2024_9_21 边积分最高的节点(哈希)

前言 每天和你一起刷 LeetCode 每日一题~ LeetCode 启动! 题目:边积分最高的节点 代码与解题思路 func edgeScore(edges []int) (ans int) {// 直接维护哈希最大值即可mp : map[int]int{}for i, v : range edges {mp[v] i// 如果多个节点的 边积分 相…

【数据库】常用数据库简介

目录 🍔 常用的关系型数据库 🍔 Mysql简介 🍔 SQL 简介 SQL语句的分类 SQL 写法 SQL 常用的数据类型 🍔 DDL语句 对数据库的操作 对数据表的操作 🍔 DML语句 插入数据 insert into 修改数据 update 删除数…

Ubuntu下使用 python搭建服务实现从web端远程配置设备网口

1、通过文件配置Ubuntu设备网口 在Ubuntu工控机上,通过文件配置网口(网络接口)可以让网络配置在每次系统启动时自动生效。以下是常见的方法步骤: 1.1 使用 netplan 配置网口(Ubuntu 18.04 及以上版本) 编…

探索微软Copilot Agents:如何通过Wave 2 AI彻底改变工作方式

微软在最近的Copilot Wave 2发布会上,展示了一系列将彻底改变日常工作流程的新AI功能,尤其是 Copilot Agents,它们不仅仅是简单的工具,而是真正的工作助理,可以自动完成任务、提供智能分析并帮助你做出决策。这些新功能…

Day6:反转链表

题目:给你单链表的头节点head,请你反转链表,并返回反转后的链表。 输入:head[1,2,3,4,5] 输出:[5,4,3,2,1] public ListNode reverseList() {if (head null) {return head;}ListNode cur head.next;head.next null…

Python脚本每日自动备份MySQL数据库,无需mysqldump

编写一个Python脚本,每天凌晨3点开始备份 脚本具有以下特点 不需要安装mysql-client,并且Windows Linux都可以使用支持多个数据库连接的备份每个数据库支持多个表备份日志保存下来,方便第二天早上查看备份结果 首先安装需要的库 pip3 ins…

调节 PWM的占空比控制舵机的角度

一、PWM工作原理 让计数器从0数到自动重装载值,不停计数。计数值小于输出比较寄存器时输出一种电平,大于输出比较寄存器时使出另一种电平。 修改定时器时钟源的速度以及预分频器等设置,可以修改计数器计数的速度 再加上修改自动重装载值&…

肺结节检测系统源码分享

肺结节检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Visio…

python画图|图像背景颜色设置

python画图出来的默认图形背景是白色,有时候并不适合大家表达想要表达的意思。 因此,我们很有必要掌握自己设置图形背景颜色的技巧。 【1】官网教程 首先请各位看官移步官网,看看官网如何设置,下述链接可轻松到达: …

如何将很多个pdf拼接在一起?很多种PDF拼接的方法

如何将很多个pdf拼接在一起?将多个PDF文件合并不仅能够提升信息的整合性,还能使文件管理更加高效。想象一下,你需要向同事或老师提交一份综合报告,其中包含了多份相关资料。如果每个文件单独存在,查找和传输都会变得繁…

IDEA中Quarkus框架(3.13版本)开发、调试、部署、打包等

code-with-quarkus code-with-quarkus 是使用官网生成的demo项目 这个项目使用Quarkus(使用3.13.0版本,该版本支持JDK21),超音速亚原子Java框架。官网地址: https://quarkus.io/. 环境要求 OS: Windows 10.0 jdk 11 maven 3.9…

2024年研赛-华为杯数模竞赛F题论文首发+论文讲解

本届研赛助攻题目 C D F三题论文均已经全部完成。后更新计划 如图所示。 免费给大家分享 三个问题的论文部分代码 2024年华为杯-研赛分享资料(论文部分代码)(已更新部分代码): 链接:https://pan.baidu.com…

【Pyside】pycharm2024配置conda虚拟环境

知识拓展 Pycharm 是一个由 JetBrains 开发的集成开发环境(IDE),它主要用于 Python 编程语言的开发。Pycharm 提供了代码编辑、调试、版本控制、测试等多种功能,以提高 Python 开发者的效率。 Pycharm 与 Python 的关系 Pycharm 是…

springboot实战学习笔记(5)(用户登录接口的主逻辑)

接着上篇博客学习。上篇博客是已经基本完成用户模块的注册接口的开发以及注册时的参数合法性校验。具体往回看了解的链接如下。 springboot实训学习笔记(4)(Spring Validation参数校验框架、全局异常处理器)-CSDN博客文章浏览阅读576次,点赞7…