Tornar al blog
Gener 27, 2026Guies

Com optimitzar el rendiment de MySQL

Guia completa per optimitzar el rendiment de la base de dades MySQL: ajust de configuració, optimització de consultes, indexació i supervisió.

Com optimitzar el rendiment de MySQL

L'optimització del rendiment de MySQL és crucial per a aplicacions que gestionen grans quantitats de dades o alt trànsit. Aquesta guia cobreix tècniques essencials per millorar el rendiment de MySQL, des de l'ajust de configuració fins a l'optimització de consultes.

Optimitzar la configuració de MySQL

Editeu el fitxer de configuració de MySQL per optimitzar el rendiment segons els recursos del vostre servidor:

bash
# Editar configuració de MySQL (Ubuntu/Debian)
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

# Editar configuració de MySQL (CentOS/RHEL)
sudo nano /etc/my.cnf

# Afegir o modificar aquestes configuracions:
[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

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

Optimització d'InnoDB

InnoDB és el motor d'emmagatzematge per defecte de MySQL. Optimitzeu-lo per obtenir millor rendiment:

bash
# A /etc/mysql/mysql.conf.d/mysqld.cnf o /etc/my.cnf
[mysqld]
# Pool de memòria intermèdia InnoDB (utilitzeu 70-80% de la RAM disponible)
innodb_buffer_pool_size = 2G

# Mida del fitxer de registre InnoDB
innodb_log_file_size = 512M

# Mètode de buidatge InnoDB (per a SSD)
innodb_flush_method = O_DIRECT

# Filaments I/O d'InnoDB
innodb_read_io_threads = 4
innodb_write_io_threads = 4

# Buidatge del registre InnoDB en la confirmació de transacció
innodb_flush_log_at_trx_commit = 2

Configuració de la memòria cau de consultes

La memòria cau de consultes pot millorar el rendiment per a càrregues de treball amb moltes lectures (Nota: La memòria cau de consultes està obsoleta a MySQL 8.0):

bash
# Per a MySQL 5.7 i anteriors
[mysqld]
query_cache_type = 1
query_cache_size = 128M
query_cache_limit = 2M

# Comprovar l'estat de la memòria cau de consultes
mysql> SHOW VARIABLES LIKE 'query_cache%';

# Comprovar estadístiques de la memòria cau de consultes
mysql> SHOW STATUS LIKE 'Qcache%';

Optimització d'índexs

La indexació adequada és crucial per al rendiment de les consultes:

bash
# Analitzar taula per actualitzar estadístiques d'índexs
ANALYZE TABLE table_name;

# Comprovar índexs no utilitzats
SELECT * FROM sys.schema_unused_indexes;

# Crear índex
CREATE INDEX idx_column ON table_name(column_name);

# Crear índex compost
CREATE INDEX idx_multi ON table_name(col1, col2, col3);

# Mostrar índexs
SHOW INDEXES FROM table_name;

# Eliminar índex no utilitzat
DROP INDEX idx_name ON table_name;

Optimització de consultes

Optimitzeu les vostres consultes SQL per obtenir millor rendiment:

  • Utilitzeu EXPLAIN per analitzar plans d'execució de consultes: EXPLAIN SELECT * FROM table WHERE column = 'value'
  • Eviteu SELECT * - seleccioneu només les columnes necessàries
  • Utilitzeu LIMIT per restringir conjunts de resultats
  • Utilitzeu clàusules WHERE adequades amb columnes indexades
  • Eviteu funcions a les clàusules WHERE (p. ex., WHERE YEAR(date) = 2026 → WHERE date >= '2026-01-01')
  • Utilitzeu JOINs en lloc de subconsultes quan sigui possible
  • Utilitzeu UNION en lloc de OR per a múltiples condicions quan sigui apropiat

Supervisar el rendiment de MySQL

bash
# Comprovar l'estat de MySQL
mysql> SHOW STATUS;

# Comprovar consultes lentes
mysql> SHOW VARIABLES LIKE 'slow_query%';

# Habilitar registre de consultes lentes
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 2;

# Comprovar llista de processos
mysql> SHOW PROCESSLIST;

# Comprovar estat de la taula
mysql> SHOW TABLE STATUS LIKE 'table_name';

# Comprovar estat d'InnoDB
mysql> SHOW ENGINE INNODB STATUS;

Consells d'optimització del rendiment

  • Executeu OPTIMIZE TABLE regularment per desfragmentar taules
  • Superviseu el registre de consultes lentes i optimitzeu consultes lentes
  • Utilitzeu agrupació de connexions per reduir la sobrecàrrega de connexions
  • Particioneu taules grans per data o rang per obtenir millor rendiment
  • Utilitzeu rèpliques de lectura per a càrregues de treball amb moltes lectures
  • Mantingueu MySQL actualitzat a la darrera versió estable
  • Superviseu l'I/O del disc i considereu l'ús d'emmagatzematge SSD/NVMe
  • Utilitzeu EXPLAIN ANALYZE (MySQL 8.0+) per a anàlisi detallada de consultes