Las tablas de caché de Drupal tienen un límite por defecto de 5000 líneas por tabla (desde Drupal 8.4.0). Ref* https://api.drupal.org/api/drupal/core!core.api.php/group/cache/10#configuration
Pero este límite no está forzado o fijado de una manera inflexible, si no que se aplica después de correr CRON. Si por ejemplo tenemos el límite de 5000 líneas por defecto y en el transcurso del día estas líneas pueden crecer hasta 10000 líneas o más en la base de datos, al correr CRON estas se limitarán a solo 5000 líneas y el resto serán borradas.
En la práctica si no se corre el CRON ó en el periodo de tiempo entre ejecuciones de CRON, las tablas de caché podrían crecer indiscriminadamente. Se ha detectado un tipo de ataque usando parámetros en la ruta (query parameters). Si por ejemplo un usuario hace un request a la ruta "http://example.com/node/1/?random=123" se guardará en la tabla "cache_page" una línea con esta ruta, si el mismo usuario u otro hacen otra request a la misma ruta pero con un parámetro diferente por ejemplo, "http://example.com/node/1/?random=1234" se creará otra línea con esa ruta en la tabla cache_page, así es como el caché puede crecer a varios GBs de tamaño.
Para sobrescribir este límite a otro que queramos, deberemos agregar la siguiente línea al settings.php:
$settings['database_cache_max_rows']['default'] = 2000;
La línea superior limita a 2000 las líneas de caché que se guardan en la base de datos (de todas las tablas de caché).
También podremos limitar un cache bin (tabla) específicamente, por ejemplo:
$settings['database_cache_max_rows']['bins']['page'] = 100;
Esta línea limita la tabla cache_page a 100 líneas.
Además de estas configuraciones de Drupal que son paliativas para el problema. Se ha encontrado un módulo contribuido que ayuda a que la tabla “cache_page” no crezca de forma indiscriminada, Page Cache Query Ignore
https://www.drupal.org/project/page_cache_query_ignore este módulo nos permite incluir o excluir parámetros de nuestras rutas, en nuestro caso elegiremos, incluir y en el cajón "Query parameters" pondremos un parámetro único y que sea virtualmente imposible de replicar, así solo se guardaran en la tabla las requests que contengan dicho parámetro. Cabe mencionar que esta exclusión en la tabla de “cache_page”, no afecta el caché de las demás rutas canónicas que serán guardadas normalmente.
Me pareció interesante el artículo
Añadir nuevo comentario