La tabla logstore_standard_log en Moodle puede crecer rápidamente, especialmente en instalaciones con muchos usuarios o actividad. Esta tabla registra todas las acciones y eventos del sistema, por lo que su tamaño puede impactar el rendimiento de la base de datos. Aquí tienes estrategias para optimizarla:
1. Configurar la retención de registros
Moodle permite configurar la duración del almacenamiento de registros en la base de datos. Reducir el período de retención puede disminuir significativamente el tamaño de la tabla:
Ve a Administración del sitio > Informes > Gestión de logs.
Ajusta la configuración de retención:
Cambia el valor de Guardar logs durante a un período razonable (por ejemplo, 3 meses o 1 año, dependiendo de tus necesidades). Si tu tabla ocupa mucho espacio, selecciona un período más corto (por ejemplo, 1 mes o 3 meses).
Guarda los cambios.
Esto eliminará automáticamente los registros antiguos cuando se ejecute la tarea cron.
2. Ejecutar tareas cron regularmente
Asegúrate de que el cron de Moodle esté funcionando correctamente para ejecutar las tareas de limpieza configuradas en el paso anterior:
Verifica la configuración del cron en tu servidor.
Asegúrate de que se ejecute al menos cada 5 minutos (o 1 minuto si tienes un servidor privado/dedicado:
*/5 * * * * php -q /ruta/a/tu/moodle/admin/cli/cron.php >/dev/null 2>&1
El cron es el encargado de limpiar registros antiguos automáticamente. Para verificarlo:
Accede al panel de administración de Moodle.
Ve a Administración del sitio > Servidor > Tareas programadas.
Busca la tarea relacionada con "Log store cleanup" (limpieza de logs) y verifica que esté activa y programada.
3. Limpiar manualmente desde Moodle
Si la tabla ya es demasiado grande, puedes realizar una limpieza manual desde Moodle sin usar comandos SQL:
Ve a Administración del sitio > Informes > Gestión de logs.
Usa el filtro para buscar logs antiguos (por ejemplo, por fecha o eventos específicos).
Si hay una opción para eliminar registros en la interfaz (dependiendo de tu versión de Moodle), úsala.
Si no hay una opción visible, pasa al siguiente paso.
4. Indexación de la tabla (OJO: Hacer backup de la base datos antes)
Si la tabla es muy grande, añadir índices a las columnas más utilizadas en consultas puede mejorar el rendimiento:
Identifica las consultas más frecuentes sobre esta tabla (por ejemplo, consultas que incluyen filtros por eventname, userid, courseid, etc.).
Añade índices a las columnas que aparecen en los filtros:
CREATE INDEX idx_eventname ON logstore_standard_log (eventname); CREATE INDEX idx_userid ON logstore_standard_log (userid); CREATE INDEX idx_courseid ON logstore_standard_log (courseid);
Esto reduce el tiempo de ejecución de consultas.
5. Particionar la tabla (OJO: Hacer backup de la base datos antes)
Para instalaciones muy grandes, puedes considerar particionar la tabla por rango de fechas. Esto divide los datos en fragmentos más pequeños, mejorando el rendimiento de consultas y operaciones de mantenimiento:
Identifica un esquema de partición razonable (por ejemplo, mensual o anual).
Crea particiones usando MySQL o PostgreSQL (según tu base de datos).
En MySQL:
ALTER TABLE logstore_standard_log PARTITION BY RANGE (UNIX_TIMESTAMP(timecreated)) ( PARTITION p2024_01 VALUES LESS THAN (UNIX_TIMESTAMP('2024-02-01')), PARTITION p2024_02 VALUES LESS THAN (UNIX_TIMESTAMP('2024-03-01')), ... PARTITION pmax VALUES LESS THAN MAXVALUE );6. Archivar registros antiguos (OJO: Hacer backup de la base datos antes)
Si necesitas conservar registros pero no requieren consulta frecuente, puedes mover los datos antiguos a una tabla de archivo:
Crea una tabla para los registros archivados:
CREATE TABLE logstore_standard_log_archive LIKE logstore_standard_log;
Mueve los datos antiguos:
INSERT INTO logstore_standard_log_archive SELECT * FROM logstore_standard_log WHERE timecreated < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 1 YEAR)); DELETE FROM logstore_standard_log WHERE timecreated < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 1 YEAR));
7. Optimizar la tabla después de limpiar datos (OJO: Hacer backup de la base datos antes)
Después de borrar o archivar registros, optimiza la tabla para recuperar espacio (debes poner el prefijo de tu base de datos de Moodle que suele ser "mdl"):
OPTIMIZE TABLE logstore_standard_log;
Estas medidas pueden ayudarte a gestionar más eficientemente la tabla logstore_standard_log y mejorar el rendimiento de Moodle.
