Magento Mysql调优 - 表缓存

时间:2012-10-05 11:14:36

标签: mysql magento

我正在尝试调整我的Magento数据库以获得最佳性能。

我在4GB RAM,8CPU核心虚拟机上运行nginx,php-fpm和mysql,内存为4GB。

我已经运行了Mysql Tuning Primer,除了我的Table Cache之外,一切看起来都很好:

TABLE CACHE
Current table_open_cache = 1000 tables
Current table_definition_cache = 400 tables
You have a total of 2510 tables
You have 1000 open tables.
Current table_cache hit rate is 3%
, while 100% of your table cache is in use
You should probably increase your table_cache
You should probably increase your table_definition_cache value.

和mysqltuner

[!!] Table cache hit rate: 9% (1K open / 10K opened)
[!!] Query cache efficiency: 0.0% (0 cached / 209 selects)

my.cnf文件中的相关设置:

table_cache            = 1000
query_cache_limit = 1M
query_cache_size        = 64M

问题是,无论我将table_cache增加到什么 - 它似乎几乎立即被消耗掉了。这对Magento来说是正常的吗?看起来异常高?

有没有人知道我可以采取哪些措施来改善这一点?

谢谢,

1 个答案:

答案 0 :(得分:1)

检查MySQL配置的查询缓存类型设置:

http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html#sysvar_query_cache_type

如果将其设置为0或2,则它不会缓存任何查询,也不会缓存您专门要求缓存的查询。这意味着Magento必须明确要求缓存的查询结果(我不确定是否这样做)。如果将其设置为1,则它将缓存除明确要求不进行查询缓存的查询之外的所有查询。

表缓存是指潜在的打开文件指针。它可以相当快地消耗,并且只需根据需要滚动未使用的条目。来自MySQL's documentation

  

table_cache和max_connections系统变量会影响   服务器保持打开的最大文件数。如果你增加一个或   这两个值,你可能会遇到你的限制   操作系统对每个进程数量的打开文件描述符。   许多操作系统允许您增加打开文件限制,   虽然该方法因系统而异。咨询你的   操作系统文档,以确定是否可能   增加限制以及如何操作。

     

table_cache与max_connections有关。例如,200   并发运行连接,您应该具有表缓存大小   至少200 * N,其中N是每个连接的最大表数   您执行的任何查询。你还必须预留一些额外费用   临时表和文件的文件描述符。

     

确保您的操作系统可以处理打开的数量   table_cache设置隐含的文件描述符。如果table_cache是   设置得太高,MySQL可能会耗尽文件描述符并拒绝   连接,无法执行查询,并且非常不可靠。你也是   必须考虑到MyISAM存储引擎需要两个   每个唯一打开表的文件描述符。你可以增加   MySQL使用的文件描述符数量    - mysqld的--open-files-limit启动选项。参见第C.5.2.18节,“未找到'文件'和类似错误”。

     

打开表的缓存保持在table_cache条目的级别。   默认值为64;这可以使用--table_cache进行更改   mysqld的选项。请注意,MySQL可能会暂时打开更多表   比这更能执行查询。

     

MySQL关闭一个未使用的表并将其从表缓存中删除   以下情况:

     

当缓存已满并且线程尝试打开不是的表时   在缓存中。

     

当缓存包含多个table_cache条目和一个表时   任何线程都不再使用缓存。

     

发生表格刷新操作时。这发生在有人的时候   发出FLUSH TABLES语句或执行mysqladmin flush-tables   或者mysqladmin refresh命令。

     

当表缓存填满时,服务器使用以下过程   找到要使用的缓存条目:

     

目前尚未使用的表将从以下开始发布   最近最少使用的表。

     

如果需要打开一个新表,但缓存已满且没有表   可以释放,缓存根据需要临时扩展。什么时候   缓存处于临时扩展状态,表来自a   用于未使用的状态,表被关闭并从缓存中释放。