当前位置: 首页 > news >正文

【MySQL进阶之路】BufferPool 生产环境优化经验

欢迎关注公众号(通过文章导读关注:【11来了】),及时收到 AI 前沿项目工具及新技术的推送!

在我后台回复 「资料」 可领取编程高频电子书
在我后台回复「面试」可领取硬核面试笔记

文章导读地址:点击查看文章导读!

感谢你的关注!

在这里插入图片描述

BufferPool 生产优化经验

高并发场景下如何访问 BufferPool

请添加图片描述

如果在高并发场景下,大量线程需要操作 MySQL,也就是大量线程对 BufferPool 进行并发操作,在 BufferPool 中对这些共享变量(flush、free、lru 链表)操作,是需要通过 加锁来保证线程同步的,虽然是在内存中对 BufferPool 进行操作,但是将多个线程并发操作给转为了串行操作,还是有些降低性能的!

通过多个 BufferPool 优化高并发性能

上边在高并发场景中,只有一个 BufferPool 的话,可能多个线程在这一个 BufferPool 中排队对共享变量进行操作比较慢,在生产环境中,可以给 MySQL 设置多个 BufferPool 来提升性能!

如果部署 MySQL 的机器配置比较好,内存比较大,可以多给 BufferPool 分配一些内存,并且设置多个 BufferPool,通过一下两个参数设置:

innodb_buffer_pool_size # BufferPool 大小
innodb_buffer_pool_instances # BufferPool 个数

比如,可以给 BufferPool 分配 8G 内存,设置 4 个 BufferPool,那么每个的内存大小为 2G

这样原来只有 1 个 BufferPool 的情况下,多个线程并发操作在这一个 BufferPool 中进行排队

现在有 4 个 BufferPool 了,多个线程可以同时在这 4 个 BufferPool 中排队进行操作,性能成倍提升

请添加图片描述

因此在生产环境中,在机器配置足够的情况下,可以通过增加 BufferPool 的数量来提升 MySQL 的性能!

BufferPool 的大小可以动态变化吗?

其实是可以的,MySQL 通过 chunk 机制 来实现 BufferPool 大小动态调整的功能

chunk 其实就是 BufferPool 中的子单元,一个 BufferPool 由许多的 chunk 组成,每个 chunk 中包含了一系列的描述数据块和缓存页

chunk 的大小由:innodb_buffer_pool_chunk_size 来控制,默认大小为 128MB

那么假设现在有一个 BufferPool 大小为 2GB,那么这个 BufferPool 就是由 16 个 chunk 组成,一个 chunk 128MB

BufferPool 与 chunk 关系如下图:

请添加图片描述

当在 MySQL 运行期间,如果需要增大 BufferPool 的内存大小,那么只需要申请对应的 chunk 块,再将申请到的 chunk 分配给 BufferPool 就可以了

通过 chunk 机制可以极大提升 BufferPool 的灵活性

BufferPool 生产环境参数配置

我们知道在 MySQL 中,是将磁盘文件中的数据读取到内存的 BufferPool 中,在 BufferPool 中对数据进行操作的,那么从理论上来讲,如果部署 MySQL 的机器内存有 32 G,那么给 BufferPool 分配 30G 的大小会不会更好呢?

其实这样是行不通的,因为机器在启动的时候,操作系统就要占用几个 G 的内存,并且机器上运行的其他应用也是需要占用内存的

因此,一般建议将 BufferPool 的大小设置为机器内存的 60%!

BufferPool 数量的确定:

在确定 BufferPool 的大小之后,接下来可以确定 BufferPool 的数量了

通过计算公式确定:

BufferPool 总大小 = (chunk 大小 * Bufferpool 数量) * 2

那么假设部署 MySQL 的机器内存为 32 GB,那么 BufferPool 的大小应该设置为 32GB * 60% ≈ 20GB,chunk 大小为 128MB,代入上边公式,得到 BufferPool 数量为 (BufferPool 总大小 / 2) / chunk 大小,也就是 20GB/2/128MB = 16 个

因此 BufferPool 的数量就设置为 16 个

