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.