MySQL verilənlər bazası optimizasiyası: 10 vacib qayda

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 = 1

Necə 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 = 5G

8. 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.

Paylaş: