Mysql InnoDB引擎生产环境配置 - 待完善

一. 前言

在生产环境中mysql如何配置, 有什么约定项…

数据库在生产环境运行的时候,你必须根据机器的内存设置合理的buffer pool的大小,然后设置buffer pool的数量,这样的话,可以尽可能的保证你的数据库的高性能和高并发能力。
在线上运行的时候,buffer pool是有多个的,每个buffer pool里多个chunk但是共用一套链表数据结构,然后执行crud的时候,就会不停的加载磁盘上的数据页到缓存页里来,然后会查询和更新缓存页里的数据,同时维护一系列的链表结构。

二. 查看配置 SHOW ENGINE INNODB STATUS

mysql> SHOW ENGINE INNODB STATUS \G;
*************************** 1. row ***************************Type: InnoDBName:
Status:
----------------------
BUFFER POOL AND MEMORY
----------------------
## buffer pool最终的总大小是多少
Total large memory allocated 137428992
Dictionary memory allocated 100382
## 这就是说buffer pool一共能容纳多少个缓存页
Buffer pool size   8191
## 这就是说free链表中一共有多少个空闲的缓存页是可用的
Free buffers       7703
## Database pages和Old database pages,就是说lru链表中一共有多少个缓存页,以及冷数据区域里的缓存页数量
Database pages     484
Old database pages 0
## 这就是flush链表中的缓存页数量
Modified db pages  0## Pending reads和Pending writes,等待从磁盘上加载进缓存页的数量,
## 还有就是即将从lru链表中刷入磁盘的数量、即将从flush链表中刷入磁盘的数量
Pending reads      0
Pending writes: LRU 0, flush list 0, single page 0## 这就是说已经lru冷数据区域里访问之后转移到热数据区域的缓存页的数量,
## 以及在lru冷数据区域里1s内被访问了没进入热数据区域的缓存页的数量
Pages made young 0, not young 0## youngs/s和not youngs/s,这就是说每秒从冷数据区域进入热数据区域的缓存页的数量,
## 以及每秒在冷数据区域里被访问了但是不能进入热数据区域的缓存页的数量
0.00 youngs/s, 0.00 non-youngs/s## Pages read xxxx, created xxx, written xxx,xx reads/s, xx creates/s, 1xx writes/s,
## 这里就是说已经读取、创建和写入了多少个缓存页,以及每秒钟读取、创建和写入的缓存页数量
Pages read 450, created 34, written 36
0.00 reads/s, 0.00 creates/s, 0.00 writes/s## Buffer pool hit rate xxx / 1000,这就是说每1000次访问,有多少次是直接命中了buffer pool里的缓存的
## young-making rate xxx / 1000 not xx / 1000,每1000次访问,有多少次访问让缓存页从冷数据区域移动到了热数据区域,以及没移动的缓存页数量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:这就是lru链表里的缓存页的数量
LRU len: 484, unzip_LRU len: 0## I/O sum:最近50s读取磁盘页的总数
## I/O cur:现在正在读取磁盘页的数量
I/O sum[0]:cur[0], unzip sum[0]:cur[0]

三. 配置

buffer pool 大小.

约定: 要根据可用内存来评估. 比如 buffer pool设置你的机器内存的50%~60%左右,

buffer pool总大小=(chunk大小 * buffer pool数量)的2倍数

确定了buffer pool的总大小之后,就得考虑一下设置多少个buffer pool,以及chunk的大小了

关键公式 : buffer pool总大小=(chunk大小 * buffer pool数量)的倍数

示例:
默认的chunk大小是128MB, 机器的内存是32GB,打算给buffer pool总大小分配20GB内存.

答案: buffer pool的数量是16个,
此时chunk大小 * buffer pool的数量 = 16 * 128MB = 2048MB,
然后buffer pool总大小如果是20GB,此时buffer pool总大小就是2048MB的10倍
当然,此时你可以设置多一些buffer pool数量,比如设置32个buffer pool,那么此时buffer pool总大小(20GB)就是(chunk大小128MB * 32个buffer pool)的5倍,也是可以的。
那么此时你的buffer pool大小就是20GB,然后buffer pool数量是32个,每个buffer pool的大小是640MB,然后每个buffer pool包含5个128MB的chunk,算下来就是这么一个结果了。

  • innodb_buffer_pool_instances 默认值1
mysql> SHOW VARIABLES LIKE 'innodb_buffer_pool_instances';
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id:    5650
Current database: *** NONE ***+------------------------------+-------+
| Variable_name                | Value |
+------------------------------+-------+
| innodb_buffer_pool_instances | 1     |
+------------------------------+-------+
1 row in set (0.00 sec)mysql>