根据上边的经验值对 BufferPool 的总大小以及数量进行配置,可以尽可能的保证数据库的高性能

当配置过后,可以通过命令:show engine innodb status; 来查看配置是否生效!

请添加图片描述

相关文章:

【MySQL进阶之路】BufferPool 生产环境优化经验

欢迎关注公众号(通过文章导读关注:【11来了】),及时收到 AI 前沿项目工具及新技术的推送! 在我后台回复 「资料」 可领取编程高频电子书! 在我后台回复「面试」可领取硬核面试笔记! 文章导读地址…...

Vim工具使用全攻略:从入门到精通

引言 在软件开发的世界里,Vim不仅仅是一个文本编辑器,它是一个让你的编程效率倍增的神器。然而,对于新手来说,Vim的学习曲线似乎有些陡峭。本文将手把手教你如何从Vim的新手逐渐变为高手,深入理解Vim的操作模式&#…...

Chapter 8 - 7. Congestion Management in TCP Storage Networks

TCP Flow Monitoring versus I/O Flow Monitoring TCP flow monitoring shouldn’t be confused with I/O flow monitoring because of the following reasons: TCP 流量监控不应与 I/O 流量监控混淆,原因如下: 1. TCP belongs to the transport layer (layer 4) of the OS…...

带你快速入门js高级-基础

