Hangolás szálak (MySQL szálakat hangolás)

Ott hiányzik egy csomó technikai részleteket Számítógépfejek nem ásni annyit, amennyit információ „kezdőknek”.

Szóval Mint ismeretes, mysqld „egy folyamat - sok szálat.” Egy eléggé hozzávetőleges megértését szál (thread), amikor a folyamat másolja magát, és elküldi a szülő szál mi a probléma megoldására.
Létrehozása egy szál eltér a hagyományos villa () főleg, hogy a villa generál egyetlen folyamat, mivel a felosztás a különböző szálak alkalmazunk, egy nagyobb teljesítményű technikát klónozás nélkül elágazás adatokat a memóriába.

Minden alkalommal, amikor egy kliens csatlakozik, mysql teremt egy szál, amely kezeli a kapcsolatot.

Ha közepesen terhelt mysqld, majd győződjön meg arról, hogy a mysqld futó normális végrehajtásához szálak. Például, FreeBSD 6 alatt szálak kóros, hibás végrehajtása szálak pthread. Alapvető hibák jelennek meg dolgozni az SMP (egynél több processzor). A pthread „nem” normális szálak oszlanak több processzort, és ennek eredményeként már olyan helyzetben, amikor Mysqld lóg csak egy processzor, valamint egy csomó a gyerekek. Minden más processzorok a dohányzás, akkor is, ha az izmok az egészet megette a CPU időt a processzor.

Tehát, lássuk mit történik a szálak. Ha a szerver be van töltve rosszul, és 1-2 kapcsolat ugyanakkor ebben az optimalizálás nincs különösebb jelentősége. Sokkal kézzelfogható eredmény, ha a szerver be van töltve, és komolyan is sok párhuzamos lekérdezések.

shell> MySQLadmin kiterjesztett állapotát

Ügyeljen arra, hogy az értéke:

Ha Threads_cached nulla, akkor letiltja a cache szálak. Ie Minden alkalommal, amikor egy új téma, de ha letiltja megy a / dev / null;). Ez rossz. Amikor bekapcsoltam a cache a szálak, amikor egy ügyfél bontja a kereskedelmi bemegy a cache, és amikor egy új kapcsolat nem jön létre, de figyelembe a gyorsítótárból. Ez egy hatalmas -megtakarításra nagy terhelés alatt. Bizonyos helyzetekben a terhelés csökken néhányszor a menet cache.

Threads_cached - a szálak számát a cache

Threads_connected - durván szólva, a számos nyitott kapcsolatok

Threads_running - Hány szál most „dolgozik”

Threads_created - és ez az alapja. Hány szál hoztak létre a szerver indításánál. Ha a gyorsítótár nem szabad menet, akkor létrejön. Ha a cache egyáltalán nem, akkor minden alkalommal, amikor egy szál. És szétcsatlakoztatáskor megölték. Ugyanez történik, ha a cache a szálak túl kicsi. Rövidebb. Ha ezt az értéket mért ezer van, akkor nem baj. Meg kell egy kicsit több Threads_cached ideális esetben.

Mi a teendő, ha Threads_created túl magas?

A my.cnf van egy paraméter thread_cache_size (vagy csak thread_cache). Meg kell növelni kísérleti jelleggel az addig, amíg Threads_created nem fogadja el a megrendelést Threads_cached számjegyet.

Annak megállapításához, a kezdeti érték, meg kell tudni, hogy mennyi a szálak átlagos üresjárat nagy terheléshez. Figyelemmel kíséri baj közüzemi mytop (ez lehet, hogy nem működik, ha a mysql összeállított statikusan).

Vagy rendszeresen futtassa a következő parancsot:

shell> echo "SHOW globális helyzetét" | mysql | grep Threads_connected | awk '

Határozzuk meg az átlagos értéke rögzített my.cnf (thread_cache), tette a szerver újraindítása. Gyerünk, füstölt, teát ittak. Lásd állapot (parancs fent). Ha Threads_created növekszik nyugtalan magasabb, mint a cache, növeli a változó thread_cache. És így nyerni, de én nem tanácsolom, hogy növelje ezt az értéket a fenti néhány száz - fennáll a veszélye a memória.

A növekedés ilyen mértékű az is szükséges, hogy figyelemmel kíséri a Resident Set Méret mysqld folyamat a hosszú távú dinamika. Ez az oszlop RSS Utility "top". Ez azt jelenti például mysql most foglal helyet a szövetkezetek. Nem ajánlom, hogy emelje meg a fenti a fele a RAM memóriát, mert kap büntetést, amikor megszorította Start rendszer cache.

Középérték thread_cache, ahol Threads_created tartjuk elfogadható szinten, és mérsékelten mysql eszik memóriatartományok 5-100 terhelésétől függően, és a mérete a rendelkezésre álló RAM.

Túl nagy érték thread_cache indokolatlanul enni extra memóriát.

Ha nem menti, thread_cache meghaladja elképzelhető szabványok és a MySQL továbbra is zabál memória és a processzor és termel cérna, akkor lesz szükség egy átfogó optimalizálása: 1. rendszer 2. Kernel 3. scripting logika és lekérdezi 4. egyéb kiindulási lehetőség mysqld