A partir de hoy mismo inauguramos una serie de posts sobre optimización de ActiveRecord, con dos objetivos principalmente:
- que se os quede grabado a fuego que no hay que fiarse y dejarse seducir por la sintaxis tan "Ruby" y que es necesario revisar las consultas en las que se traducen las sentencias de ActiveRecord
- mostrar algunos trucos, plugins, enlaces y demás para que esta labor sea lo más eficaz posible
De momento, aquí van una serie de consejos:
El log es tu amigo
Nunca, nunca, nunca dejes de revisar el log de la aplicación por cada nuevo método que programes.
Los logs están en nombredelproyecto/log, y tienes uno para cada entorno de ejecución. El de desarrollo, que es el que vamos a estar vigilando constantemente, además de las peticiones a la aplicación con sus parámetros y los tiempos de respuesta, incluye qué consultas SQL se han ejecutado durante la ejecución.
Para cada consulta, se incluye el tiempo que le ha llevado al motor de base de datos.
Es bastante interesante revisarlas todas, ver cuáles han tardado más de la cuenta, y sobretodo, tener en cuenta que los tiempos que ahí se muestran son un orden de magnitud menores que los que se obtienen en una aplicación en producción (siempre que tengáis un número alto de visitantes, y por tanto, de peticiones concurrentes).
Plugin: query trace
Query Trace, un plugin de Rails que te indica en que línea de qué controlador se realiza cada consulta SQL.
Plugin: rows logger
Rows logger, que indica cada consulta SQL cuántas filas o registros devuelve. Este es uno de los errores más típicos y un error muy común: una consulta que devuelve cientos o miles de registros.
Por cierto, que el anterior plugin y este son incompatibles: si instalamos los dos, query trace quedará como anulado.
Más...
Esto es sólo el principio de una serie de posts que no serán más que pequeñas recetas, así que pronto más y mejor.

20 Ene 2007 | 10:49 PM
Yeah!
23 Ene 2007 | 07:29 PM
Yo aún diría más, el log tiene que ser tu compañero de viaje en cada aplicación, y aun así acabas haciendo alguna que otra cagada.
24 Ene 2007 | 01:28 PM
Los que trabajamos con linux creo que tenemos bastante internalizado el uso de los logs. Yo tengo siempre una consola con los mensajes de Webrick (va bien para depurar las vistas) y otra con el archivo development.log redireccionado al temrminal, de esta manera no tengo que editar cada vez el archivo sinó que va apareciendo el contenido del log por la pantalla. Realmente tienes razón en que hay que comprobar que esta haciendo Ruby realmente ya que podemos habernos euiqvocado y no notarlo sino es con los logs.