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: InnoDB
  Name:
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.mfbz.cn/a/605640.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

(三)小程序样式和组件

视频链接:尚硅谷2024最新版微信小程序 文章目录 小程序的样式和组件介绍样式-尺寸单位 rpx样式-全局样式和局部样式组件-组件案例演示组件案例-轮播图区域绘制组件案例-轮播图图片添加组件案例-绘制公司信息区域组件案例-商品导航区域组件案例-跳转到商品列表组件案…

【DPU系列之】如何通过带外口登录到DPU上的ARM服务器?(Bluefield2举例)

文章目录 1. 背景说明2. 详细操作步骤2.1 目标拓扑结构2.2 连接DPU带外口网线,并获取IP地址2.3 ssh登录到DPU 3. 进一步看看系统的一些信息3.1 CPU信息:8核A723.2 内存信息 16GB3.3 查看ibdev设备 3.4 使用小工具pcie2netdev查看信息3.5 查看PCIe设备信息…

Vue-路由介绍

目录 一、思考引入 二、路由介绍 一、思考引入 单页面应用程序,之所以开发效率高,性能高,用户体验好,是因为页面按需更新。 而如果要按需更新,首先需要明确:访问路径和组件的对应关系。该关系通过路由来…

Python爬虫获取豆瓣电影Top100

大家好,我是秋意零。 今天分析一篇,Python爬虫获取豆瓣电影Top100。 在此之前,我没有学习过爬虫,只有一丢丢的Python基础。下面效果的实现源码几乎没经过我,而是AI百老师。我主要负责了对应的调试以及根据我想要的功…

敏感信息提取插件-CaA(三)

0x01 简介 CaA是一个基于BurpSuite Java插件API开发的流量收集和分析插件。它的主要作用就是收集HTTP协议报文中的参数、路径、文件、参数值等信息,并统计出现的频次,为使用者积累真正具有实战意义的Fuzzing字典。除此之外,CaA还提供了独立的…

Python 框架安全:Django SQL注入漏洞测试.(CVE-2021-35042)

什么是 Django 框架 Django 是一个用 Python 编写的 Web 应用程序框架。它提供了许多工具和库,使得开发 Web 应用程序变得更加容易和高效。Django 遵循了“MTV”(模型-模板-视图)的设计模式,将应用程序的不同组件分离开来&#x…

Day2 | Java基础 | 2 数据类型

Day1 | Java基础 | 2 数据类型 基础版staticstatic的用法static修饰内部类static修饰方法static修饰变量static修饰代码块 深入分析static小结 问题回答版参数传递形参和实参的区别是什么?Java是值传递还是引用传递?值传递和引用传递的区别是什么&#x…

Python-VBA函数之旅-reversed函数

目录 一、reversed函数的常见应用场景 二、reversed函数使用注意事项 三、如何用好reversed函数? 1、reversed函数: 1-1、Python: 1-2、VBA: 2、推荐阅读: 个人主页: https://blog.csdn.net/ygb_10…

Infuse for Mac激活版:高清影音播放软件

对于热爱影音娱乐的Mac用户来说,Infuse for Mac是一个不容错过的选择。它以其简洁的操作界面和强大的播放功能,为用户带来了全新的影音播放体验。 Infuse for Mac支持广泛的音视频格式,无需额外转换,即可轻松播放您喜爱的影片。无…

Centos 中如何汉化man命令

刚学Linux,记不住命令和选项,很依赖里面的 man 查看命令,但因为着实看不懂,有没有什么办法把man查看命令的信息改成中文 在CentOS 7中,你可以通过安装man-pages-zh包来获取中文的man手册。以下是具体的步骤&#xff1a…

unity ui 同屏

一共有三个摄像机,上屏,下屏 和 类似照相机的ccamera 类似照相机的ccamera的设置: 下屏摄像机设置: 下屏交互的Canvas设置: 新建一个canvas,下面放上rawimage: 如果下屏不想显示的内容&#xf…

【WEEK11】 【DAY2】Employee Management System Part 3【English Version】

2024.5.7 Tuesday Continuing from 【WEEK11】 【DAY1】Employee Management System Part 2【English Version】 Contents 10.4. Login Functionality10.4.1. Modify index.html10.4.2. Main Page Style Missing After Login Failure10.4.3. Create LoginController.java10.4.4…

【stomp 实战】spring websocket用户消息发送源码分析

这一节,我们学习用户消息是如何发送的。 消息的分类 spring websocket将消息分为两种,一种是给指定的用户发送(用户消息),一种是广播消息,即给所有用户发送消息。那怎么区分这两种消息呢?那就是用前缀了…

通过 Java 操作 redis -- list 列表基本命令

目录 使用命令 lpush,lrange,rpush 使用命令 lpop 和 rpop 使用命令 blpop,brpop 使用命令 llen 关于 redis list 列表类型的相关命令推荐看Redis - list 列表 要想通过 Java 操作 redis,首先要连接上 redis 服务器&#xff…

抽象类基本概念

抽象类及抽象方法 概念:一个类中没有包含足够的信息来描绘一个具体的对象,这种类被定义为抽象类,含有抽象方法的类也被称为抽象类。 用通俗的话来说就是当一个类的某个功能(方法)实现不确定时,我们就将该…

【Hadoop】MapReduce (七)

MapReduce 执行流程 MapTask执行流程 Read:读取阶段 MapTask会调用InputFormat中的getSplits方法来对文件进行切片切片之后,针对每一个Split,产生一个RecordReader流用于读取数据数据是以Key-Value形式来产生,交给map方法来处理…

RAFT:引领 Llama 在 RAG 中发展

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

Java面试八股文(MySQL篇)

数据库三范式 数据库事务介绍 索引介绍 SQL优化手段 mysql union 与 union all 语法及用法 并发事务带来的问题 大表如何优化 索引类型介绍 MYSQL数据库锁介绍

代码审计-PHP模型开发篇MVC层动态调试未授权脆弱鉴权未引用错误逻辑

知识点 1、PHP审计-动态调试-未授权安全 2、PHP审计-文件对比-未授权安全 3、PHP审计-未授权访问-三种形态动态调试优点 1、实时跟踪代码执行流程 2、实时获取变量接受数据 3、实时分析指定文件动态 环境配置:https://blog.csdn.net/m0_60571842/article/details/…

您可以使用WordPress创建的19种网站类型

当人们决定为什么他们应该使用WordPress时,我们经常会被问到“WordPress可以做[空白]吗?答案大多是肯定的。在本文中,我们将向您展示您可以使用WordPress创建的19种不同类型的网站,而无需学习任何编程技巧。 目录 隐藏 1 开始使用…
最新文章