在 MySQL 中,尤其是对于 InnoDB 存储引擎,你可以通过设置 innodb_buffer_pool_instances 参数来决定 Buffer Pool 的数量(即实例数量)。Buffer Pool 是 InnoDB 用于缓存数据和索引的内存区,分割成多个实例可以帮助减少线程间的争用,从而提高并发性能。这种设置特别适用于多核服务器。

如何设置 innodb_buffer_pool_instances

  1. 配置文件设置:你可以在 MySQL 的配置文件(通常为 my.cnfmy.ini,取决于操作系统)中设置 innodb_buffer_pool_instances 的值。例如,如果你想要设置 8 个 Buffer Pool 实例,可以在 [mysqld] 部分添加或修改这行:

    [mysqld]
    innodb_buffer_pool_instances=8
    

    修改配置文件后需要重启 MySQL 服务才能生效。

  2. 动态设置:对于 MySQL 5.7 及以上版本,可以在不重启服务的情况下动态设置 innodb_buffer_pool_instances 参数(前提是总的 Buffer Pool 大小不变)。使用以下 SQL 语句:

    SET GLOBAL innodb_buffer_pool_instances = 8;
    

    请注意,虽然 innodb_buffer_pool_instances 参数可以动态设置,但实际上改变此参数不会立即生效,直到下次 MySQL 服务重启或者 Buffer Pool 被重新初始化。

注意事项

  • Buffer Pool 大小innodb_buffer_pool_instances 的设置与总的 Buffer Pool 大小(由 innodb_buffer_pool_size 控制)有关。每个实例至少需要 1GB 的内存,因此在设置实例数量之前,确保总的 Buffer Pool 大小足够分配。

  • 最佳实践:虽然可以设置多达 64 个实例,但实际上并不总是“越多越好”。过多的实例可能会增加管理开销而非提升性能。一般建议与服务器的 CPU 核心数匹配或者根据实际性能测试来调整。对于大多数系统,设置 8 到 16 个实例已经足够。

  • 重启 MySQL:如前所述,虽然 innodb_buffer_pool_instances 参数可以动态改变,但要让更改生效通常需要重启 MySQL 服务。

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

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

相关文章

设计模式——行为型模式——策略模式(含实际业务使用示例、可拷贝直接运行)

目录 策略模式 定义 组成和UML图 代码示例 实际业务场景下策略模式的使用 策略模式优缺点 使用场景 JDK中使用策略模式示例 参考文档 策略模式 定义 策略模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化…

C#返回多个值的方法

在C#中,返回多个值有多种方法,以下是常用的几种方式: 使用元组(Tuples或ValueTuple): 自C# 7.0起,可以使用元组轻松地从方法返回多个值。元组是一种轻量级的数据结构,可以存储不同类型的数据。例…

外贸客户初次合作不付定金你怎么看

小伙伴有没有遇到这种情况,有一个非常大的订单,但是客户又不愿意付定金怎么办?你接还是不接。 那咱们这个小伙伴呢,就是说,这个客户,他是一个中间商,然后中间商的话呢,他这个订单量…

文件的编码格式都在文件中有标注吗

文件的编码格式并不总是在文件中直接标注的,这取决于文件的类型和用途。但是,有几种情况下文件的编码格式可能会被明确标识或可以推断出来: 文本文件: BOM(Byte Order Mark):某些文本文件&#…

Redis技术解析

引言 在Java高级开发的道路上,对Redis的掌握是必不可少的一环。Redis,作为一款开源的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。本文将深入探讨Redis的核心技术,并结合Java开发环境&#xff0c…

FMEA助力医疗设备研发制造:领跑未来,实现弯道超车!

