Terug naar blog
Januari 27, 2026Handleidingen

MySQL-prestaties optimaliseren

Complete gids voor het optimaliseren van MySQL-databaseprestaties: configuratietuning, query-optimalisatie, indexering en monitoring.

MySQL-prestaties optimaliseren

MySQL-prestatieoptimalisatie is cruciaal voor applicaties die grote hoeveelheden data of veel verkeer verwerken. Deze gids behandelt essentiële technieken om MySQL-prestaties te verbeteren, van configuratietuning tot query-optimalisatie.

MySQL-configuratie optimaliseren

Bewerk het MySQL-configuratiebestand om prestaties te optimaliseren op basis van uw serverresources:

bash
# Bewerk MySQL-configuratie (Ubuntu/Debian)
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

# Bewerk MySQL-configuratie (CentOS/RHEL)
sudo nano /etc/my.cnf

# Voeg deze instellingen toe of wijzig ze:
[mysqld]
innodb_buffer_pool_size = 1G
innodb_log_file_size = 256M
max_connections = 200
query_cache_size = 64M
query_cache_type = 1
tmp_table_size = 64M
max_heap_table_size = 64M

# Herstart MySQL
sudo systemctl restart mysql  # Ubuntu/Debian
sudo systemctl restart mysqld   # CentOS/RHEL

InnoDB-optimalisatie

InnoDB is MySQL's standaard opslagengine. Optimaliseer deze voor betere prestaties:

bash
# In /etc/mysql/mysql.conf.d/mysqld.cnf of /etc/my.cnf
[mysqld]
# InnoDB-bufferpool (gebruik 70-80% van beschikbaar RAM)
innodb_buffer_pool_size = 2G

# InnoDB-logbestandsgrootte
innodb_log_file_size = 512M

# InnoDB-flushmethode (voor SSD)
innodb_flush_method = O_DIRECT

# InnoDB I/O-threads
innodb_read_io_threads = 4
innodb_write_io_threads = 4

# InnoDB-flushlog bij transactiecommit
innodb_flush_log_at_trx_commit = 2

Query-cacheconfiguratie

Query-cache kan prestaties verbeteren voor read-heavy workloads (Opmerking: Query-cache is verouderd in MySQL 8.0):

bash
# Voor MySQL 5.7 en eerder
[mysqld]
query_cache_type = 1
query_cache_size = 128M
query_cache_limit = 2M

# Controleer query-cachestatus
mysql> SHOW VARIABLES LIKE 'query_cache%';

# Controleer query-cachestatistieken
mysql> SHOW STATUS LIKE 'Qcache%';

Indexoptimalisatie

Juiste indexering is cruciaal voor queryprestaties:

bash
# Analyseer tabel om indexstatistieken bij te werken
ANALYZE TABLE table_name;

# Controleer ongebruikte indexen
SELECT * FROM sys.schema_unused_indexes;

# Maak index aan
CREATE INDEX idx_column ON table_name(column_name);

# Maak samengestelde index aan
CREATE INDEX idx_multi ON table_name(col1, col2, col3);

# Toon indexen
SHOW INDEXES FROM table_name;

# Verwijder ongebruikte index
DROP INDEX idx_name ON table_name;

Query-optimalisatie

Optimaliseer uw SQL-queries voor betere prestaties:

  • Gebruik EXPLAIN om query-uitvoeringsplannen te analyseren: EXPLAIN SELECT * FROM table WHERE column = 'value'
  • Vermijd SELECT * - selecteer alleen benodigde kolommen
  • Gebruik LIMIT om resultatensets te beperken
  • Gebruik juiste WHERE-clauses met geïndexeerde kolommen
  • Vermijd functies in WHERE-clauses (bijv. WHERE YEAR(date) = 2026 → WHERE date >= '2026-01-01')
  • Gebruik JOINs in plaats van subqueries waar mogelijk
  • Gebruik UNION in plaats van OR voor meerdere voorwaarden waar geschikt

MySQL-prestaties monitoren

bash
# Controleer MySQL-status
mysql> SHOW STATUS;

# Controleer langzame queries
mysql> SHOW VARIABLES LIKE 'slow_query%';

# Schakel langzame query-log in
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 2;

# Controleer proceslijst
mysql> SHOW PROCESSLIST;

# Controleer tabelstatus
mysql> SHOW TABLE STATUS LIKE 'table_name';

# Controleer InnoDB-status
mysql> SHOW ENGINE INNODB STATUS;

Prestatieoptimalisatietips

  • Voer regelmatig OPTIMIZE TABLE uit om tabellen te defragmenteren
  • Monitor langzame query-log en optimaliseer langzame queries
  • Gebruik verbindingspooling om verbindingsoverhead te verminderen
  • Partitioneer grote tabellen op datum of bereik voor betere prestaties
  • Gebruik leesreplica's voor read-heavy workloads
  • Houd MySQL bijgewerkt naar de nieuwste stabiele versie
  • Monitor disk I/O en overweeg SSD/NVMe-opslag te gebruiken
  • Gebruik EXPLAIN ANALYZE (MySQL 8.0+) voor gedetailleerde queryanalyse