MySQL InnoDB Buffer Pool空间不足导致查询变慢

问题现象

前端调用后台服务查询接口响应很慢,查看 MySQL 的日志,有如下日志:

[Warning] InnoDB: Difficult to find free blocks in the buffer pool (13430 search iterations)! 13430 failed attempts to flush a page! Consider increasing the buffer pool size. It is also possible that in your Unix version fsync is very slow, or completely frozen inside the OS kernel. Then upgrading to a newer version of your operating system may help. Look at the number of fsyncs in diagnostic info below. Pending flushes (fsync) log: 0; buffer pool: 0. 2845050 OS file reads, 85165 OS file writes, 9180 OS fsyncs. Starting InnoDB Monitor to print further diagnostics to the standard output.

问题原因

MySQL InnoDB 存储引擎的 Buffer Pool (缓冲池)没有空闲块了,需要增大 Buffer Pool 的大小。

那 Buffer Pool 是什么?有什么作用?

对于使用MySQL InnoDB存储引擎的表来说,表数据是以页的形式存储在磁盘上,磁盘的访问速度相对于CPU来说很慢,为了调节磁盘和CPU的访问速度, InnoDB 存储引擎在处理客户端的请求时,如果需要访问某个页的数据,就会把完整的页的数据全部加载到内存中,然后通过内存进行读写访问,在读写访问之后并不着急把该页对应的内存空间释放掉,而是将其缓存起来,这样将来有请求再次访问该页面时,就可以省下磁盘 I/O 的开销了。

MySQL 服务器启动时向操作系统申请用来缓存表数据的内存,就叫 Buffer Pool(缓冲池)。

通过配置项 innodb_buffer_pool_size 配置 Buffer Pool 的大小,默认是 128M 。

Buffer Pool 的内存被划分为若干个页面,每个页面对应一个控制块。

Buffer Pool 相关的链表

  • free 链表:存储空闲的缓冲页信息。

  • flush 链表:存储脏页信息。脏页是Buffer Pool 中被修改的缓冲页,和磁盘上的数据不一致。

  • LRU (Least Recently Used)链表:管理当缓冲池不够用时,需要将哪些缓冲页从内存中移除。

Buffer Pool 实例及 chunk

为了提高Buffer Pool 的并发处理能力,可以通过配置项 innodb_buffer_pool_instances 配置多个 Buffer Pool 实例,每个实例是独立的(独立地申请内存空间,独立地管理各种链表)。

每个 Buffer Pool 实例以 chunk 为单位向操作系统申请内存空间,chunk 的大小默认值是 128MB,可以通过配置项 innodb_buffer_pool_chunk_size 修改。

