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:

  1. Activeer: High-Performance Order Storage inschakelen.
  2. Synchroniseer bestaande bestellingen.
  3. 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:

🛠️ Engineering Next Step

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.

Gerichte triage aanvragen →
✓ Betaal alleen bij resultaat•✓ Geen downtime risico•✓ Directe uitvoering door engineer
Damar Nurvianto - Lead Systems Auditor
💬 Directe Technische Desk • WhatsApp
Damar Nurvianto • Lead Systems Auditor

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.

Stuur Log via WhatsApp →Drop Log 24/7 • No Calls