innodb_buffer_pool_size 配置文件设置的值和查询的值怎么不一致

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 您可以配置缓冲池大小 脱机或在服务器运行时。中描述的行为 本节适用于这两种方法。更多信息 关于在线配置缓冲池大小,请参阅在线配置 InnoDB 缓冲池大小。InnoDB当增加或减少innodb_buffer_pool_size时, 操作以块的形式执行。块大小由 innodb_buffer_pool_chunk_size 配置选项定义,该选项的缺省值为 。有关更多信息,请参阅配置 InnoDB 缓冲池区块大小。128M缓冲池大小必须始终等于 innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances 的倍数或倍数。 如果将in

您可以配置缓冲池大小 脱机或在服务器运行时。中描述的行为 本节适用于这两种方法。更多信息 关于在线配置缓冲池大小,请参阅在线配置 InnoDB 缓冲池大小。InnoDB

当增加或减少innodb_buffer_pool_size时, 操作以块的形式执行。块大小由 innodb_buffer_pool_chunk_size 配置选项定义,该选项的缺省值为 。有关更多信息,请参阅配置 InnoDB 缓冲池区块大小。128M

缓冲池大小必须始终等于 innodb_buffer_pool_chunk_size innodb_buffer_pool_instances 的倍数或倍数。 如果将innodb_buffer_pool_size配置为 值不等于或等于 innodb_buffer_pool_chunk_size innodb_buffer_pool_instances, 缓冲池大小会自动调整为以下值: 等于或等于 innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances 的倍数。

在以下示例中,innodb_buffer_pool_size 到 ,innodb_buffer_pool_instances 是 设置为 。innodb_buffer_pool_chunk_size 是 ,这是默认值。8G16128M

8G是有效的innodb_buffer_pool_size值 因为是 innodb_buffer_pool_instances=16 * innodb_buffer_pool_chunk_size=128M 的倍数, 这是.8G2G

$> mysqld --innodb-buffer-pool-size=8G --innodb-buffer-pool-instances=16
mysql> SELECT @@innodb_buffer_pool_size/1024/1024/1024;
+------------------------------------------+
| @@innodb_buffer_pool_size/1024/1024/1024 |
+------------------------------------------+
| 8.000000000000 |
+------------------------------------------+
在本例中,innodb_buffer_pool_size 到 ,innodb_buffer_pool_instances 是 设置为 。innodb_buffer_pool_chunk_size 是 ,这是默认值。在这个 case,不是 innodb_buffer_pool_instances=16 innodb_buffer_pool_chunk_size=128M 的倍数, 所以innodb_buffer_pool_size 调整为 ,这是 innodb_buffer_pool_chunk_size innodb_buffer_pool_instances 的倍数。9G16128M9G10G

$> mysqld --innodb-buffer-pool-size=9G --innodb-buffer-pool-instances=16
mysql> SELECT @@innodb_buffer_pool_size/1024/1024/1024;
+------------------------------------------+
| @@innodb_buffer_pool_size/1024/1024/1024 |
+------------------------------------------+
| 10.000000000000 |
+------------------------------------------+
配置 InnoDB 缓冲池区块大小
innodb_buffer_pool_chunk_size可以以 1MB(1048576 字节)为单位增加或减少,但 只能在启动时、命令行字符串或 在 MySQL 配置文件中。

命令行:

$> mysqld --innodb-buffer-pool-chunk-size=134217728
配置文件:

[mysqld]
innodb_buffer_pool_chunk_size=134217728
更改innodb_buffer_pool_chunk_size时,以下条件适用:

如果新的innodb_buffer_pool_chunk_size值 * innodb_buffer_pool_instances 大于当前缓冲池大小,则 缓冲池被初始化,innodb_buffer_pool_chunk_size被截断为 innodb_buffer_pool_size / innodb_buffer_pool_instances。

例如,如果缓冲池初始化时大小 (2147483648 字节)、缓冲池实例和一个块 大小(1073741824 字节),块 size 被截断为等于 innodb_buffer_pool_size / innodb_buffer_pool_instances 的值, 如下图所示:2GB41GB