查看 Buffer Pool的信息

  • 查看 Buffer Pool 大小:show variables like 'innodb_buffer_pool_size';

  • 查看 Buffer Pool 实例个数:show variables like 'innodb_buffer_pool_instances';

  • 查看 chunk 大小:show variables like 'innodb_buffer_pool_chunk_size';

  • 查看 Buffer Pool 状态:show engine innodb status\G

    mysql> show engine innodb status\G
    ...
    ----------------------
    BUFFER POOL AND MEMORY
    ----------------------
    Total large memory allocated 2198863872
    Dictionary memory allocated 1889983
    Buffer pool size   131072
    Free buffers       8685
    Database pages     121738
    Old database pages 44777
    Modified db pages  25340
    Pending reads      0
    Pending writes: LRU 0, flush list 1, single page 0
    Pages made young 57648, not young 454686
    0.00 youngs/s, 0.00 non-youngs/s
    Pages read 49231, created 86169, written 1538233
    0.00 reads/s, 0.00 creates/s, 0.00 writes/s
    Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 0 / 1000
    Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s
    LRU len: 121738, unzip_LRU len: 0
    I/O sum[0]:cur[0], unzip sum[0]:cur[0]
    ----------------------
    INDIVIDUAL BUFFER POOL INFO
    ----------------------
    ---BUFFER POOL 0
    Buffer pool size   16384
    Free buffers       1077
    Database pages     15216
    Old database pages 5596
    Modified db pages  3136
    Pending reads      0
    Pending writes: LRU 0, flush list 0, single page 0
    Pages made young 6486, not young 52789
    0.00 youngs/s, 0.00 non-youngs/s
    Pages read 5894, created 11149, written 196015
    0.00 reads/s, 0.00 creates/s, 0.00 writes/s
    No buffer pool page gets since the last printout
    Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s
    LRU len: 15216, unzip_LRU len: 0
    I/O sum[0]:cur[0], unzip sum[0]:cur[0]
    ---BUFFER POOL 1
    Buffer pool size   16384
    Free buffers       1088
    Database pages     15215
    Old database pages 5596
    Modified db pages  3136
    Pending reads      0
    Pending writes: LRU 0, flush list 1, single page 0
    Pages made young 6933, not young 5973
    0.00 youngs/s, 0.00 non-youngs/s
    Pages read 6033, created 10759, written 184737
    0.00 reads/s, 0.00 creates/s, 0.00 writes/s
    Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 0 / 1000
    Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s
    LRU len: 15215, unzip_LRU len: 0
    I/O sum[0]:cur[0], unzip sum[0]:cur[0]
    ---BUFFER POOL 2
    Buffer pool size   16384
    Free buffers       1077
    Database pages     15228
    Old database pages 5601
    Modified db pages  3132
    Pending reads      0
    Pending writes: LRU 0, flush list 0, single page 0
    Pages made young 7429, not young 81168
    0.00 youngs/s, 0.00 non-youngs/s
    Pages read 6002, created 10761, written 209768
    0.00 reads/s, 0.00 creates/s, 0.00 writes/s
    Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 0 / 1000
    Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s
    LRU len: 15228, unzip_LRU len: 0
    I/O sum[0]:cur[0], unzip sum[0]:cur[0]
    ---BUFFER POOL 3
    Buffer pool size   16384
    Free buffers       1093
    Database pages     15212
    Old database pages 5595
    Modified db pages  3136
    Pending reads      0
    Pending writes: LRU 0, flush list 0, single page 0
    Pages made young 7077, not young 65129
    0.00 youngs/s, 0.00 non-youngs/s
    Pages read 6317, created 10330, written 208418
    0.00 reads/s, 0.00 creates/s, 0.00 writes/s
    Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 0 / 1000
    Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s
    LRU len: 15212, unzip_LRU len: 0
    I/O sum[0]:cur[0], unzip sum[0]:cur[0]
    ---BUFFER POOL 4
    Buffer pool size   16384
    Free buffers       1080
    Database pages     15223
    Old database pages 5599
    Modified db pages  3200
    Pending reads      0
    Pending writes: LRU 0, flush list 0, single page 0
    Pages made young 7127, not young 72730
    0.00 youngs/s, 0.00 non-youngs/s
    Pages read 6272, created 10750, written 187345
    0.00 reads/s, 0.00 creates/s, 0.00 writes/s
    No buffer pool page gets since the last printout
    Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s
    LRU len: 15223, unzip_LRU len: 0
    I/O sum[0]:cur[0], unzip sum[0]:cur[0]
    ---BUFFER POOL 5
    Buffer pool size   16384
    Free buffers       1094
    Database pages     15215
    Old database pages 5598
    Modified db pages  3200
    Pending reads      0
    Pending writes: LRU 0, flush list 0, single page 0
    Pages made young 7117, not young 14164
    0.00 youngs/s, 0.00 non-youngs/s
    Pages read 6171, created 10595, written 174556
    0.00 reads/s, 0.00 creates/s, 0.00 writes/s
    Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 0 / 1000
    Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s
    LRU len: 15215, unzip_LRU len: 0
    I/O sum[0]:cur[0], unzip sum[0]:cur[0]
    ---BUFFER POOL 6
    Buffer pool size   16384
    Free buffers       1091
    Database pages     15209
    Old database pages 5594
    Modified db pages  3200
    Pending reads      0
    Pending writes: LRU 0, flush list 0, single page 0
    Pages made young 7012, not young 97165
    0.00 youngs/s, 0.00 non-youngs/s
    Pages read 6141, created 10860, written 179494
    0.00 reads/s, 0.00 creates/s, 0.00 writes/s
    No buffer pool page gets since the last printout
    Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s
    LRU len: 15209, unzip_LRU len: 0
    I/O sum[0]:cur[0], unzip sum[0]:cur[0]
    ---BUFFER POOL 7
    Buffer pool size   16384
    Free buffers       1085
    Database pages     15220
    Old database pages 5598
    Modified db pages  3200
    Pending reads      0
    Pending writes: LRU 0, flush list 0, single page 0
    Pages made young 8467, not young 65568
    0.00 youngs/s, 0.00 non-youngs/s
    Pages read 6401, created 10965, written 197900
    0.00 reads/s, 0.00 creates/s, 0.00 writes/s
    Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 0 / 1000
    Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s
    LRU len: 15220, unzip_LRU len: 0
    I/O sum[0]:cur[0], unzip sum[0]:cur[0]
    ...
    

    其中一些字段的含义如下:

    • Total large memory allocated:代表 Buffer Pool 向操作系统申请的连续内存空间大小,包括全部控制块、缓冲页、以及碎片。
    • Buffer pool size:代表该 Buffer Pool 可以容纳多少缓冲页,单位是页。
    • Free buffers:代表当前 Buffer Pool 还有多少空闲缓冲页,也就是 free 链表中还有多少个节点。
    • Database pages:代表 LRU 链表中页的数量。
    • Modified db pages:代表脏页数量,也就是 flush 链表中节点的数量。
    • Buffer pool hit rate:表示在过去某段时间内,平均访问 1000 次页面时,该页面有多少次已经被缓存到 Buffer Pool中。

