←Terug naar het blog

Versnel de Drupal backend met $settings['state_cache']

2025-08-13‱6 min leestijd

Op een grote Gov Drupal-site waar ik aan werk, waren /admin/reports/status en /admin/config traag. Na het inschakelen van $settings['state_cache'] laadden de pagina's veel sneller. Editors merkten het onmiddellijk op.

Als uw admin-gebied traag aanvoelt, kan dit helpen. Drupal voert veel kleine State API-lezingen per verzoek uit, en het cachen hiervan vermindert database-aanroepen. In Drupal 10.3 kunt u het inschakelen met $settings['state_cache'] = TRUE in settings.php. In Drupal 11 is state caching altijd ingeschakeld en is de instelling verwijderd. Als uw site een groot aantal grote items in State opslaat, controleer dat dan eerst voordat u het inschakelt in 10.3.

Wat de State API opslaat

Drupal slaat kleine, sitespecifieke waarden op in een key-value collectie genaamd state. Voorbeelden: laatste cron-tijd, onderhoudsvlaggen, hulptoggles gebruikt door core en modules. Zonder caching kan elke lezing de database raken.

Waarom state_cache helpt

Admin-schermen voeren veel kleine controles uit. Het cachen van deze waarden verwijdert veel database-aanroepen. Het resultaat is snellere pagina's en minder databasebelasting. Simpele wijziging, duidelijk voordeel.

Beschikbaarheid

  • Drupal 10.3+: opt-in met $settings['state_cache'].
  • Drupal 11+: standaard ingeschakeld; de instelling is verwijderd.

Hoe het werkt

Drupal laadt een waarde één keer, slaat deze op in de cache en hergebruikt deze bij latere verzoeken. Wanneer een waarde verandert, werkt Drupal de opslag bij en ongeldigt de cache-vermelding. Lezingen blijven snel en gegevens blijven correct.

Inschakelen in Drupal 10.3+

Voeg dit toe aan settings.php:

$settings['state_cache'] = TRUE;

Wis vervolgens de caches.

Snelle controle voor inschakeling

Als uw site te veel of te grote waarden in state bewaart, kan het cachen ervan geheugen verspillen. Voer deze query uit:

SELECT COUNT(*) AS num_items,
       SUM(LENGTH(value)) AS total_bytes
FROM key_value
WHERE collection = 'state';

U kunt hetzelfde uitvoeren met 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';"

Vuistregels:

  • num_items tot ongeveer 100 en total_bytes rond de 100 KB is meestal prima.
  • Als u grote blobs ziet, verplaats deze dan ergens anders (een cache-bak, configuratie of een aangepaste tabel) voordat u inschakelt.

Problemen die dit kan verlichten

  • Trage adminpagina's na het inloggen.
  • Hoge databasebelasting tijdens redactioneel werk, batch-runs of intensief cron-gebruik.
  • Latentiespieken op gedeelde databaseservers.

Als uw cache backend de database is

Ja, het helpt nog steeds. U zult minder lezingen uit key_value doen. Adminpagina's laden mogelijk sneller. Maar lezingen raken nog steeds de database, dus de winst is kleiner dan met Redis of Memcached. Het is veilig om het nu in te schakelen en later over te stappen op een in-memory cache.

Goede combinaties

  • Redis of Memcached voor cacheopslag, zodat state-aanroepen in het geheugen plaatsvinden. Controleer uw cache backend in settings.php en houd de hit ratios bij.
  • Houd state klein. Gebruik het voor vlaggen en lichtgewicht waarden, niet voor grote blobs.
  • Meet voor en na. Probeer lokaal Webprofiler of Devel om query-aantallen te vergelijken. Gebruik in productie uw APM.

Voorbehouden

  • Zeer grote state-waarden kunnen de cache opblazen. Los de gegevens eerst op, schakel dan in.
  • Cache-opschoning verwijdert geen state-waarden; het ongeldigt alleen gecachte kopieĂ«n.
  • Op Drupal 11 is er niets te configureren. U profiteert al van de winst.

Korte checklist

  1. Voer de bovenstaande SQL-controle uit.
  2. Trim eventuele te grote waarden uit state.
  3. Op Drupal 10.3 tot 10.x, voeg $settings['state_cache'] = TRUE; toe en wis de caches.
  4. Bevestig minder queries op adminpagina's en zie de databasebelasting dalen.

Conclusie

Kleine wijziging. Merkbare verbetering voor editors. Schakel het in, test en geniet van snellere adminpagina's.