Versnel de Drupal backend met $settings['state_cache']
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
- Voer de bovenstaande SQL-controle uit.
- Trim eventuele te grote waarden uit
state
. - Op Drupal 10.3 tot 10.x, voeg
$settings['state_cache'] = TRUE;
toe en wis de caches. - 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.