参考资料

  • 《MySQL 是怎样运行的 —— 从根上理解 MySQL》 第 17章 小孩子 1949 著

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android Framework AMS(05)startActivity分析-2(ActivityThread启动到Activity拉起)

该系列文章总纲链接:专题总纲目录 Android Framework 总纲 本章关键点总结 & 说明: 说明:本章节主要解读AMS通过startActivity启动Activity的整个流程的整个流程的第二阶段:从ActivityThread启动到Activity拉起。 第一阶段文…

【Vue】Vue(八)Vue3.0 使用ref 和 reactive创建响应式数据

ref 创建:基本类型的响应式数据 **作用:**定义响应式变量。语法:let xxx ref(初始值)。**返回值:**一个RefImpl的实例对象,简称ref对象或ref,ref对象的value属性是响应式的。注意点: JS中操作…

《拿下奇怪的前端报错》:1比特丢失导致的音视频播放时长无限增长-浅析http分片传输核心和一个坑点

问题背景 在一个使用MongoDB GridFS实现文件存储和分片读取的项目中,同事遇到了一个令人困惑的问题:音频文件总是丢失最后几秒,视频文件也出现类似情况。更奇怪的是,播放器显示的总时长为无限大。这个问题困扰了团队成员几天&…

Java项目-基于Springboot的应急救援物资管理系统项目(源码+说明).zip

作者:计算机学长阿伟 开发技术:SpringBoot、SSM、Vue、MySQL、ElementUI等,“文末源码”。 开发运行环境 开发语言:Java数据库:MySQL技术:SpringBoot、Vue、Mybaits Plus、ELementUI工具:IDEA/…

工业自动化为什么依赖光耦隔离器 --- 腾恩科技

光耦合器隔离器在工业自动化中必不可少,可确保信号传输,同时保护敏感电子设备和人员免受高压影响。选择合适的光耦合器隔离器取决于对操作环境和隔离要求的了解。本文将重点介绍在为工业应用选择光耦合器隔离器时需要考虑的关键因素。 光耦合器隔离器在工…

上传图片到github上,生成链接在Typora中使用(解决Typora的md文件在分享时的丢失问题)

上传图片到github上,生成链接在Typora中使用(解决Typora的md文件在分享时的丢失问题) 在GitHub上从操作 创建一个 GitHub 仓库: 登录 GitHub,创建一个新的仓库来存储图片。 生成 GitHub 令牌: 在 GitHub 中,前往“Settings” > “Developer settings” > “Pers…

AUTOSAR_EXP_ARAComAPI的5章笔记(12)

☞返回总目录 5.4.6 方法 骨架侧的服务方法是抽象方法,必须由继承骨架的服务实现子类进行重写。让我们来看一下我们服务示例中的 Adjust 方法: /*** 对于所有输出和非空返回参数* 生成一个包含非空返回值和/或输出参数的封装结构。*/ struct AdjustOu…

docker网络连接模式详解

五种模式对比 bridge/桥接网络:适用于大多数单主机场景,提供基本的网络隔离和通信。 HOST/主机网络:适用于需要高性能和直接网络访问的场景。 NONE/无网络:适用于不需要网络访问的容器,增加安全性。 container/容器网…