医疗设备作为保障人类健康的重要工具,其研发与制造水平直接关系到医疗技术的进步。然而,在激烈的市场竞争中,如何能够让自家医疗设备研发制造实现弯道超车,成为行业佼佼者?答案就在于——FMEA(失效模式与影…

go方法定义

方法定义 Golang 方法总是绑定对象实例,并隐式将实例作为第一实参 (receiver)。 只能为当前包内命名类型定义方法。 参数 receiver 可任意命名。如方法中未曾使用 ,可省略参数名。 参数 receiver 类型可以是 T 或 *T。基类型 T 不能是接口或指针。 不…

试用NXP官方的UDS bootloader

文章目录 1.前言2.资料获取2.1 MCU例程 2.2 开发环境2.3 上位机2.4 硬件 3.工程修改3.1 boot工程修改 3.2 app工程修改4.测试情况5.例程分享 1.前言 最近很多客户在开发S32K系列MCU时咨询是否可以提供基于UDS协议的bootloader。本文以S32K144为例,介绍如何使用NXP官…

qt基础类型转换

uchar*与QByteArray类型 uchar转为QByteArray QByteArray array; unsigned char buf ; arrayQByteArray::fromRawData((char)buf,sizeof(buf)); QByteArray转为uchar //一次性转换 buf reinterpret_cast<unsigned char*>(array.data()); //单个数据转换 (unsigned cha…

【Mybatis操作数据库】入门(一)

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【MyBatis框架】 本专栏旨在分享MyBatis框架的学习笔记&#xff0c;如有错误定当洗耳恭听&#xff0c;欢迎大家在评论区交流讨论&#x1f…

NGINX App Protect现已支持NGINX开源版 全方位加强现代应用安全防护

近日&#xff0c;F5 NGINX 发布全新升级的NGINX App Protect 5.0版本&#xff0c;将先前专属于NGINX 商业版本NGINX Plus 的现代应用安全能力拓展至NGINX开源版中&#xff0c;为增强现代应用和API安全防护提供全方位支持。此次升级后&#xff0c;适用于云端及本地部署的NGINX A…

软考中级之数据库系统工程师笔记总结(六)多媒体基础

作者&#xff1a;Maynor 博客之星大数据领域Top1,GitHub项目awesome-chatgpt-project作者, 大厂程序员, 全网技术矩阵粉丝7w 公众号&#xff1a;Maynor996&#x1f4e2;博客主页&#xff1a;https://manor.blog.csdn.net &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &am…

基于TL431的线性可调恒压恒流电源的Multisim电路仿真设计

1、线性电源的工作原理 在我们日常应用里&#xff0c;直流电是从市电或电网中的交流电获取的。例如15V直流电压源、24V直流电压源等等。交流电变为直流电的过程大概分为一下几步&#xff1a; 首先&#xff0c;交流电通过变压器降低其电压幅值。接着&#xff0c;经过整流电路进…

【jetson】研华 jetson orin 开发套件系统镜像下载链接、刷入镜像时修改默认用户名的方法

1. 系统镜像下载链接 orin nano 8G&#xff1a;https://pan.baidu.com/s/1iE6ES5yV8CQ85HU0O34mHg?pwdmoyk orin nx 8G&#xff1a;https://pan.baidu.com/s/1F96NN1Hy0meNegzuqW-7mA?pwdqojr orin nx 16G&#xff1a;https://pan.baidu.com/s/1w0Gukoi9Ld-8wZLKQuhcgQ?pwd…

韩顺平0基础学Java——第6天

p87-p109 运算符&#xff08;第四章&#xff09; 四种进制 二进制用0b或0B开头 十进制略 八进制用0开头 十六进制0x或0X开头&#xff0c;其中的A—F不区分大小写 10转2&#xff1a;将这个数不断除以2&#xff0c;直到商为0&#xff0c;然后把每步得到的余数倒过来&#…

储能液冷系统中的管路介绍

储能液冷系统中管路占比约10%。储能液冷管路通过向系统中导入冷却剂&#xff0c;使产热元件与冷却剂进行换热&#xff0c;有效提高能源转化效率&#xff0c;并维持系统的温度稳定。 近年来液冷储能市场的兴起&#xff0c;也为尼龙管路打开了新的市场。储能液冷循环管路按照作用…

【GaussTech速递】数据库技术解读之细粒度资源管控

背景 对数据库集群内资源管控与资源隔离一直是企业客户长久以来的诉求。华为云GaussDB作为一款企业级分布式数据库&#xff0c;一直致力于满足企业对大型数据库集群的管理需要。 数据库可以管理的资源有计算资源与存储资源&#xff0c;计算资源包括CPU、内存、IO与网络&#…

【AI大模型】AI大模型热门关键词解析与核心概念入门

&#x1f680; 作者 &#xff1a;“大数据小禅” &#x1f680; 文章简介 &#xff1a;本专栏后续将持续更新大模型相关文章&#xff0c;从开发到微调到应用&#xff0c;需要下载好的模型包可私。 &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; 目…

【大模型赋能开发者】海云安入选数世咨询LLM驱动数字安全2024——AI安全系列报告

近日&#xff0c;国内知名数字产业领域第三方调研咨询机构数世咨询发布了LLM驱动数字安全2024——AI安全系列报告。报告通过调研、公开信息收集等方式对目前十余家已具备LLM相关的应用能力安全厂商对比分析出了这一领域当前的产业现状并进行了各厂商的能力展示。 海云安凭借近…

通过网络服务远程调用NVIDIA RTX系列GPU资源

摘要&#xff1a; 随着计算需求的增加&#xff0c;利用GPU进行计算加速已成为提高效率的关键。NVIDIA RTX系列GPU因其出色的性能被广泛用于各种计算密集型任务。本文提供了一套详细的指南&#xff0c;介绍如何在Windows和Linux服务器上通过网络服务远程调用RTX GPU资源&#xf…