Tilbake til blogg
Januar 27, 2026Guider

Hvordan optimalisere MySQL-ytelse

Komplett guide for optimalisering av MySQL-databaseytelse: konfigurasjonsjustering, spørringsoptimalisering, indeksering og overvåking.

Hvordan optimalisere MySQL-ytelse

MySQL-ytelsesoptimalisering er avgjørende for applikasjoner som håndterer store mengder data eller høy trafikk. Denne guiden dekker essensielle teknikker for å forbedre MySQL-ytelse, fra konfigurasjonsjustering til spørringsoptimalisering.

Optimalisere MySQL-konfigurasjon

Rediger MySQL-konfigurasjonsfilen for å optimalisere ytelse basert på serverressursene dine:

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

# Rediger MySQL-konfigurasjon (CentOS/RHEL)
sudo nano /etc/my.cnf

# Legg til eller endre disse innstillingene:
[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

# Start MySQL på nytt
sudo systemctl restart mysql  # Ubuntu/Debian
sudo systemctl restart mysqld   # CentOS/RHEL

InnoDB-optimalisering

InnoDB er MySQLs standard lagringsmotor. Optimaliser den for bedre ytelse:

bash
# I /etc/mysql/mysql.conf.d/mysqld.cnf eller /etc/my.cnf
[mysqld]
# InnoDB buffer pool (bruk 70-80% av tilgjengelig RAM)
innodb_buffer_pool_size = 2G

# InnoDB loggfilstørrelse
innodb_log_file_size = 512M

# InnoDB flush-metode (for SSD)
innodb_flush_method = O_DIRECT

# InnoDB I/O-tråder
innodb_read_io_threads = 4
innodb_write_io_threads = 4

# InnoDB flush logg ved transaksjonscommit
innodb_flush_log_at_trx_commit = 2

Spørringscache-konfigurasjon

Spørringscache kan forbedre ytelse for lese-tunge arbeidsbelastninger (Merk: Spørringscache er utdatert i MySQL 8.0):

bash
# For MySQL 5.7 og tidligere
[mysqld]
query_cache_type = 1
query_cache_size = 128M
query_cache_limit = 2M

# Sjekk spørringscache-status
mysql> SHOW VARIABLES LIKE 'query_cache%';

# Sjekk spørringscache-statistikk
mysql> SHOW STATUS LIKE 'Qcache%';

Indeksoptimalisering

Riktig indeksering er avgjørende for spørringsytelse:

bash
# Analyser tabell for å oppdatere indeksstatistikk
ANALYZE TABLE table_name;

# Sjekk ubrukte indekser
SELECT * FROM sys.schema_unused_indexes;

# Opprett indeks
CREATE INDEX idx_column ON table_name(column_name);

# Opprett sammensatt indeks
CREATE INDEX idx_multi ON table_name(col1, col2, col3);

# Vis indekser
SHOW INDEXES FROM table_name;

# Slett ubrukt indeks
DROP INDEX idx_name ON table_name;

Spørringsoptimalisering

Optimaliser SQL-spørringene dine for bedre ytelse:

  • Bruk EXPLAIN for å analysere spørringsutførelsesplaner: EXPLAIN SELECT * FROM table WHERE column = 'value'
  • Unngå SELECT * - velg bare nødvendige kolonner
  • Bruk LIMIT for å begrense resultatsett
  • Bruk riktige WHERE-klausuler med indekserte kolonner
  • Unngå funksjoner i WHERE-klausuler (f.eks. WHERE YEAR(date) = 2026 → WHERE date >= '2026-01-01')
  • Bruk JOINs i stedet for under-spørringer når mulig
  • Bruk UNION i stedet for OR for flere betingelser når det er passende

Overvåke MySQL-ytelse

bash
# Sjekk MySQL-status
mysql> SHOW STATUS;

# Sjekk langsomme spørringer
mysql> SHOW VARIABLES LIKE 'slow_query%';

# Aktiver langsom spørringslogg
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 2;

# Sjekk prosessliste
mysql> SHOW PROCESSLIST;

# Sjekk tabellstatus
mysql> SHOW TABLE STATUS LIKE 'table_name';

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

Ytelsesoptimaliseringstips

  • Kjør regelmessig OPTIMIZE TABLE for å defragmentere tabeller
  • Overvåk langsom spørringslogg og optimaliser langsomme spørringer
  • Bruk tilkoblingspooling for å redusere tilkoblingsoverhead
  • Partisjoner store tabeller etter dato eller område for bedre ytelse
  • Bruk lesereplikaer for lese-tunge arbeidsbelastninger
  • Hold MySQL oppdatert til den nyeste stabile versjonen
  • Overvåk disk I/O og vurder å bruke SSD/NVMe-lagring
  • Bruk EXPLAIN ANALYZE (MySQL 8.0+) for detaljert spørringsanalyse