标题:MySQL中Table Cache的相关优化 出处:沧海一粟 时间:Fri, 18 Mar 2011 13:46:13 +0000 作者:jed 地址:http://www.dzhope.com/post/770/ 内容: MySQL打开表的相关机制:在MySQL中每个线程都是独立打开自己需要的表的文件描述符,而不是通过共享已经打开的表的文件描述符。针对不同的存储引擎可能有不同的处理方式。如MyISAM表,每一个客户端线程打开任何一个MyISAM表的数据文件都哟啊打开一个文件描述符,但如果是索引文件,则可以多个线程共享同一个索引文件的描述符。对于InnoDB的存储引擎,如果使用的是共享表空间来存储数据,则打开的文件描述符就比较少,但如果使用的是独享表空间方式则打开的文件描述符则较多。 MySQL在系统中实现了一个Table Cache机制,和Thread Cache机制有点类似。主要就是Cache打开所有表文件的描述符,当有新的请求时不需要重新的打开,使用结束时也不用立即关闭。 查看table_cache的设置和当前系统中的使用状况: show variables like 'table_cache'; 点击在新窗口中浏览此图片 http://www.dzhope.com/attachment.php?fid=55 show status like 'open_tables'; 点击在新窗口中浏览此图片 http://www.dzhope.com/attachment.php?fid=56 显示系统设置的table_cache为764个,在该MySQL中,Table Cache内可以缓存764个打开文件的描述符;当前系统中打开的描述符仅有0个。 此外还有Sort Buffer、Join Buffer和Read Buffer等 show variables like '%buffer%'; 每个Thread都会创建自己独立的Buffer,而不是整个系统共享的Buffer,不要因为设置过大而造成系统内存不足。 摘自:《MySQL性能调优与架构设计》 Generated by Bo-blog 2.1.1 Release