Yavaş sayt? Çox vaxt günahkar DB-dir. Düzgün MySQL optimizasiyası ilə sayt sürəti 2-5x arta bilər - heç bir kod dəyişikliyi olmadan.
1. Slow query log aktivləşdir
Slow query nədir?
1 saniyədən çox işləyən SQL sorğusu. my.cnf-də:
slow_query_log = 1
slow_query_log_file = /var/log/mysql-slow.log
long_query_time = 1Necə analiz etmək?
mysqldumpslow yardımçısı log-u analiz edir - hansı sorğu ən çox vaxt alır.
2. Index əlavə et
Index nədir?
Cədvələ kitabxana kataloqu kimi. WHERE və JOIN şərtlərinin sürətini 10-100x artırır.
Hansı sütunlara index?
- WHERE şərtində olan sütunlar
- JOIN şərtindəki foreign key
- ORDER BY sütunları
- GROUP BY sütunları
CREATE INDEX idx_user_email ON users(email);3. SELECT * yox
Yalnız lazım olan sütunları seç. SELECT * FROM posts 50 sütun qaytarır, halbuki sizə 3 lazımdır.
4. JOIN-ə optimizasiya
INNER JOIN > subquery
Subquery hər outer row üçün təkrar işləyir. INNER JOIN bir dəfə optimallaşmış icra olunur.
5. LIMIT istifadə et
Səhifələmə üçün:
SELECT * FROM posts ORDER BY id DESC LIMIT 10 OFFSET 100;OFFSET çox böyük olsa yavaşlayır - keyset pagination daha sürətli.
6. InnoDB istifadə et
MyISAM vs InnoDB
MyISAM köhnəlmiş - cədvəl səviyyəsində locking. InnoDB row səviyyəsində - bir neçə yazma paralel.
Konversiya:
ALTER TABLE posts ENGINE = InnoDB;7. innodb_buffer_pool_size
Nə qədər təyin etmək?
Server RAM-ının 60-70%-i. 8 GB RAM → 5 GB buffer pool. my.cnf-də:
innodb_buffer_pool_size = 5G8. Query cache
MySQL 5.7-də query cache var idi - MySQL 8-də silindi. ProxySQL və ya tətbiq səviyyəsində cache lazımdır.
9. Cədvəl partitioning
Nə vaxt lazımdır?
10M+ row olan cədvəllər. Tarix əsaslı partitioning - hər ay üçün ayrı bölmə.
PARTITION BY RANGE (YEAR(created_at)) (
PARTITION p2024 VALUES LESS THAN (2025),
PARTITION p2025 VALUES LESS THAN (2026)
);10. EXPLAIN istifadə et
Sorğunun necə icra olunduğunu göstərir:
EXPLAIN SELECT * FROM users WHERE email = test@test.com;"type: ALL" görsənirsə - full table scan, index əlavə edin.
OPTIMIZE TABLE
Cədvəl fiziki olaraq yenidən qurulur - silinmiş row-ların boş yeri qaytarılır:
OPTIMIZE TABLE posts, postmeta, options;WordPress xüsusi
Autoload optimizasiya
wp_options.autoload sütunu hər səhifə yüklənməsində oxunur. 1 MB-dan az olmalıdır. Çox plaginlər 5+ MB autoload yaradır.
Transient təmizliyi
Expired transient-lar avtomatik silinmir - həftəlik WP-Optimize ilə təmizlə.
Hostinq.az-da MySQL
MariaDB 10.6 + 8 GB buffer pool standart konfiqurasiya. Slow query log dəstəyə müraciət edib aktivləşdirə bilərsiniz.
Hostinq.az hosting - MySQL ən yaxşı tuning ilə hazır gəlir.