$> mysqld --innodb-buffer-pool-size=2147483648 --innodb-buffer-pool-instances=4
--innodb-buffer-pool-chunk-size=1073741824;
mysql> SELECT @@innodb_buffer_pool_size;
+---------------------------+
| @@innodb_buffer_pool_size |
+---------------------------+
| 2147483648 |
+---------------------------+

mysql> SELECT @@innodb_buffer_pool_instances;
+--------------------------------+
| @@innodb_buffer_pool_instances |
+--------------------------------+
| 4 |
+--------------------------------+

Chunk size was set to 1GB (1073741824 bytes) on startup but was

truncated to innodb_buffer_pool_size / innodb_buffer_pool_instances

mysql> SELECT @@innodb_buffer_pool_chunk_size;
+---------------------------------+
| @@innodb_buffer_pool_chunk_size |
+---------------------------------+
| 536870912 |
+---------------------------------+
缓冲池大小必须始终等于 innodb_buffer_pool_chunk_size innodb_buffer_pool_instances 的倍数或倍数。 如果更改innodb_buffer_pool_chunk_size,innodb_buffer_pool_size会自动调整为等于或 innodb_buffer_pool_chunk_size innodb_buffer_pool_instances的倍数。 初始化缓冲池时将进行调整。 以下示例演示了此行为:

The buffer pool has a default size of 128MB (134217728 bytes)

mysql> SELECT @@innodb_buffer_pool_size;
+---------------------------+
| @@innodb_buffer_pool_size |
+---------------------------+
| 134217728 |
+---------------------------+

The chunk size is also 128MB (134217728 bytes)

mysql> SELECT @@innodb_buffer_pool_chunk_size;
+---------------------------------+
| @@innodb_buffer_pool_chunk_size |
+---------------------------------+
| 134217728 |
+---------------------------------+

There is a single buffer pool instance

mysql> SELECT @@innodb_buffer_pool_instances;
+--------------------------------+
| @@innodb_buffer_pool_instances |
+--------------------------------+
| 1 |
+--------------------------------+

Chunk size is decreased by 1MB (1048576 bytes) at startup

(134217728 - 1048576 = 133169152):

$> mysqld --innodb-buffer-pool-chunk-size=133169152

mysql> SELECT @@innodb_buffer_pool_chunk_size;
+---------------------------------+
| @@innodb_buffer_pool_chunk_size |
+---------------------------------+
| 133169152 |
+---------------------------------+

Buffer pool size increases from 134217728 to 266338304

Buffer pool size is automatically adjusted to a value that is equal to

or a multiple of innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances

mysql> SELECT @@innodb_buffer_pool_size;
+---------------------------+
| @@innodb_buffer_pool_size |
+---------------------------+
| 266338304 |
+---------------------------+
此示例演示了相同的行为,但 多个缓冲池实例:

The buffer pool has a default size of 2GB (2147483648 bytes)

mysql> SELECT @@innodb_buffer_pool_size;
+---------------------------+
| @@innodb_buffer_pool_size |
+---------------------------+
| 2147483648 |
+---------------------------+

The chunk size is .5 GB (536870912 bytes)

mysql> SELECT @@innodb_buffer_pool_chunk_size;
+---------------------------------+
| @@innodb_buffer_pool_chunk_size |
+---------------------------------+
| 536870912 |
+---------------------------------+

There are 4 buffer pool instances

mysql> SELECT @@innodb_buffer_pool_instances;
+--------------------------------+
| @@innodb_buffer_pool_instances |
+--------------------------------+
| 4 |
+--------------------------------+

Chunk size is decreased by 1MB (1048576 bytes) at startup

(536870912 - 1048576 = 535822336):

$> mysqld --innodb-buffer-pool-chunk-size=535822336

mysql> SELECT @@innodb_buffer_pool_chunk_size;
+---------------------------------+
| @@innodb_buffer_pool_chunk_size |
+---------------------------------+
| 535822336 |
+---------------------------------+

