Kā optimizēt MySQL veiktspēju
Pilnīgs ceļvedis par MySQL datu bāzes veiktspējas optimizāciju: konfigurācijas regulēšana, vaicājumu optimizācija, indeksēšana un uzraudzība.

MySQL veiktspējas optimizācija ir kritiski svarīga lietotnēm, kas apstrādā lielus datu apjomus vai augstu trafiku. Šis ceļvedis aptver būtiskas metodes MySQL veiktspējas uzlabošanai, sākot no konfigurācijas regulēšanas līdz vaicājumu optimizācijai.
MySQL konfigurācijas optimizācija
Rediģējiet MySQL konfigurācijas failu, lai optimizētu veiktspēju, pamatojoties uz jūsu servera resursiem:
# Rediģēt MySQL konfigurāciju (Ubuntu/Debian)
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
# Rediģēt MySQL konfigurāciju (CentOS/RHEL)
sudo nano /etc/my.cnf
# Pievienot vai modificēt šos iestatījumus:
[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
# Pārstartēt MySQL
sudo systemctl restart mysql # Ubuntu/Debian
sudo systemctl restart mysqld # CentOS/RHELInnoDB optimizācija
InnoDB ir MySQL noklusējuma glabāšanas dzinis. Optimizējiet to, lai uzlabotu veiktspēju:
# /etc/mysql/mysql.conf.d/mysqld.cnf vai /etc/my.cnf
[mysqld]
# InnoDB bufera pools (izmantojiet 70-80% no pieejamās RAM)
innodb_buffer_pool_size = 2G
# InnoDB žurnāla faila izmērs
innodb_log_file_size = 512M
# InnoDB izskalošanas metode (SSD)
innodb_flush_method = O_DIRECT
# InnoDB I/O pavedieni
innodb_read_io_threads = 4
innodb_write_io_threads = 4
# InnoDB žurnāla izskalošana transakcijas apstiprināšanā
innodb_flush_log_at_trx_commit = 2Vaicājumu kešatmiņas konfigurācija
Vaicājumu kešatmiņa var uzlabot veiktspēju lasīšanas intensīvām slodzēm (Piezīme: Vaicājumu kešatmiņa ir novecojusi MySQL 8.0):
# MySQL 5.7 un agrākām versijām
[mysqld]
query_cache_type = 1
query_cache_size = 128M
query_cache_limit = 2M
# Pārbaudīt vaicājumu kešatmiņas statusu
mysql> SHOW VARIABLES LIKE 'query_cache%';
# Pārbaudīt vaicājumu kešatmiņas statistiku
mysql> SHOW STATUS LIKE 'Qcache%';Indeksu optimizācija
Pareiza indeksēšana ir kritiski svarīga vaicājumu veiktspējai:
# Analizēt tabulu, lai atjauninātu indeksu statistiku
ANALYZE TABLE table_name;
# Pārbaudīt neizmantotos indeksus
SELECT * FROM sys.schema_unused_indexes;
# Izveidot indeksu
CREATE INDEX idx_column ON table_name(column_name);
# Izveidot salikto indeksu
CREATE INDEX idx_multi ON table_name(col1, col2, col3);
# Parādīt indeksus
SHOW INDEXES FROM table_name;
# Dzēst neizmantoto indeksu
DROP INDEX idx_name ON table_name;Vaicājumu optimizācija
Optimizējiet savus SQL vaicājumus, lai uzlabotu veiktspēju:
- Izmantojiet EXPLAIN, lai analizētu vaicājumu izpildes plānus: EXPLAIN SELECT * FROM table WHERE column = 'value'
- Izvairieties no SELECT * - atlasiet tikai nepieciešamās kolonnas
- Izmantojiet LIMIT, lai ierobežotu rezultātu kopas
- Izmantojiet pareizus WHERE nosacījumus ar indeksētām kolonnām
- Izvairieties no funkcijām WHERE nosacījumos (piemēram, WHERE YEAR(date) = 2026 → WHERE date >= '2026-01-01')
- Izmantojiet JOIN vietā apakšvaicājumiem, kad iespējams
- Izmantojiet UNION vietā OR vairākiem nosacījumiem, kad tas ir piemērots
MySQL veiktspējas uzraudzība
# Pārbaudīt MySQL statusu
mysql> SHOW STATUS;
# Pārbaudīt lēnus vaicājumus
mysql> SHOW VARIABLES LIKE 'slow_query%';
# Aktivizēt lēno vaicājumu žurnālu
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 2;
# Pārbaudīt procesu sarakstu
mysql> SHOW PROCESSLIST;
# Pārbaudīt tabulas statusu
mysql> SHOW TABLE STATUS LIKE 'table_name';
# Pārbaudīt InnoDB statusu
mysql> SHOW ENGINE INNODB STATUS;Veiktspējas optimizācijas padomi
- Regulāri palaidiet OPTIMIZE TABLE, lai defragmentētu tabulas
- Uzraugiet lēno vaicājumu žurnālu un optimizējiet lēnus vaicājumus
- Izmantojiet savienojumu poolingu, lai samazinātu savienojumu pieskaitāmos izdevumus
- Sadaliet lielas tabulas pēc datuma vai diapazona, lai uzlabotu veiktspēju
- Izmantojiet lasīšanas replikas lasīšanas intensīvām slodzēm
- Uzturiet MySQL atjauninātu līdz jaunākajai stabilajai versijai
- Uzraugiet diska I/O un apsveriet SSD/NVMe glabāšanas izmantošanu
- Izmantojiet EXPLAIN ANALYZE (MySQL 8.0+) detalizētai vaicājumu analīzei