好多人在调优Mysql的时候,总是对open_tables和opend_tables两个参数分别不清。
网上好多解释都是这样的:
open_tables:当前打开表的数量
opened_tables:当前已经打开表的数量
很简单的解释,可是这两句话看起来有点类似。
下面我来解释一下:
open_tables:是当前在缓存中打开表的数量。
opened_tables:是mysql自启动起,打开表的数量。
我们知道,假如没有缓存的话,那么mysql服务在每次执行一个语句的时候,都会先打开一个表。当sql语句执行完成后,则把这个表关掉。这就是opend_tables中的值。而,open_tables这个值,是mysql在使用缓存的情况下,存储在缓存中的表的个数。
我们可以这样做实验:执行flush tables;这个命令是mysql用来刷新缓存的。当这个命令执行后,我们会看到
open_tables这个值被清零了。但是opened_tables这个值还是保持原来值不变。但是当我们关闭mysql服务,再重启后,opened_tables这个值也被清零了。由此,得出上述两个值的结论。
这也就是为什么说当open_tables这个值接近于table_buffer这个值的时候,同时opened_tables的值在不断的增加,这个时候就要考虑增大table_buffer这个缓存值了。
解释如下:
因为open_tables的值接近于table_buffer,说明分配的缓存已经被用完了。而opened_tables这个值又在高速增加,说明mysql在不断的打开表。也就说明缓存中并没有这些要打开的表。所以说,缓存应该是要增加了。因为如果表在缓存中,那么打开表的时候这两个值是不会增加的。