MySQL โ dunyodagi eng mashhur relyatsion ma'lumotlar bazasi tizimi, dunyodagi web saytlarning 60%+ shu DB'da ishlaydi. Lekin default sozlamalar konservativ va modern saytlar uchun yetarli emas โ to'g'ri tuning bilan saytingiz 2-5 marta tez ishlashi mumkin. Asosiy tuning parametrlari quyida.
InnoDB tuning
innodb_buffer_pool_size โ InnoDB ma'lumotlar bazasi uchun RAM kesh. Bu eng muhim parametr. Tavsiya: bo'sh RAM'ning 50-70%. Misol: 4GB RAM serverda, MySQL uchun 2GB ajratish โ innodb_buffer_pool_size = 2G. Bu ma'lumotlar va indekslarni RAM'da saqlaydi va disk I/O ni minimallashtiradi.
innodb_log_file_size โ InnoDB transaction log o'lchami. Tavsiya: 256M-1G. Katta log faylga ko'p tranzaksiyalar sig'adi va crash recovery tez bo'ladi.
innodb_flush_log_at_trx_commit โ har tranzaksiyada loglarni qaerda flush qilish. 1 = ACID muvofiqlik (eng xavfsiz), 2 = OS keshga (tezroq, lekin OS crashda ma'lumot yo'qotish mumkin), 0 = har sekundda (eng tez). Production: 1 yoki 2.
Connection va thread tuning
max_connections โ eng ko'p parallel ulanish soni. Default: 151. Tavsiya: saytingiz hajmiga qarab 200-1000. WordPress'da har user 1-3 connection ishlatishi mumkin.
thread_cache_size โ yangi thread yaratmasdan, eski thread'larni qayta ishlatish uchun kesh. Tavsiya: max_connections / 4.
Query cache (eski versiyalar uchun)
MySQL 5.7'gacha query_cache mavjud edi. MySQL 8.0'da olib tashlandi (ko'p connection paytida muammo edi). MariaDB esa hali query_cache'ni qo'llab-quvvatlaydi. Agar siz MariaDB ishlatsangiz: query_cache_size = 64M, query_cache_type = 1.
Slow query log
slow_query_log = 1, long_query_time = 2 (2 sekunddan uzun query'lar), slow_query_log_file = /var/log/mysql-slow.log. Bu log orqali optimallashish kerakli query'larni topish mumkin. mysqldumpslow vositasi orqali statistika ko'rish: mysqldumpslow -s c -t 10 /var/log/mysql-slow.log.
Indekslash va EXPLAIN
Indeks yo'qligi MySQL'ning eng katta tezlik muammosi. EXPLAIN SELECT bilan har query plan'ini tekshiring: type "ALL" โ full table scan, yomon; "ref" yoki "eq_ref" โ indeks ishlatilgan, yaxshi. WHERE va JOIN'da ishlatiluvchi ustunlarga indeks qo'shing: CREATE INDEX idx_user_email ON users(email);
Sayt.uz amaliyot
Sayt.uz hosting tariflarida MySQL/MariaDB tuning bizning DBA tomonidan amalga oshiriladi. WordPress saytlar uchun: innodb_buffer_pool_size 256M (Basic), 512M-1G (Pro). Pro mijozlarning ko'pchiligida slow_query_log yoqilgan va biz hafta bir marta tahlil qilamiz. E-commerce do'konlarda noto'g'ri indekslash sababli sekin pages โ har 2-3 oyda audit o'tkazamiz. Maslahat: indekslash MySQL tezligining 80%, qolgan parametrlar 20%. Avval database struktura va indekslarni to'g'rilang.