1.作用域 全局 scriptxx.js 局部 函数作用域{} 块作用域 const let 2.闭包 函数外有权访问函数内的变量, 闭包可以延长变量生命周期 function 函数名 () {return function () {// 这里的变量不会立刻释放} }3.垃圾回收 不在使用(引用的变量), 防止占用内存,需要…...

数据结构与算法-链表(力扣附链接)

之前我们对C语言进行了一定的学习,有了一些基础之后,我们就可以学习一些比较基础的数据结构算法题了。这部分的知识对于我们编程的深入学习非常有用,对于一些基本的算法,我们学习之后,就可以参加一些编程比赛了&#x…...

多线程JUC:等待唤醒机制(生产者消费者模式)

👨‍🎓作者简介:一位大四、研0学生,正在努力准备大四暑假的实习 🌌上期文章:多线程&JUC:解决线程安全问题——synchronized同步代码块、Lock锁 📚订阅专栏:多线程&am…...

无人机动力系统高倍率锂聚合物电池介绍,无人机锂电池使用与保养,无人机飞行控制动力源详解

无人机电池使用及保养 电池是无人机飞行的动力来源,也是一个消耗品,对电池充分了解,采取正确的使用方法,妥善进行维护保养将有助于提高飞行的安全性、延长电池的使用寿命。以下将详细对电池的使用和管理进行讲解。 高倍率锂聚合物电池的含义…...

[BeginCTF]真龙之力

安装程序 双击安装 出现了安装失败的标签&#xff0c;开发者不允许测试。 查看Mainfest入口文件 <?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android"http://schemas.android.com/apk/res/android" android:versionCo…...

手写分布式存储系统v0.3版本

引言 承接 手写分布式存储系统v0.2版本 &#xff0c;今天开始新的迭代开发。主要实现 服务发现功能 一、什么是服务发现 由于咱们的服务是分布式的&#xff0c;那从服务管理的角度来看肯定是要有一个机制来知道具体都有哪些实例可以提供服务。举个例子就是&#xff0c;张三家…...

除夕快乐!

打印的简单实现&#xff0c;祝大家新的一年万事顺意&#xff01; 龙年大吉&#xff01; #include <stdio.h> #include <windows.h> #include <string.h>int main() {const char* message "除夕快乐!";int i;for (i 0; i < strlen(message);…...

17:定时器编程实战

1、实验目的 (1)使用定时器来完成LED闪烁 (2)原来实现闪烁时中间的延迟是用delay函数实现的&#xff0c;在delay的过程中CPU要一直耗在这里不能去做别的事情。这是之前的缺点 (3)本节用定时器来定一个时间&#xff08;譬如0.3s&#xff09;&#xff0c;在这个定时器定时时间内…...

Fink CDC数据同步(五)Kafka数据同步Hive

6、Kafka同步到Hive 6.1 建映射表 通过flink sql client 建Kafka topic的映射表 CREATE TABLE kafka_user_topic(id int,name string,birth string,gender string ) WITH (connector kafka,topic flink-cdc-user,properties.bootstrap.servers 192.168.0.4:6668…...

ubuntu原始套接字多线程负载均衡

原始套接字多线程负载均衡是一种在网络编程中常见的技术&#xff0c;特别是在高性能网络应用或网络安全工具中。这种技术允许应用程序在多个线程之间有效地分配和处理网络流量&#xff0c;提高系统的并发性能。以下是关于原始套接字多线程负载均衡技术的一些介绍&#xff1a; …...

leetcode (算法)66.加一(python版)

需求 给定一个由 整数 组成的 非空 数组所表示的非负整数&#xff0c;在该数的基础上加一。 最高位数字存放在数组的首位&#xff0c; 数组中每个元素只存储单个数字。 你可以假设除了整数 0 之外&#xff0c;这个整数不会以零开头。 示例 1&#xff1a; 输入&#xff1a;digi…...

DataX源码分析 TaskGroupContainer

系列文章目录 一、DataX详解和架构介绍 二、DataX源码分析 JobContainer 三、DataX源码分析 TaskGroupContainer 四、DataX源码分析 TaskExecutor 五、DataX源码分析 reader 六、DataX源码分析 writer 七、DataX源码分析 Channel 文章目录 系列文章目录TaskGroupContainer初始…...

2024年华为OD机试真题-螺旋数字矩阵-Java-OD统一考试(C卷)

题目描述: 疫情期间,小明隔离在家,百无聊赖,在纸上写数字玩。他发明了一种写法: 给出数字个数n和行数m(0 < n ≤ 999,0 < m ≤ 999),从左上角的1开始,按照顺时针螺旋向内写方式,依次写出2,3...n,最终形成一个m行矩阵。 小明对这个矩阵有些要求: 1.每行数字的…...

红队打靶练习:PHOTOGRAPHER: 1

目录 信息收集 1、arp 2、nmap 3、nikto 目录扫描 1、gobuster 2、dirsearch WEB 信息收集 enum4linux smbclient 8000端口 CMS利用 信息收集 文件上传漏洞利用 提权 信息收集 get user.txt get flag 信息收集 1、arp ┌──(root㉿ru)-[~/kali] └─# a…...

【Linux】网络诊断 traceroute命令详解

目录 一、traceroute概述 1.1 traceroute命令简介 1.2 命令格式 1.3 原理 1.4 命令功能 二、使用实例 实例1&#xff1a;traceroute 用法简单、最常用的用法 实例2&#xff1a;跳数设置 实例3&#xff1a;设置探测数据包数量 实例4&#xff1a;显示IP地址&#xff0c…...

c#cad 创建-圆(二)

运行环境 vs2022 c# cad2016 调试成功 一、代码说明 这段代码是一个AutoCAD插件&#xff0c;用于在模型空间中创建一个圆形。 首先&#xff0c;我们需要定义一个命令类CreateCircleCommand&#xff0c;并在命名空间CreateCircleInCad中声明。 在CreateCircleCommand类中&a…...

面试高频知识点:2线程 2.1.5如何自定义实现一个线程池

在Java中&#xff0c;线程池是一种用于管理线程的机制&#xff0c;它可以有效地管理多个线程并且可以重复使用它们&#xff0c;从而减少了线程创建和销毁的开销&#xff0c;提高了线程的利用率。本文将介绍如何自定义实现一个简单的线程池&#xff0c;并提供相应的Java代码示例…...

Fillinger智能填充插件:如何用3分钟完成1小时的设计工作?

Fillinger智能填充插件&#xff1a;如何用3分钟完成1小时的设计工作&#xff1f; 【免费下载链接】illustrator-scripts Adobe Illustrator scripts 项目地址: https://gitcode.com/gh_mirrors/il/illustrator-scripts 还在为Adobe Illustrator中繁琐的图案填充而头疼吗…...

基于SimpleX协议构建私有AI通信通道:OpenClaw插件部署指南

1. 项目概述&#xff1a;构建一个无需公共机器人账户的私有AI通信通道在构建AI助手或自动化工作流时&#xff0c;我们常常面临一个两难选择&#xff1a;要么依赖大型平台的机器人API&#xff08;如Telegram Bot、Slack App&#xff09;&#xff0c;这意味着你的通信路径、用户数…...

STM32 PID温度控制系统:实现±0.5°C高精度控制的完整指南

STM32 PID温度控制系统&#xff1a;实现0.5C高精度控制的完整指南 【免费下载链接】STM32 项目地址: https://gitcode.com/gh_mirrors/stm322/STM32 你是否曾面临温度控制系统的精度不足、响应迟缓或稳定性差的困扰&#xff1f;在工业自动化、实验室研究和智能家居领域…...

叫不动下属、又不能裁?中层必看!不撕破脸、不内耗,3招拿捏摆烂员工

很多中层都有这样的困境&#xff1a;上面领导催进度&#xff0c;下面员工躺平摆烂&#xff0c;叫不动、推不动&#xff1b;想辞退&#xff0c;却因编制、合同等原因动不了&#xff0c;要么硬刚撕破脸&#xff0c;要么忍气吞声自己扛&#xff0c;内耗严重还没成效。 其实&#…...

AI HYCAN 007 空气悬架智能功率 MOSFET 完整选型方案

2026年随着 AI 技术在车身控制系统中的深度渗透&#xff0c;HYCAN 007 空气悬架对功率 MOSFET 提出更高要求&#xff1a;高频化、低损耗、高可靠性、小封装。微碧半导体&#xff08;VBsemi&#xff09;基于先进 Trench 工艺&#xff0c;为您提供覆盖压缩机驱动、电磁阀控制、电…...

ArchivePasswordTestTool:5分钟掌握加密压缩包密码恢复的智能方案

ArchivePasswordTestTool&#xff1a;5分钟掌握加密压缩包密码恢复的智能方案 【免费下载链接】ArchivePasswordTestTool 利用7zip测试压缩包的功能 对加密压缩包进行自动化测试密码 项目地址: https://gitcode.com/gh_mirrors/ar/ArchivePasswordTestTool 你是否曾因遗…...

AI编码助手配置框架:六层缰绳架构实现团队规范与上下文持久化

1. 项目概述&#xff1a;为什么你的AI编码助手总像个“健忘的实习生”&#xff1f; 如果你和我一样&#xff0c;已经深度使用Claude Code、Cursor这类AI编码助手超过半年&#xff0c;那你一定经历过这种“血压升高”的时刻&#xff1a;明明昨天刚跟它详细解释过项目的架构规范…...

保姆级教程:用Sigrity PowerSI提取5GHz内单端S参数(附DDR4仿真实例)

从零掌握Sigrity PowerSI&#xff1a;5GHz单端S参数提取与DDR4实战解析 在高速PCB设计中&#xff0c;信号完整性问题往往成为工程师的"隐形杀手"。当DDR4内存接口速率突破2400MHz时&#xff0c;传统时域分析方法已难以捕捉信号在传输过程中的微妙变化。散射参数&…...

Remix Icon终极指南:3200+免费矢量图标库的完整使用手册

Remix Icon终极指南&#xff1a;3200免费矢量图标库的完整使用手册 【免费下载链接】RemixIcon Open source neutral style icon system 项目地址: https://gitcode.com/gh_mirrors/re/RemixIcon 还在为项目寻找高质量的免费图标而烦恼吗&#xff1f;&#x1f914; 每天…...

CCM实战调校:从原理到精准色彩还原

1. 色彩校正矩阵&#xff08;CCM&#xff09;的核心原理 色彩校正矩阵&#xff08;CCM&#xff09;是图像处理流水线中一个关键的数学工具&#xff0c;它的主要作用是修正相机传感器捕获的颜色与实际场景颜色之间的偏差。想象一下&#xff0c;你用手机拍了一张草莓的照片&…...