软件测试 | table_cache的设置
在mysqld中对table_cache参数的定义如下:
这个参数表示数据库用户打开表的缓存数量。每个连接进来,都会至少打开一个表缓存。因此,table_cache与max_connections有关,例如,对于200个并行运行的连接,应该让表的缓存至少有200xN,这里N是可以执行的查询的一个联接中表的最大数量。此外,还需要为临时表和文件保留一些额外的文件描述符。
可以通过检查mysqld的状态变量open_tables和opend_tables确定这个参数是否过小,这两个参数的区别是前者表示当前打开的表缓存数,如果执行FLUSH TABLES操作,则此系统会关闭一些当前没用使用的表缓存而使得此状态值减小;后者表示曾经打开的表缓存数,会一直进行累加,如果执行FLUSH TABLES操作,值不会减少。下面的例子验证了这个过程。
(1)首先清空表缓存,记录两个状态的值:
(2)然后,执行一个SQL,对表t进行查询:
(3)接着再查看这两个参数的值:
(4)可以发现,两个参数值都因为对表t的查询而状态加1。这时,再次执行刚才对表t的查询:
(5)此时这两个参数的值并没有变化,因为表t的描述符已经在此连接中打开过一次,因此保存了表缓存中。因此,状态值“open_tables”对于设置table_cache值有着更有价值的参考。