Konuyu Açan
#0
Yüksək yüklü veb-saytlar və tətbiqlər üçün verilənlər bazasının performansı kritik əhəmiyyət kəsb edir. MySQL, geniş yayılmış və etibarlı bir verilənlər bazası idarəetmə sistemi olsa da, düzgün tənzimlənmədikdə ciddi performans problemlərinə səbəb ola bilər. Bu yazıda, MySQL-in yüksək trafikli mühitlərdə effektiv işləməsini təmin etmək üçün əsas optimizasiya strategiyalarını ətraflı şəkildə nəzərdən keçirəcəyik.
MySQL-in performansı birbaşa onun konfiqurasiya parametrlərindən asılıdır. Əsas tənzimləmələr
İndekslər, verilənlər bazası sorğularının sürətini əhəmiyyətli dərəcədə artıra bilər. Lakin, həddindən artıq indeks istifadəsi yazma əməliyyatlarını (INSERT, UPDATE, DELETE) yavaşlada bilər.
Verilənlər bazası tətbiqinin ən vacib hissəsi sorğuların özüdür. Səmərəli yazılmış sorğular, hardware resurslarından asılı olmayaraq, performansı xeyli yaxşılaşdırır.
Çox böyük verilənlər bazaları və ya yüksək oxuma yükü olan sistemlər üçün tək bir MySQL server kifayət etməyə bilər.
Proqram təminatı optimizasiyası ilə yanaşı, serverin hardware resursları da kritik əhəmiyyət kəsb edir.
MySQL optimizasiyası davamlı bir prosesdir və tətbiqinizin tələbatlarına uyğun olaraq müntəzəm monitorinq və tənzimləmələr tələb edir. Yuxarıda qeyd olunan strategiyaları tətbiq etməklə, yüksək trafikli saytlarınızın verilənlər bazası performansını əhəmiyyətli dərəcədə yaxşılaşdıra bilərsiniz.
MySQL Konfiqurasiya Faylının (my.cnf) Tənzimlənməsi
MySQL-in performansı birbaşa onun konfiqurasiya parametrlərindən asılıdır. Əsas tənzimləmələr
my.cnf faylında aparılır:- innodbbufferpool_size: Bu, InnoDB verilənlərinin və indekslərinin keşləndiyi əsas yaddaş sahəsidir. Serverin ümumi RAM-ının 50%-70%-i bu parametrə ayrılmalıdır. Məsələn, 16GB RAM-ı olan bir server üçün optimal seçim ola bilər. Yanlış tənzimlənmə disk I/O əməliyyatlarını kəskin şəkildə artıra bilər.CODE
1
innodb_buffer_pool_size = 10G
- innodblogfile_size: InnoDB jurnallarının ölçüsünü müəyyən edir. Böyük dəyərlər yazma əməliyyatlarının (INSERT, UPDATE, DELETE) performansını yaxşılaşdırır, lakin bərpa müddətini uzada bilər. Müasir sistemlərdə və yaCODE
1
256Mkimi dəyərlər tövsiyə olunur.CODE1
512M
- querycachesize: MySQL 5.7-dən etibarən köhnəlmiş və MySQL 8.0-da tamamilə silinmişdir. Çoxsaylı yazma əməliyyatları olan sistemlərdə bu keş daha çox yük yarada bilər. Əgər istifadə edirsinizsə, olaraq deaktiv etməyiniz məsləhətdir.CODE
1
query_cache_type = 0
- max_connections: Eyni anda serverə qoşula biləcək maksimum əlaqələrin sayını müəyyən edir. Çox yüksək dəyərlər sistem resurslarının tükənməsinə səbəb ola bilər, çox aşağı dəyərlər isə əlaqə xətalarına gətirib çıxarar. Tətbiqinizin tələblərinə uyğun olaraq tənzimlənməlidir.
- keybuffersize: Yalnız MyISAM cədvəlləri üçün indeks keşləmə sahəsidir. Əgər InnoDB istifadə edirsinizsə, bu dəyəri aşağı saxlaya bilərsiniz (və yaCODE
1
16M).CODE1
32M
- tmptablesize və maxheaptable_size: MySQL-in yaddaşda müvəqqəti cədvəllər yaratmaq üçün istifadə etdiyi yaddaş həddini müəyyən edir. Hər iki parametr eyni dəyərə malik olmalı və böyük, kompleks sorğularınız varsa artırılmalıdır. Məsələn, və yaCODE
1
128M.CODE1
256M
İndekslərin Düzgün İstifadəsi
İndekslər, verilənlər bazası sorğularının sürətini əhəmiyyətli dərəcədə artıra bilər. Lakin, həddindən artıq indeks istifadəsi yazma əməliyyatlarını (INSERT, UPDATE, DELETE) yavaşlada bilər.
- PRIMARY KEY və UNIQUE INDEX: Hər cədvəldə bir
PRIMARY KEYolmalıdır.UNIQUE INDEXisə sütunlardakı dəyərlərin təkrarlanmamasını təmin edir və sürətli axtarışa kömək edir.
- CREATE INDEX sintaksisi: CODE
1
CREATE INDEX index_adı ON cədvəl_adı (sütun_adı);
- EXPLAIN ilə sorğu planının analizi: Hər hansı bir sorğunun necə icra olunduğunu, hansı indekslərdən istifadə etdiyini görmək üçün
EXPLAINaçar sözündən istifadə edin:Bu, indekslərin effektivliyini anlamağa kömək edir.CODE1
EXPLAIN SELECT * FROM users WHERE email = '[email protected]';
- Kompozit indekslər: Bir neçə sütun üzərində yaradılan indekslərdir. Məsələn, Bu, hər iki sütunu eyni anda filter edən sorğular üçün çox faydalıdır.CODE
1
CREATE INDEX idx_ad_soyad ON istifadəçilər (ad, soyad);
Sorğuların (Queries) Optimallaşdırılması
Verilənlər bazası tətbiqinin ən vacib hissəsi sorğuların özüdür. Səmərəli yazılmış sorğular, hardware resurslarından asılı olmayaraq, performansı xeyli yaxşılaşdırır.
- SELECT * əvəzinə konkret sütunlar: Yalnız ehtiyac duyduğunuz sütunları seçin. bütün sütunları gətirənCODE
1
SELECT ad, email FROM users;-dən daha yüngüldür.CODE1
SELECT *
- JOIN əməliyyatlarının effektivliyi:
JOINəməliyyatlarında indekslənmiş sütunlardan istifadə edin vəLEFT JOIN,INNER JOINkimi əməliyyatları düzgün seçin.
- WHERE şərtlərinin indekslərlə istifadəsi:
WHEREbəndində istifadə olunan sütunların indekslənmiş olduğundan əmin olun.LIKE '%text'kimi ifadələr indeksləri istifadə edə bilmir.
- LIMIT və OFFSET optimizasiyası: Böyük
OFFSETdəyərləri performansı aşağı sala bilər. Paginasiya üçün son id-dən istifadə etmək daha səmərəlidir:CODE1
SELECT * FROM posts WHERE id > son_id ORDER BY id ASC LIMIT 20;
- Subqueries əvəzinə JOIN istifadəsi: Bir çox hallarda,
SUBQUERYəvəzinəJOINistifadə etmək daha yaxşı performans verir, çünkiJOINverilənlər bazası tərəfindən daha səmərəli idarə olunur.
Şarding və Replikasiya
Çox böyük verilənlər bazaları və ya yüksək oxuma yükü olan sistemlər üçün tək bir MySQL server kifayət etməyə bilər.
- Şarding: Verilənlər bazasını kiçik, idarə edilə bilən hissələrə (shardlara) bölməkdir. Hər bir shard öz serverində yerləşir. Bu, ümumi yükü paylayaraq performansı artırır.
- Master-Slave Replikasiya: Verilənlərin bir əsas serverdən (Master) bir və ya bir neçə köməkçi serverə (Slave) sinxron və ya asinxron ötürülməsidir. Yazma əməliyyatları
Master-də, oxuma əməliyyatları isəSlaveserverlərdə aparılaraq yük paylanır.Read Replicasbu strategiyanın əsasını təşkil edir.
Hardware və Disk Performansı
Proqram təminatı optimizasiyası ilə yanaşı, serverin hardware resursları da kritik əhəmiyyət kəsb edir.
- SSD disklər: Ənənəvi
HDDdisklərlə müqayisədəSSDdisklər xeyli yüksək I/O performansı təmin edir. MySQL üçünSSDistifadəsi disk əməliyyatlarını sürətləndirərək ümumi performansı artırır.
- RAM artırılması:
innodb_buffer_pool_sizeüçün daha çox yaddaş ayırmaq imkanı yaradır ki, bu da disk I/O-nu minimuma endirir.
- CPU nüvələrinin sayı: Çoxsaylı paralel sorğular və ya kompleks hesablamalar üçün daha çox
CPUnüvəsi daha yaxşı performans deməkdir.
MySQL optimizasiyası davamlı bir prosesdir və tətbiqinizin tələbatlarına uyğun olaraq müntəzəm monitorinq və tənzimləmələr tələb edir. Yuxarıda qeyd olunan strategiyaları tətbiq etməklə, yüksək trafikli saytlarınızın verilənlər bazası performansını əhəmiyyətli dərəcədə yaxşılaşdıra bilərsiniz.