Acelera el backend de Drupal con $settings['state_cache']
En un sitio grande de Gov Drupal en el que trabajo, /admin/reports/status
y /admin/config
eran lentos. Después de habilitar $settings['state_cache'], las páginas cargaron mucho más rápido. Los editores lo notaron de inmediato.
Si tu área de administración se siente lenta, esto puede ayudar. Drupal realiza muchas lecturas pequeñas de la API de Estado por solicitud, y su almacenamiento en caché reduce los accesos a la base de datos. En Drupal 10.3 puedes activarlo con $settings['state_cache'] = TRUE
en settings.php
. En Drupal 11, el almacenamiento en caché de estado está siempre activado y la configuración se ha eliminado. Si tu sitio almacena una gran cantidad de elementos grandes en Estado, revísalo primero antes de habilitarlo en 10.3.
Qué almacena la API de Estado
Drupal guarda valores pequeños y específicos del sitio en una colección clave-valor llamada state
. Ejemplos: la última hora de cron, indicadores de mantenimiento, interruptores auxiliares utilizados por el núcleo y los módulos. Sin almacenamiento en caché, cada lectura puede acceder a la base de datos.
Por qué state_cache
ayuda
Las pantallas de administración realizan muchas comprobaciones pequeñas. Almacenar estos valores en caché elimina muchas llamadas a la base de datos. El resultado son páginas más rápidas y menor carga en la base de datos. Cambio simple, victoria clara.
Disponibilidad
- Drupal 10.3+: opta por él con
$settings['state_cache']
. - Drupal 11+: activado por defecto; la configuración se eliminó.
Cómo funciona
Drupal carga un valor una vez, lo almacena en caché y lo reutiliza en solicitudes posteriores. Cuando un valor cambia, Drupal actualiza el almacenamiento e invalida la entrada de caché. Las lecturas se mantienen rápidas y los datos correctos.
Habilitar en Drupal 10.3+
Añade esto a settings.php
:
$settings['state_cache'] = TRUE;
Luego, limpia las cachés.
Comprobación rápida antes de habilitar
Si tu sitio guarda demasiados valores o valores demasiado grandes en state
, su almacenamiento en caché puede desperdiciar memoria. Ejecuta esta consulta:
SELECT COUNT(*) AS num_items,
SUM(LENGTH(value)) AS total_bytes
FROM key_value
WHERE collection = 'state';
Puedes ejecutar lo mismo con Drush:
drush sql:query "SELECT COUNT(*) AS num_items, SUM(LENGTH(value)) AS total_bytes FROM key_value WHERE collection = 'state';"
PostgreSQL:
drush sql:query "SELECT COUNT(*) AS num_items, SUM(OCTET_LENGTH(value)) AS total_bytes FROM key_value WHERE collection = 'state';"
Reglas generales:
- num_items hasta aproximadamente 100 y total_bytes alrededor de 100 KB suele estar bien.
- Si ves blobs grandes, muévelos a otro lugar (un contenedor de caché, configuración o una tabla personalizada) antes de habilitarlo.
Problemas que puede aliviar
- Páginas de administración lentas después de iniciar sesión.
- Alta carga en la base de datos durante el trabajo editorial, ejecuciones por lotes o uso intensivo de cron.
- Picos de latencia en servidores de bases de datos compartidos.
Si tu backend de caché es la base de datos
Sí, todavía ayuda. Realizarás menos lecturas de key_value
. Las páginas de administración pueden cargarse más rápido. Pero las lecturas aún acceden a la base de datos, por lo que las ganancias son menores que con Redis o Memcached. Es seguro habilitarlo ahora y planificar una migración a una caché en memoria más adelante.
Buenas combinaciones
- Redis o Memcached para el almacenamiento en caché, de modo que los accesos a estado residan en memoria. Comprueba tu backend de caché en
settings.php
y observa las tasas de aciertos. - Mantén el estado pequeño. Úsalo para indicadores y valores ligeros, no para blobs grandes.
- Mide antes y después. Localmente, prueba Webprofiler o Devel para comparar recuentos de consultas. En producción, usa tu APM.
Advertencias
- Valores de estado muy grandes pueden hinchar la caché. Corrige los datos primero y luego habilita.
- Las limpiezas de caché no eliminan los valores de estado; solo invalidan las copias cacheadas.
- En Drupal 11, no hay nada que configurar. Ya obtienes la ganancia.
Lista de verificación rápida
- Ejecuta la comprobación SQL anterior.
- Recorta cualquier valor sobredimensionado de
state
. - En Drupal 10.3 a 10.x, añade
$settings['state_cache'] = TRUE;
y limpia las cachés. - Confirma menos consultas en las páginas de administración y observa cómo disminuye la carga de la base de datos.
En resumen
Cambio pequeño. Mejora notable para los editores. Habilítalo, pruébalo y disfruta de páginas de administración más rápidas.