在我们的系统中,我们不使用MyISAM -只使用InnoDB (偶尔也使用内存)。
将key_buffer_size设置为0安全吗?或者有意想不到的副作用?根据手册,它似乎是安全的。
发布于 2019-06-10 16:54:55
在MySQL文档中,5.5、5.6、5.7和8.0的最小值为8。
如果在my.cnf中将其设置为0并重新启动mysqld,则可能会达到8。
由于钥匙_缓冲器_大小是动态的,所以登录到mysql并运行
mysql> SET GLOBAL key_buffeer_size = 0;
mysql> SELECT @@global.key_buffer_size;不管它的价值是什么,那就去做吧。存储引擎层将处理它。
请注意,MyISAM仅缓存索引页。将默认的最小值设置为非常低的非零值8(确切地说是一个字节)可能更简单,而不是使用足够的RAM查看是否启用了密钥缓存的代码逻辑。
root@vt-mysql:~# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 36
Server version: 5.6.33-0ubuntu0.14.04.1 (Ubuntu)
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> select @@global.key_buffer_size;
+--------------------------+
| @@global.key_buffer_size |
+--------------------------+
| 16777216 |
+--------------------------+
1 row in set (0.05 sec)
mysql> set global key_buffer_size = 0;
ERROR 1438 (HY000): Cannot drop default keycache
mysql> set global key_buffer_size = 8;
ERROR 1438 (HY000): Cannot drop default keycache
mysql> select version();
+-------------------------+
| version() |
+-------------------------+
| 5.6.33-0ubuntu0.14.04.1 |
+-------------------------+
1 row in set (0.05 sec)
mysql>文档是错误的:不能动态地调整全局缓冲区的大小。
我添加了key_buffer_size = 0并重新启动mysqld。它反弹到16M。
我添加了key_buffer_size = 8并重新启动mysqld。它反弹到16M。
root@vt-mysql:~# vi /etc/mysql/my.cnf
root@vt-mysql:~#
root@vt-mysql:~#
root@vt-mysql:~#
root@vt-mysql:~# grep key_buffer_size /etc/mysql/my.cnf
key_buffer_size = 0
root@vt-mysql:~# service mysql stop && sleep 10 && service mysql start
mysql stop/waiting
mysql start/running, process 1991
root@vt-mysql:~# mysql -ANe"SELECT @@global.key_buffer_size"
+----------+
| 16777216 |
+----------+
root@vt-mysql:~# vi /etc/mysql/my.cnf
root@vt-mysql:~# grep key_buffer_size /etc/mysql/my.cnf
key_buffer_size = 8
root@vt-mysql:~# service mysql stop && sleep 10 && service mysql start
mysql stop/waiting
mysql start/running, process 2112
root@vt-mysql:~# mysql -ANe"SELECT @@global.key_buffer_size"
+----------+
| 16777216 |
+----------+
root@vt-mysql:~# vi /etc/mysql/my.cnf
root@vt-mysql:~# grep key_buffer_size /etc/mysql/my.cnf
key_buffer_size = 2M
root@vt-mysql:~# service mysql stop && sleep 10 && service mysql start
mysql stop/waiting
mysql start/running, process 2234
root@vt-mysql:~# mysql -ANe"SELECT @@global.key_buffer_size"
+----------+
| 16777216 |
+----------+
root@vt-mysql:~#我想我说的唯一正确的事情是:不管价值是什么,就随它去吧。存储引擎层将处理它。
发布于 2019-06-10 17:44:44
通过5.7,用户名和权限的表存储在MyISAM表中。因此,最好至少为它们的索引拥有少量的缓存。
1600万可能足以应付任何情况。
想想看-- 10米是你内存的多少百分比?小到微不足道,对吧?
8是没有意义的-- key_buffer是1KB索引块的集合。(正如Rolando所指出的,这会被归结为一些有用的东西。)
并不是每个设置都可以动态更改。8.0允许更改几乎所有的设置。与此同时,8.0几乎消除了MyISAM,因此key_buffer_size是一个毫无意义的问题。
https://dba.stackexchange.com/questions/240210
复制相似问题