2010-07-26 6 views
4

Pour une raison quelconque, des requêtes extrêmement simples, telles que SHOW TABLES, peuvent prendre beaucoup de temps sur ma machine locale.SHOW TABLES absurdly lent dans Rails

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

Si j'exécute la même requête dans dbconsole manuellement, il court dans 0.01s <

En regardant à travers les journaux pour toutes les requêtes en cours d'exécution à long, à part les migrations, ils sont tous SHOW TABLES.

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 avec Server version: 5.1.46 MySQL Community Server (GPL)

eu ce problème on Rails 2 et Rails 3.

+1

Y a-t-il des tables de tables particulièrement grandes? Êtes-vous heureux avec les index sur ceux-ci? – bjg

+1

Pas de grandes tables, tout est indexé. Si tel était le problème, je ne vois pas pourquoi il fonctionnerait mille fois plus vite lorsqu'il est fait directement à travers la console. –

Répondre

1

Essayez de passer à la nouvelle perle de mysql2. Cela pourrait résoudre le problème.

/Carsten

0

Vous pouvez mise en mémoire cache les colonnes:

Dans initializers/some_file.rb faire ceci:

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

Ce sera exécuté lorsque vous lancez le serveur en place, Par conséquent, la première fois que vous exécutez une requête, elle ne sera pas retardée par la requête SHOW TABLES.

Ce n'est pas une solution, bien sûr, il doit y avoir quelque chose de mal avec vos tables, d'ailleurs, je ne l'utilise pas en production, j'utilise cette astuce lorsque je débogue quelque chose dans la console pour éviter Rails pour afficher toutes les requêtes SHOW TABLES.