UE4 材质学习笔记08(雨滴流淌着色器/雨水涟漪着色器)

一.雨滴流淌着色器 法线贴图在红色通道和绿色通道上,那是法线的X轴和Y轴,在蓝色通道中 我有个用于雨滴流淌的蒙版,在Alpha通道中,有个时间偏移蒙版。这些贴图都是可以在PS上制作做来的,雨滴流淌图可以直接用笔刷画出来…

永恒之蓝漏洞

MS17-010是微软于2017年3月发布的一个安全补丁,旨在修复Windows操作系统中的一个严重漏洞,该漏洞被称为“永恒之蓝”(EternalBlue)。这个漏洞影响了Windows的Server Message Block(SMB)协议,允许…

Java集合剖析3】ArrayList

目录 拓展 1. 在面试时如何讲解一个集合的底层? 2. IDEA如何查看底层源码? 一、ArrayList底层数据结构 二、插入方法的具体实现 三、ArrayList底层原理总结 拓展 1. 在面试时如何讲解一个集合的底层? 底层的数据结构。插入方法的具体实现。…

vue综合指南(六)

​🌈个人主页:前端青山 🔥系列专栏:Vue篇 🔖人终将被年少不可得之物困其一生 依旧青山,本期给大家带来Vuet篇专栏内容:vue综合指南 目录 101、Vue 框架怎么实现对象和数组的监听? 102、Proxy 与 Object.d…

10 分钟使用豆包 MarsCode 帮我搭建一套后台管理系统

以下是「 豆包MarsCode 体验官」优秀文章,作者把梦想揉碎。 十分钟使用豆包 MarsCode 搭建后台管理项目 在这个快节奏的时代,开发者们总是希望能够快速、高效地完成项目的搭建与开发工作。无论是初创企业还是大型公司,后台管理系统都是必不可…

SpringBoot1~~~

目录 快速入门 依赖管理和自动配置 修改自动仲裁/默认版本号 starter场景启动器 自动配置 修改默认扫描包结构 修改默认配置 读取application.properties文件 按需加载原则 容器功能 Configuration Import ​编辑 Conditional ImportResource 配置绑定Configur…

要在 Git Bash 中使用 `tree` 命令,下载并手动安装 `tree`。

0、git bash 安装 git(安装,常用命令,分支操作,gitee,IDEA集成git,IDEA集成gitee,IDEA集成github,远程仓库操作) 1、下载并手动安装 tree 下载 tree.exe 从 tree for Windows 官方站点 下载 tree 的 Windows 可执行文件。tree for Window:https://gnuwin32.source…

鸿蒙应用开发:全面认识鸿蒙系统

前言 随着智能设备的普及和物联网的发展,对操作系统的需求也越来越多样化。鸿蒙操作系统作为一款面向全场景的分布式操作系统,其适用范围非常广泛,从智能手机到家用电器,再到工业设备,都能找到应用场景。特别是在智能…

Nginx如何配置Gzip

Nginx 配置 Gzip 压缩可以显著减小传输的文件大小,提高网页加载速度。以下是在 Nginx 中配置 Gzip 的详细步骤: 一、找到 Nginx 配置文件 Nginx 的配置文件通常位于 /etc/nginx/nginx.conf 或 /usr/local/nginx/conf/nginx.conf(取决于 Ngin…

鸿蒙网络编程系列22-Web组件文件上传示例

1. web组件文件上传功能简介 鸿蒙的web组件可以加载网页,如果网页本身具备文件上传功能的话就比较尴尬了,因为html上传文件时,允许用户选择本地文件,但是鸿蒙因为安全性的考虑,只允许操作沙箱中的文件,所以…

android——Groovy gralde 脚本迁移到DSL

1、implementation的转换 implementation com.github.CymChad:BaseRecyclerViewAdapterHelper:*** 转换为 implementation ("com.github.CymChad:BaseRecyclerViewAdapterHelper:***") 2、plugin的转换 apply plugin: kotlin-android-extensions 转换为&#x…

物联网的应用以及优势

物联网智能项目涵盖了多个行业领域,随着技术的不断进步和普及,越来越多的应用案例成为主流趋势。此篇文章将概述一些主要的物联网智能项目类别及其优势和日常使用场景: 主流物联网智能项目 1. 智能家居: •优势: 提升居住体验,…