2010-07-26 54 views
4

由于某些原因,极其简单的查询(如SHOW TABLES)可能会在本地计算机上花费很长时间。显示表在轨道上荒谬缓慢

# line from log/development.log 
SQL (955.1ms) SHOW TABLES 

如果我在DBCONSOLE手动执行相同的查询,它运行在< 0.01秒

通过日志对于任何长时间运行的查询来看,除了移民,他们都表现出表。

SQL (170.6ms) SHOW TABLES 
    SQL (165.7ms) SHOW TABLES 
    SQL (166.1ms) SHOW TABLES 
    SQL (176.9ms) SHOW TABLES 
    SQL (166.1ms) SHOW TABLES 
    SQL (273.7ms) SHOW TABLES 
    SQL (165.9ms) SHOW TABLES 
    SQL (145.6ms) SHOW TABLES 
    SQL (142.8ms) SHOW TABLES 
    SQL (165.8ms) SHOW TABLES 
    SQL (165.9ms) SHOW TABLES 
    SQL (166.1ms) SHOW TABLES 
    SQL (199.2ms) SHOW TABLES 
    SQL (155.0ms) SHOW TABLES 
    SQL (143.7ms) SHOW TABLES 
    SQL (143.4ms) SHOW TABLES 
    SQL (153.1ms) SHOW TABLES 
    SQL (354.5ms) SHOW TABLES 
    SQL (210.3ms) SHOW TABLES 
    SQL (1060.0ms) SHOW TABLES 
    SQL (854.7ms) SHOW TABLES 
    SQL (254.4ms) SHOW TABLES 

运行Mac OS X与Server version: 5.1.46 MySQL Community Server (GPL)

对梁2个Rails这个问题3.

+1

那里有特别大的表格吗?你对这些指标感到满意吗? – bjg 2010-07-26 21:16:27

+1

没有大表,一切都被索引。如果这是问题,我不明白为什么直接通过控制台执行速度会快上千倍。 – 2010-07-27 05:14:39

回答

1

尝试切换到新的mysql2宝石。这可能会解决问题。

/卡斯滕

0

你可以试试 '缓存' 列:

在初始化/ some_file.rb做到这一点:

User.columns 
OtherModel.columns 
and so on... 

当你火的服务器最多这将被执行,所以第一次执行查询时,它不会被SHOW TABLES查询延迟。

这不是一个解决方案,当然,你的表格肯定有什么问题,另外,我不在生产中使用它,当我在控制台中调试某些东西时使用这个技巧来避免Rails显示所有SHOW TABLES查询。