Buffer pool size increases from 2147483648 to 4286578688

Buffer pool size is automatically adjusted to a value that is equal to

or a multiple of innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances

mysql> SELECT @@innodb_buffer_pool_size;
+---------------------------+
| @@innodb_buffer_pool_size |
+---------------------------+
| 4286578688 |
+---------------------------+
更换innodb_buffer_pool_chunk_size时应小心, 因为更改此值可能会增加缓冲区的大小 pool,如上面的示例所示。在更改innodb_buffer_pool_chunk_size之前, 计算对innodb_buffer_pool_size的影响,以确保生成的缓冲池大小为 可以接受。

注意
为避免潜在的性能问题,块数 (innodb_buffer_pool_size / innodb_buffer_pool_chunk_size) 不应超过 1000。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
SQL 关系型数据库 MySQL
如何解决mysql警告:“ InnoDB:page_cleaner:1000毫秒的预期循环用了XXX毫秒设置可能不是最佳的”?
如何解决mysql警告:“ InnoDB:page_cleaner:1000毫秒的预期循环用了XXX毫秒设置可能不是最佳的”?
2144 0
|
SQL 关系型数据库 MySQL
MySQL:一个innodb_thread_concurrency设置不当引发的故障
源码版本:5.7.22 一、问题来源 欢迎关注我的《深入理解MySQL主从原理 32讲 》,如下: 这是一个朋友问我的典型案例。整个故障现象表现为,MySQL数据库频繁的出现大量的请求不能响应。
4124 0
|
SQL 关系型数据库 MySQL
Innodb中常见SQL语句设置的锁类型
1、select … from 除了serializable隔离级别,这种SQL都是一致性非锁定读,不加锁;在serializable级别,这种SQL加next-key锁。 2、select … from … lock in share mode 这种SQL加S类型的next-key锁。
1559 0
|
缓存 关系型数据库 MySQL
|
10天前
|
存储 Oracle 关系型数据库
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
本文介绍了MySQL InnoDB存储引擎中的数据文件和重做日志文件。数据文件包括`.ibd`和`ibdata`文件,用于存放InnoDB数据和索引。重做日志文件(redo log)确保数据的可靠性和事务的持久性,其大小和路径可由相关参数配置。文章还提供了视频讲解和示例代码。
118 11
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
|
10天前
|
存储 Oracle 关系型数据库
【赵渝强老师】MySQL InnoDB的表空间
InnoDB是MySQL默认的存储引擎,主要由存储结构、内存结构和线程结构组成。其存储结构分为逻辑和物理两部分,逻辑存储结构包括表空间、段、区和页。表空间是InnoDB逻辑结构的最高层,所有数据都存放在其中。默认情况下,InnoDB有一个共享表空间ibdata1,用于存放撤销信息、系统事务信息等。启用参数`innodb_file_per_table`后,每张表的数据可以单独存放在一个表空间内,但撤销信息等仍存放在共享表空间中。
|
10天前
|
存储 Oracle 关系型数据库
【赵渝强老师】MySQL InnoDB的段、区和页
MySQL的InnoDB存储引擎逻辑存储结构与Oracle相似,包括表空间、段、区和页。表空间由段和页组成,段包括数据段、索引段等。区是1MB的连续空间,页是16KB的最小物理存储单位。InnoDB是面向行的存储引擎,每个页最多可存放7992行记录。
|
10天前
|
存储 Oracle 关系型数据库
【赵渝强老师】MySQL的InnoDB存储引擎
InnoDB是MySQL的默认存储引擎,广泛应用于互联网公司。它支持事务、行级锁、外键和高效处理大量数据。InnoDB的主要特性包括解决不可重复读和幻读问题、高并发度、B+树索引等。其存储结构分为逻辑和物理两部分,内存结构类似Oracle的SGA和PGA,线程结构包括主线程、I/O线程和其他辅助线程。
【赵渝强老师】MySQL的InnoDB存储引擎