无法降低 innodb_buffer_pool_size

无法降低 innodb_buffer_pool_size

真是令人沮丧的问题。我的 innodb_buffer_pool_size 设置为 32M,我想降低它。my.cnf 中的变量实际上设置为 2M,我找不到任何其他覆盖配置文件(是的,它是在 mysqld 块中设置的)。当我尝试在命令行中设置变量时,我得到:ERROR 1238 (HY000):变量“innodb_buffer_pool_size”是只读变量。32M 从哪里来的??

更新:变量是否可能已编译,但无法在 my.cnf 中更改?或者我的 Linux 发行版(openSUSE 11.3)中是否有我找不到的包含?在告诉我更改变量并重新启动 MySQL 之前,请先阅读以下内容。这不会起任何作用。

答案1

只能innodb_buffer_pool_size在 中设置my.cnf。无法在数据库运行时设置。

无论如何,除了最小的测试数据库之外,2M 对于其他数据库来说都太小了。32M 对于任何实际数据库来说几乎肯定都太小了。如果你正在调优数据库服务器,这通常是增加, 不是减少

答案2

我的 innodb_buffer_pool_size 设置为 32M

您的意思是通过检查来查看该值:

mysql> select @@innodb_buffer_pool_size;
+---------------------------+
| @@innodb_buffer_pool_size |
+---------------------------+
|                  33554432 |
+---------------------------+
1 row in set (0.00 sec)

我想把它降低。

为什么?你有多少 RAM?

当我尝试在命令行设置变量时,我得到:ERROR 1238 (HY000): Variable 'innodb_buffer_pool_size' is a read only variable

正如它所说,innodb_buffer_pool_size不是动态变量。如果不重新启动 MySQL,则无法更改它。

32M从哪里来的?

一个可能的原因是...它最初设置为32M /etc/my.cnf,而有人将其更改为2M但没有重新启动MySQL。

答案3

我正在为这个老问题添加一个答案,以说明从 MySQL 5.7.5 开始,InnoDB 缓冲池可以动态调整大小从 mysql shell:

SET GLOBAL innodb_buffer_pool_size=512000000;

相关内容