MariaDB Slow Query Indexing voor Webshops met 50.000+ Producten
Hoe u ontbrekende samengestelde indexen in wp_postmeta en WooCommerce tabellen toevoegt om database-blokkades van 3.200ms terug te brengen naar 18ms.
Wanneer een Nederlandse WooCommerce- of custom webshop groeit van 1.000 naar meer dan 50.000 producten, begint de relationele database (MariaDB 10.6+ of MySQL 8) te kraken. Het klassieke WordPress datamodel slaat productattributen (prijzen, voorraad, SKU, afmetingen) op als losse rijen in de wp_postmeta tabel.
Bij een catalogus van 50.000 producten bevat de postmeta tabel al snel 2 tot 5 miljoen rijen. Zonder gespecialiseerde samengestelde indexen (composite indexes) voert MariaDB bij elke filteropdracht een volledige tabelscan uit (Full Table Scan).
Hier is het forensische stappenplan om trage queries te lokaliseren en direct te elimineren.
1. Diagnose: Slow Query Log Inschakelen
Activeer tijdelijk het Slow Query Log om alle databasevragen die langer dan 0,5 seconde duren vast te leggen:
# In /etc/mysql/mariadb.conf.d/50-server.cnf
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 0.5
log_queries_not_using_indexes = 1
Herstart MariaDB en analyseer het logbestand na enkele uren met mysqldumpslow:
sudo systemctl restart mariadb
mysqldumpslow -s t -t 10 /var/log/mysql/slow.log
2. De Oorzaak: Ontbrekende Composite Index in wp_postmeta
De standaard WordPress index op wp_postmeta dekt alleen post_id en meta_key afzonderlijk. Bij queries die filteren op een specifieke meta_key én sorteren op meta_value (bijvoorbeeld sorteren op prijs) moet de database miljoenen rijen in een tijdelijke schijftabel sorteren (Using temporary; Using filesort).
Voeg een geoptimaliseerde samengestelde index toe via de MySQL CLI:
-- Controleer eerst bestaande indexen
SHOW INDEX FROM wp_postmeta;
-- Voeg een samengestelde index toe voor key + value combinaties
ALTER TABLE wp_postmeta ADD INDEX meta_key_value_composite (meta_key(191), meta_value(100));
-- Optimaliseer ook zoekopdrachten op post_id in combinatie met meta_key
ALTER TABLE wp_postmeta ADD INDEX post_id_meta_key (post_id, meta_key(191));
3. High-Performance Order Storage (HPOS) Activeren
Sinds WooCommerce 8.2 biedt de software High-Performance Order Storage (HPOS) aan. Dit verhuist alle bestellingen uit de logge wp_posts en wp_postmeta tabellen naar dedicated, gestroomlijnde tabellen (wp_wc_orders).
In het beheerpaneel onder WooCommerce > Instellingen > Geavanceerd > Functies:
- Activeer: High-Performance Order Storage inschakelen.
- Synchroniseer bestaande bestellingen.
- Schakel over naar Alleen HPOS gebruiken.
Dit halveert direct de omvang van uw actieve postmeta tabel!
4. Query Cache Veroudering: Thread Cache & Query Buffers
Zorg ervoor dat MariaDB voldoende thread buffers toewijst:
# /etc/mysql/mariadb.conf.d/99-performance.cnf
[mysqld]
# Buffergroottes
table_open_cache = 8000
table_definition_cache = 4000
thread_cache_size = 64
# Vermijd onnodige disk writes voor tijdelijke tabellen
tmp_table_size = 256M
max_heap_table_size = 256M
5. Resultaten
| Database Metriek | Vóór Indexering (50.000 SKU’s) | Na Samengestelde Indexen + HPOS |
|---|---|---|
| Prijsfilter Query Duur | 3.240 ms | 18 ms (-99%) |
| Disk I/O Belasting | Continu 100% SSD spikes | Gemiddeld 4% |
| Checkout Order Opslag | 1.850 ms | 85 ms |
| Googlebot Crawl Snelheid | 450 pagina’s / dag | 14.000 pagina’s / dag |
Geen haperende categoriefilters meer, maar een directe, soepele winkelervaring voor uw klanten.
🔗 Onderling Verbonden Technische Diagnoses & Architectuur-Mesh:
Prestatieknelpunten op webservers en e-commerceplatformen staan zelden op zichzelf. Serverrespons, database-indexering en checkout-scripts zijn direct verweven:
- LiteSpeed Cache ESI-Pockets voor Gepersonaliseerde Winkelmanden: Dynamische winkelwagenblokken cachen zonder bezoekerstransacties te verstoren.
- Mollie & iDEAL Checkout INP Vertraging Verhelpen: Optimaliseer de interactiesnelheid tijdens de betaalkeuze op mobiele apparaten.
- PostNL Postcode-Adres Autocomplete Latency Oplossen: Voorkom invoervertragingen bij checkout-formulieren in Nederland.
Directe implementatie nodig op uw productieserver?
Chirurgische herconfiguratie van servers, database-indexering of JavaScript-optimalisaties op live productiesystemen brengen downtime-risico's met zich mee. Als u de voorkeur geeft aan een risicovrije oplossing zonder uitval, voer ik deze patch direct uit op uw origin stack onder ons Result-First, Fair-Pay model.
Direct technische hulp nodig bij een actieve fout?
Stuur uw terminal-log, stack trace of server-URL op elk moment door — 7 dagen per week. Puur asynchrone tekst-triage direct met Senior Systems Auditor Damar. Geen ongevraagde telefoongesprekken.