Un pic de teorie. Pe sistemele de operare UNIX, există un sistem de fișiere care se află fizic în memoria RAM, dar vă permite să lucrați cu ea ca și cu o unitate de disc regulat. Viteza de acces la blocul de hard disk este de aproximativ 1 ms. Viteza de acces la memorie este de 0,001 ms. Să încercăm să aplicăm acest lucru bazei de date MySQL pentru a profita la maxim de operațiile de inserare / actualizare.
Mai întâi, verificați viteza înregistrării aleatorii pe hard disk:
Acum, la fel pentru memoria partajată (/ run / shm sau / dev / shm):
Comparați rezultatele și vedeți că timpul de creare a 1000 de fișiere a scăzut cu 574 de ori. Bine. Prin urmare, ar trebui să ne așteptăm la creșterea vitezei de scriere în baza de date.
1) Verificați dimensiunea și spațiul liber pentru / run / shm
2) Verificați cât spațiu este ocupat de baza de date
Aceasta înseamnă că putem transfera baza de date în / run / shm
3) Stop MySQL:
4) Creați directoare și copiați datele:
5) Regula de configurare:
6) Regula AppArmor:
7) Rulați MySQL
* Dacă serviciul nu pornește - vedeți /var/log/mysql/error.log
Acum, cel mai interesant. Verificăm ce sa întâmplat.
Testul de pe hard disk-ul pe care l-am făcut în avans, așa că aduc rezultatele imediat.
Actualizarea a fost efectuată la un interval aleatoriu [1 000 000 - 9 000 000] pentru cheia primară (id). Valorile extreme sunt aruncate astfel încât motorul să se "săpare" în interiorul mesei.
Creștere semnificativă a vitezei la INSERT și chiar mai mult la UPDATE.
Mai puțin pentru inserție, deoarece MySQL efectuează recalcularea indexului și organizarea datelor.
În configurația MySQL:
innodb_buffer_pool_size = 1024M
Dacă puneți mai puțin, atunci viteza UPDATE pentru HDD cade în mod natural.
innodb_flush_log_at_trx_commit = 2
Ca atare, nu avem tranzacții aici și acest lucru nu afectează viteza. Cu toate acestea, lăsăm această valoare egală cu 2.
Cu o astfel de schemă, este foarte important să scrieți un jurnal binar și să efectuați periodic o copie de rezervă. Pentru a reduce cât mai mult posibil costurile de înregistrare, putem specifica doar un hard disk separat pentru binar. Viteza secvențială de scriere la hard disk este mult mai mare decât viteza aleatorie. Prin urmare, am pus într-un hard disk suplimentar, montați-l, de exemplu, / mnt / hddbin / și specificați calea my.ini la jurnalul binar: log_bin = /mnt/hddbin/mysql-bin.log
Nu uitați să adăugați scripturi pentru a reporni și a închide sistemul. Uită-te la folderul / etc / rc *. De obicei, acesta este 0 (oprirea sistemului) și 6 (reporniți). Manualul, cum se adaugă scripturi, este ușor de găsit pe Google. Scriptul oprește MySQL înainte de a reporni sau închide sistemul, apoi copiază folderul / run / shm / mysql-lib pe hard disk. Când scriptul de sistem restabilește datele de pe hard disk într-un dosar / run / SHM / mysql-lib și apoi începe MySQL.
Doar adăugați un simplu bash sau script perl pentru a monitoriza memoria liberă în / run / shm. Puteți să vă conectați la Zabbix.