Multe detalii tehnice lipsesc aici, îi cer pe tehnici să nu se sapă foarte tare, pentru că informații "pentru ceainice".
Ei bine, atunci. După cum știți, mysqld este "un proces - multe fire." Într-un sens destul de aproximativ, firul este atunci când procesul se copiază, iar procesul părinte trece ceva sarcină în firul.
Crearea unui fir diferit de furcă convențional (), în principal prin aceea că furca generează un singur proces, în timp ce sunt folosite pentru împărțirea în fire diferite, o tehnica mai puternic, fără clonare ramificare de date în memorie.
Cu fiecare conexiune client, mysql creează firul pe care o procesează această conexiune.
Dacă aveți un mysqld încărcat pe mediu, asigurați-vă că mysqld rulează pe fire normale. De exemplu, FreeBSD sub 6 ramuri are o implementare anormală, buggy a firelor pthread. Principalele glitches apar atunci când lucrează la SMP (mai mult de 1 procesor). pthread „nu se poate“ fire normale sunt repartizate pe mai multe procesoare, și, ca urmare, avem o situație în care mysqld agățat pe un singur procesor, împreună cu un grup de copii lor. Toți ceilalți procesatori fumează, chiar dacă moscul a mâncat tot timpul procesorului procesorului său.
Deci, să vedem ce se întâmplă cu firele. Dacă serverul este încărcat ușor și are 1-2 conexiuni în același timp, atunci această optimizare nu are prea mult sens. Un rezultat mult mai tangibil este atunci când serverul este încărcat puternic și are multe solicitări competitive.
shell> mysqladmin extins-status
Să urmărim valorile:
Dacă Threads_cached este zero, ați dezactivat fluxul de numerar. Ie de fiecare dată când este creat un nou fir și atunci când acesta este dezactivat merge la / dev / null;). Acest lucru este rău. Când m-am întors în cache-ul de fire, atunci când un client deconecteaza comerțul merge în cache-ul, iar atunci când nu este creată o nouă conexiune, dar este luată din cache. Aceasta este o economie imensă de resurse în sarcini grele. În unele situații, sarcina a scăzut de mai multe ori când utilizați memoria cache a filelor.
Threads_cached - numărul de fire din cache
Threads_connected - aproximativ, numărul de conexiuni deschise
Threads_running - Câte fire în prezent lucrează
Threads_created - aici este piatra de temelie. Câte fire au fost create de la începutul serverului. Dacă în cache nu există un fir liber, acesta este creat. Dacă nu există nicio memorie cache, atunci fiecare conexiune creează un fir. Și când opriți, sunteți uciși. Același lucru se întâmplă dacă fluxul de numerar este prea mic. Pe scurt. Dacă această valoare este măsurată în mii, atunci nu sunteți bine în regulă. Ar trebui să fie un pic mai mult Threads_cached în cazul ideal.
Ce se intampla daca Threads_created este prea mare?
În my.cnf există un astfel de parametru thread_cache_size (sau doar thread_cache). Trebuie să fie mărită într-un mod experimental până când Threads_created ia ordinea numerelor Threads_cached.
Pentru a determina valoarea inițială, trebuie să aflați câte firuri rulează în medie la sarcini de vârf. Pentru monitorizare, utilitarul mytop este util (poate că nu funcționează dacă mysql este compilat static).
Sau executați periodic această comandă:
shell> ecou "SHOW STATUS GLOBAL" mysql | grep Threads_connected | awk ''Am determinat valoarea medie, l-am scris în my.cnf (thread_cache) și am restartat serverul. Să mergem, să fumăm, să bem un pescăruș. Vedeți starea (comanda este listată mai sus). Dacă Threads_created continuă să crească în mod nejustificat mai mare decât valoarea cache, crestem variabila thread_cache. Și așa înainte de victorie, dar nu sfătuiesc să ridic această valoare mai mult de câteva sute - riscă să scape din memorie.
Atunci când această valoare este mărită, este de asemenea necesar să monitorizăm Resident Set Size of the mysqld proces în dinamica pe termen lung. Aceasta este o coloană RSS din utilitarul "sus". Înseamnă câte mysql acum au loc în operativ. Nu vă sfătuiesc să vă ridicați peste jumătate din suma RAM, deoarece obțineți o penalizare când cache-urile sistemului încep să se micșoreze.
thread_cache Valoare medie, în care Threads_created menținut la un nivel acceptabil, și moderat mysql mănâncă memorie variază de la 5 la 100 în funcție de sarcină și dimensiunea de RAM disponibilă.
Prea multă valoare a unei valori de coș-cheie poate consuma în mod inutil memorie suplimentară.
Daca nu sunt salvate, thread_cache depaseste normele imaginabile si Mysql continua sa iroseasca memorie și procesor și pentru a produce fir, acesta va necesita o optimizare cuprinzătoare: 1. sistem 2. Kernel logica 3. scripting și interogări 4. alte opțiuni de pornire mysqld