Home > database > 在谈table_cache

在谈table_cache

在上篇open/close table on mysql中谈到了mysql中打开表的方式:如MyISAM表,每一个客户端线程打开任何一个MyISAM表的数据文件都需要打开一个文件描述符,但如果是索引文件,则可以多个线程共享同一个索引文件的描述符。对于InnoDB的存储引擎,弱化了对文件描述符的需求,表的打开放在了存储引擎上实现,innodb做了一个data dictionary的东西,类似oracle的library cache,每个表打开占用4k空间,用于存放表的元数据(表结构信息,lock等),即使表关闭了,也不会从data dictionary中移去;innodb只需要一个全局的文件描述符(single global file descriptor)用于打开每个ibd文件;对于有几千张表的数据库而言,如果使用的是myisam存储引擎,那么最好将table_cache的值设置的大一些,其设置的方法可以参考global stauts中Open_tables和opened_tables两个参数的值;对于innodb存储引擎的:使用共享方式管理表空间,由于所有的数据都存放在共享表空间中,那么对于文件描述的需求较少;如果使用独占表空间方式管理,则需要的文件描述符较多(可以使用lsof命令来查看文件打开的状况)。

在上面提到的连个状态值外,对于innodb存储引擎来说,打开表是利用存储引擎来实现,open_tables和open_files是两个不相干的状态值(open_files的计算方式中不会将存储引擎打开的表计算到该值中),可以通过show open tables命令查看当前table_cache中缓存的非temporary表。

综上所述,table_cache是在mysql框架上实现的用于缓存文件描述符,当有新的请求时不需要重新的打开,使用结束时也不用立即关闭。

Categories: database Tags:
  1. No comments yet.
  1. No trackbacks yet.
You must be logged in to post a comment.