暂无图片
msyql--8.0.18下持久化参数的bug
我来答
分享
暂无图片 匿名用户
msyql--8.0.18下持久化参数的bug

参数文件中innodb_buffer_pool_size是30m

设置持久化45m,但是mysqld-auto.cnf 还是60m

mysql> set persist innodb_buffer_pool_size=45*1024*1024;
Query OK, 0 rows affected, 1 warning (0.23 sec)

mysql> select 45*1024*1024;
+--------------+
| 45*1024*1024 |
+--------------+
| 47185920 |
+--------------+


cat mysqld-auto.cnf

"innodb_buffer_pool_size" : { "Value" : "62914560"


第2个bug 

mysql> set persist innodb_buffer_pool_size=52428800;
Query OK, 0 rows affected, 1 warning (0.04 sec)

mysql> show warnings;
+---------+------+--------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+--------------------------------------------------------------------------------+
| Warning | 1210 | InnoDB: Cannot resize buffer pool to lesser than chunk size of 31457280 bytes. |
+---------+------+--------------------------------------------------------------------------------

很明显52428800 >31457280 ,但是警告却提示不能小于30m


mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.18 |
+-----------+

我来答
添加附件
收藏
分享
问题补充
1条回答
默认
最新
星星之火

在 MySQL 中,innodb_buffer_pool_size 是用来配置 InnoDB 存储引擎的缓冲池大小的参数。这个参数对于 MySQL 的性能至关重要,因为它决定了 InnoDB 用来缓存表数据和索引的内存大小。

关于您遇到的第一个问题,您尝试将 innodb_buffer_pool_size 设置为 45MB(4510241024),但 mysqld-auto.cnf 文件中显示的值是 60MB(62914560)。这可能是由于几个原因造成的:

  1. 配置文件覆盖:可能存在其他配置文件(如 my.cnf 或 my.ini)覆盖了您设置的值。MySQL 在启动时,会按照特定的顺序读取配置文件,并且后面的配置会覆盖前面的配置。

  2. 动态设置未生效:虽然您使用了 SET PERSIST 命令来动态地更改配置,但可能由于某些原因(如权限问题、MySQL 版本限制等)该更改没有生效。

  3. MySQL 自动调整:在某些情况下,特别是使用了某些自动化管理工具(如 MySQLTuner)时,它可能会自动调整 innodb_buffer_pool_size 的值。

对于第二个问题,您尝试将 innodb_buffer_pool_size 设置为 50MB(52428800),但收到了一个警告,说不能将其缩小到小于 30MB(31457280)。这通常意味着 InnoDB 缓冲池是以块(chunk)的形式进行分配的,每个块的大小是固定的,而您尝试设置的大小小于单个块的大小。因此,即使您设置的总体大小大于一个块的大小,MySQL 也不允许您这样做,因为它需要保持缓冲池的完整性。

为了解决这个问题,您可以尝试以下几个步骤:

  1. 检查所有配置文件:确保没有其他配置文件覆盖了您的设置。

  2. 重启 MySQL 服务:有时候,即使您使用了 SET PERSIST 命令,也需要重启 MySQL 服务才能使更改生效。

  3. 检查 MySQL 版本和文档:不同的 MySQL 版本可能有不同的行为。查阅您正在使用的 MySQL 版本的官方文档,以了解有关 innodb_buffer_pool_size 的更多信息。

  4. 调整块大小:如果您可以控制 InnoDB 缓冲池的块大小,您可以尝试调整它以匹配您想要设置的总体大小。但请注意,这通常需要在 MySQL 服务器初始化时设置,并且可能涉及到更多的配置和潜在的风险。

最后,始终在更改任何生产环境中的配置之前备份您的数据和配置文件,并在测试环境中验证更改的影响。

暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