Parametri table_cache. max_connections și max_tmp_tables specifică numărul maxim de fișiere pe care serverul este deschis. Dacă măriți unul sau ambii dintre acești parametri, este posibil sa se confrunte cu o limitare impusă de sistemul de operare cu privire la numărul de descriptori de fișiere deschise pentru procesul de unul. În multe sisteme, cu toate acestea, această limită poate fi mărită. Ca metode de a schimba această valoare pentru sisteme diferite pot fi destul de diferite, în fiecare caz, ar trebui să consultați documentația pentru sistemul 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 de descriptori 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 cache-ul de tabele deschise va fi egală cu suma specificată în table_cache (implicit - 64, acest număr poate fi schimbat folosind 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.
- În cazul în care cache-ul este într-o stare prelungită temporar, și o masă merge de la o folosit la starea nefolosită, acest tabel este închis și eliberat din cache.
Tabelul este deschis pentru fiecare acces simultan. Acest lucru înseamnă că, în cazul în care există două fire care accesează aceeași masă, sau este accesat de două ori în acest tabel, aceeași interogare (folosind AS), atunci acest tabel trebuie 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 celălalt fir și nu vor fi închise până când firul de apeluri HANDLER nume_tabelă comanda ÎNCHIS sau curge în sine nu este distrusă (a se vedea secțiunea 6.4.2 HANDLER Sintaxa). 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. este necesar să crească acest cache de tabele (a se vedea secțiunea 4.5.6.3 SHOW STATUS).