MySQL өнімділігін қалай оңтайландыруға болады
MySQL дерекқорының өнімділігін оңтайландыру бойынша толық нұсқаулық: баптауды реттеу, сұрауларды оңтайландыру, индекстеу және бақылау.

MySQL өнімділігін оңтайландыру - көп мөлшерде деректерді немесе жоғары трафикті өңдейтін қосымшалар үшін маңызды. Бұл нұсқаулық баптауды реттеуден сұрауларды оңтайландыруға дейін MySQL өнімділігін жақсартудың негізгі әдістерін қамтиды.
MySQL баптауын оңтайландыру
Сервер ресурстарыңызға сүйене отырып өнімділікті оңтайландыру үшін MySQL баптау файлын өңдеңіз:
# MySQL баптауын өңдеу (Ubuntu/Debian)
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
# MySQL баптауын өңдеу (CentOS/RHEL)
sudo nano /etc/my.cnf
# Бұл параметрлерді қосу немесе өзгерту:
[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
# MySQL-ді қайта іске қосу
sudo systemctl restart mysql # Ubuntu/Debian
sudo systemctl restart mysqld # CentOS/RHELInnoDB оңтайландыру
InnoDB - MySQL-дің әдепкі сақтау қозғалтқышы. Жақсы өнімділік үшін оны оңтайландырыңыз:
# /etc/mysql/mysql.conf.d/mysqld.cnf немесе /etc/my.cnf-та
[mysqld]
# InnoDB буфер пулы (қолжетімді RAM-дің 70-80% қолдану)
innodb_buffer_pool_size = 2G
# InnoDB журнал файлының өлшемі
innodb_log_file_size = 512M
# InnoDB тазалау әдісі (SSD үшін)
innodb_flush_method = O_DIRECT
# InnoDB I/O ағындары
innodb_read_io_threads = 4
innodb_write_io_threads = 4
# Транзакцияны растау кезінде InnoDB журналын тазалау
innodb_flush_log_at_trx_commit = 2Сұрау кэшінің баптауы
Сұрау кэші оқуға байланысты жұмыс жүктемелері үшін өнімділікті жақсарта алады (Ескерту: Сұрау кэші MySQL 8.0-да ескірген):
# MySQL 5.7 және одан бұрынғы үшін
[mysqld]
query_cache_type = 1
query_cache_size = 128M
query_cache_limit = 2M
# Сұрау кэші күйін тексеру
mysql> SHOW VARIABLES LIKE 'query_cache%';
# Сұрау кэші статистикасын тексеру
mysql> SHOW STATUS LIKE 'Qcache%';Индекс оңтайландыру
Дұрыс индекстеу сұрау өнімділігі үшін маңызды:
# Индекс статистикасын жаңарту үшін кестені талдау
ANALYZE TABLE table_name;
# Қолданылмаған индекстерді тексеру
SELECT * FROM sys.schema_unused_indexes;
# Индекс жасау
CREATE INDEX idx_column ON table_name(column_name);
# Күрделі индекс жасау
CREATE INDEX idx_multi ON table_name(col1, col2, col3);
# Индекстерді көрсету
SHOW INDEXES FROM table_name;
# Қолданылмаған индексті жою
DROP INDEX idx_name ON table_name;Сұрауларды оңтайландыру
Жақсы өнімділік үшін SQL сұрауларыңызды оңтайландырыңыз:
- Сұрау орындау жоспарларын талдау үшін EXPLAIN қолданыңыз: EXPLAIN SELECT * FROM table WHERE column = 'value'
- SELECT * -дан аулақ болыңыз - тек қажетті бағандарды таңдаңыз
- Нәтиже жиындарын шектеу үшін LIMIT қолданыңыз
- Индекстелген бағандармен дұрыс WHERE клаузаларын қолданыңыз
- WHERE клаузаларында функциялардан аулақ болыңыз (мысалы, WHERE YEAR(date) = 2026 → WHERE date >= '2026-01-01')
- Мүмкін болғанда ішкі сұраулардың орнына JOIN қолданыңыз
- Сәйкес кезде бірнеше шарттар үшін OR орнына UNION қолданыңыз
MySQL өнімділігін бақылау
# MySQL күйін тексеру
mysql> SHOW STATUS;
# Баяу сұрауларды тексеру
mysql> SHOW VARIABLES LIKE 'slow_query%';
# Баяу сұрау журналын қосу
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 2;
# Процесс тізімін тексеру
mysql> SHOW PROCESSLIST;
# Кесте күйін тексеру
mysql> SHOW TABLE STATUS LIKE 'table_name';
# InnoDB күйін тексеру
mysql> SHOW ENGINE INNODB STATUS;Өнімділікті оңтайландыру кеңестері
- Кестелерді дефрагментациялау үшін дұрыс OPTIMIZE TABLE орындаңыз
- Баяу сұрау журналын бақылаңыз және баяу сұрауларды оңтайландырыңыз
- Қосылым үстемелігін азайту үшін қосылым пулын қолданыңыз
- Жақсы өнімділік үшін үлкен кестелерді күн бойынша немесе диапазон бойынша бөліңіз
- Оқуға байланысты жұмыс жүктемелері үшін оқу репликаларын қолданыңыз
- MySQL-ді соңғы тұрақты нұсқаға жаңартып ұстаңыз
- Диск I/O-ны бақылаңыз және SSD/NVMe сақтау құрылғысын қолдануды қарастырыңыз
- Толық сұрау талдауы үшін EXPLAIN ANALYZE (MySQL 8.0+) қолданыңыз