在MySQL中打开表?

对于MySQL,我有以下表格:

[--] Data in MyISAM tables: 110M (Tables: 254) [--] Data in InnoDB tables: 32M (Tables: 134) [--] Data in MEMORY tables: 0B (Tables: 3) 

 [!!] Table cache hit rate: 19% (400 open / 2K opened) 

我把400作为表caching,因为我有不到400个表。 这是如何工作,我该怎么办?

请参阅打开和closures表上的MySQL页面

MySQL是multithreading的,因此可能有很多客户端同时为给定的表发出查询。 为了最小化同一个表上具有不同状态的多个客户端会话的问题,每个并发会话都独立地打开该表。

table_cache与max_connections有关。 例如,对于200个并发运行连接,您应该有一个至less为200×N的表caching大小,其中N是您执行的任何查询中每个连接的最大表数量。 您还必须为临时表和文件保留一些额外的文件描述符。

您可以通过检查mysqld状态variablesOpened_tables来确定您的表caching是否太小,该variables指示自服务器启动以来的表打开操作数:

 SHOW GLOBAL STATUS LIKE 'Opened_tables'; 

如果值非常大或快速增加,即使您没有发出多个FLUSH TABLES语句,也应该增加表caching大小。