真是令人沮丧的问题。我的 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;