Mysql 5

5.4.7. Tabele de deschidere și închidere în MySQL

Parametri table_cache. max_connections și max_tmp_tables specifică numărul maxim de fișiere pe care serverul este deschis. Dacă creșteți unul sau ambii dintre acești parametri, puteți executa limitarea impusă de acest sistem de operare cu privire la numărul de descriptori de fișiere deschiși pentru un proces. În multe sisteme, cu toate acestea, această limită poate fi mărită. Deoarece modalitățile de modificare a acestei valori pentru diferite sisteme pot fi complet diferite, în fiecare caz ar trebui să consultați documentația pentru sistemul dvs. de operare.

Valorile table_cache și max_connections sunt interdependente. De exemplu, pentru 200 de conexiuni concurente, trebuie să aveți o memorie cache pentru tabele de cel puțin 200 * n, unde n este numărul maxim de tabele conectate. De asemenea, este necesar să se rezervă mai mulți descriptori suplimentari de fișiere pentru tabele și fișiere temporare.

Ar trebui să vă asigurați că sistemul dvs. de operare este capabil să manipuleze cât mai mulți descriptori de fișiere deschiși pe măsură ce presupune instalarea table_cache dată. Dacă setarea table_cache este prea mare. apoi MySQL poate să depășească numărul permis de descriptori de fișiere, să întrerupă conexiunea, să nu execute cereri și să devină foarte nesigure. De asemenea, trebuie să se țină cont de faptul că pentru manipularea tabelului MyISAM sunt necesare două descriptori de fișiere pentru fiecare tabel deschis unic. Numărul descriptorilor de fișiere permise pentru MySQL poate fi mărit prin utilizarea opțiunii start --open-files-limit = # (vezi secțiunea A.2.16, "Fișierul nu a fost găsit").

Numărul maxim de tabele din memoria cache a tabelelor deschise va fi egal cu numărul specificat în table_cache (implicit - 64; acest număr poate fi modificat cu opțiunea -O table_cache = # pentru mysqld). Rețineți că MySQL poate deschide temporar mai multe tabele pentru a executa interogări.

Un tabel neutilizat este închis și șters din memoria cache în următoarele situații:

Când memoria cache este plină și firul încearcă să deschidă tabela care nu se află în această memorie cache.

Când memoria cache conține mai mult decât valorile de intrare table_cache și firul nu mai utilizează tabelul.

Când cineva execută mysqladmin refresh sau mysqladmin table-uri.

Atunci când cineva efectuează FLUSH TABLES.

Când memoria cache-ului de tabelă este populată, serverul utilizează următoarea procedură pentru a aloca datele de cache de intrare pentru utilizare:

Tabelele care nu sunt utilizate în acest moment sunt publicate în ordinea celei mai recente utilizări.

Dacă memoria cache este plină și nici un tabel nu poate fi eliberat și trebuie să deschideți un nou tabel, cache-ul temporar se extinde cât este necesar.

Dacă memoria cache se află într-o stare temporară extinsă și tabelul trece de la a fi folosit la o stare neutilizată, atunci masa este închisă și eliberată din memoria cache.

Tabelul este deschis pentru fiecare acces simultan. Aceasta înseamnă că, dacă există două fire care accesează aceeași tabelă sau accesând acest tabel de două ori în aceeași interogare (folosind AS), atunci acest tabel ar trebui să fie deschis de două ori. Prima deschidere a oricărui tabel necesită doi descriptori de fișiere; pentru fiecare utilizare suplimentară - doar una. Un descriptor suplimentar pentru prima deschidere este utilizat pentru fișierul index; Acest descriptor este împărțit de toate firele.

Când deschideți o masă cu HANDLER table_name OPEN, pentru acest flux este creat un obiect de tabel selectat. Acest obiect tabel nu este disponibil pentru alte fire și nu va fi închis până când acest fir nu apelează comanda CLOSE HANDLER table_name sau firul este distrus (vezi secțiunea 6.4.2, "Sintaxă operator HANDLER"). Dacă se întâmplă acest lucru, tabela este plasată înapoi în memoria cache a mesei (dacă nu este plină).

Pentru a afla dacă memoria cache nu este prea mică, verificați variabila Opened_tables. Dacă valoarea sa este suficient de mare, chiar dacă nu ați executat prea des comanda FLUSH TABLES. atunci trebuie să măriți această memorie cache (vezi secțiunea 4.5.6.3, "SHOW STATUS").

Articole similare