table_open和table_definition了解

陈弘厚
2023-12-01
 table_open和table_definition了解
 
 官网5.5解释:
 open_files_limit + table_open_cache 
 The number of open tables for all threads. Increasing this value increases the number of file 
 descriptors that mysqld requires. 
 
 --打开的表缓存数量,缓存相关表.frm文件的解析结果,加上一些其他数据(和涉及的引擎有关系),如MyISAM,表的数据和
 
 索引的文件描述符。
 
 打开的表(session级别)是每个线程,每个表使用,但表定义(global)是全局的,可以被所有连接有效的共享.
 
 注意,状态参数,Opened_tables很大或在增长,可能表缓存不够大,可以增加table_open_cache,但是,如果经常
 
 需要创建和删除临时表,也会导致该参数值不停的增长.
 
 如果遇到MySQL无法打开更多文件的错误,可能需要增加MySQL打开的文件的数量,my.cnf添加:open_files_limit.
 
 表缓存缺点:当服务器有很多MyISAM表时,可能导致关机时间较长,因关机前索引块必须完成刷新,表都必须标示
 
 为不再打开.
 
 表缓存优点:占用内存不多,虽然创建一个新线程或打开一个新的表,相对其他MySQL操作代价不高,但是他们的开销
 是会累加的,所以,缓存表有时,会提升效率. 
 
 该参数对InnoDB引擎重要性较小,不依赖它做很多事,如,文件描述符,InnoDB引擎有自己的表缓存版本(table_
 definition_cache)
 
 innodb_open_files + table_definition_cache 
 The number of table definitions (from .frm files) that can be stored in the definition cache. 
 If you use a large number of tables, you can create a large table definition cache to speed up
 opening of tables. The table definition cache takes less space and does not use file descriptors, 
 unlike the normal table cache. The minimum and default values are both 400. 
 
 --InnoDB自己的缓存,表定义缓存(数据字典)数量,当InnoDB打开一张表,就增加了一个对应的对象到数据字典,每张表
 
 占用4KB或更多内存,但是,当表关闭的时候,不会从数据字典(内存)中移除它们。随时间推移,可能发生OOM;另一个问题,
 
 第一次打开表时会计算统计信息,需要很多IO操作,代价高,因表的每次统计信息没有永久缓存,每次打开表重新计算,或
 
 打开表之后,隔段时间或预订触发事件(改变表的内容或查询information_schema表,等),也会重新计算统计信息.如果有
 
 很多表,服务器可能花费数小时来启动完成预热,这会花费更多时间在等待IO操作,不做其他事.
 
 MySQLd启动之后,InnoDB统计操作可能对服务器和一些查询产生冲击.关闭:innodb_stats_on_memtadata,避免耗时的表统计
 
 信息刷新.
 
 innodb_open_files控制打开.ibd文件的数量.
 
 MyISAM打开文件方式:用表缓存来持有打开表的文件描述符.
 
 InnoDB为每个.ibd文件使用单个,全局的文件描述符(是否开启,innodb_file_per_table),可以适当把innodb_open_files设置
 
 大点,使服务器可以保持所有的.ibd文件同时打开.
 
 
个人观点,综上所述,对于MyISAM引擎,使用table_open_cache+open_files_limit;


而Innodb引擎,使用table_definition_cache+innodb_open_files; 
  
 
 参阅:
 http://www.percona.com/blog/2009/11/18/how-innodb_open_files-affects-performance/
 http://www.azumi.cc/9/97248.html
 http://www.percona.com/blog/2009/11/16/table_cache-negative-scalability/
 高性能MySQL 第3版,P347,348,349
 
 

 类似资料: