Állítsd be a MySQL futó paramétereit, módosítsd az /etc/my.cnf fájlt Állítsd be a MySQL futtatási paramétereit, hogy a MySQL újraindítása után lépjenek életbe, a MySQL 4 verzió után néhány belső változó beállítható, de a MySQL újraindításkor érvénytelen lesz. MySQL program – könyvtárak és fájlok basedir = path # Használd a megadott könyvtárat gyökérkönyvtárként (telepítési könyvtárként). datadir = út # Olvasd el az adatbázis fájlt egy adott könyvtárból. pid-file = fájlnév # Határozz meg egy fájlt a mysqld programnak a folyamat azonosítójának tárolására (csak UNIX/Linux rendszerekhez érhető el);
[mysqld] socket = /tmp/mysql.sock # Socket fájlt ad a MySQL kliens program és a szerver közötti helyi kommunikációhoz (az alapértelmezett fájl /var/lib/mysql/mysql.sock Linuxon) port=3306 # Megadja azt a portot, amit az MsSQL hallgat key_buffer = 384M # key_buffer az indexelési blokkokhoz használt puffer mérete, így az indexet jobban kezeli (minden olvasásnál és többszörös írásnál). Az index blokk pufferelt és minden szál által megosztott, és a key_buffer mérete a memória méretétől függ. table_cache = 512 # Az összes szál számára nyitott táblák száma. Ennek az értéknek a növelése növeli a mysqld által szükséges fájlleírók számát. Elkerüli a gyakori adattáblák megnyitásának többletterhelését sort_buffer_size = 2M # Minden rendezendő szálhoz kijelölj egy ilyen méretű puffert. Ennek az értéknek a növelése felgyorsítja a ORDER BY vagy GROUP BY műveleteket. Megjegyzés: A paraméterhez tartozó memória kizárólag minden kapcsolatra vonatkozik! Ha 100 kapcsolat van, akkor a tényleges rendezési puffer teljes mérete 100×6 = 600MB read_buffer_size = 2M # Az olvasó lekérdezési művelethez használható puffer mérete. Ahogy sort_buffer_size-nél is, az ehhez a paraméterhez tartozó kijelölt memória is kizárólag minden kapcsolatra vonatkozik. query_cache_size = 32M # Megadja a MySQL lekérdezés eredménypuffer méretét read_rnd_buffer_size = 8M # A sormutatóval való rendezés után véletlenszerűen olvasható paramétert módosítsuk. myisam_sort_buffer_size =64M # Puffer szükséges a MyISAM táblák átrendezéséhez a változáskor thread_concurrency = 8 # Az egyidejű szálak maximális száma a szerver logikai CPU-inak száma ×2, és ha a CPU támogatja a H.T hiperszálozást, akkor 2 × thread_cache = 8 # #缓存可重用的线程数 a skip-locking # elkerüli a MySQL külső zárolását, csökkenti a hibák esélyét, és növeli a stabilitást. [mysqldump] max_allowed_packet =16M # A szerver és az ügyfél között elküldhető maximális információcsomag
[myisamchk] key_buffer = 256M sort_buffer = 256M read_buffer = 2 millió write_buffer = 2M
Egyéb opcionális paraméterek: back_log = 384 Megadja a MySQL lehetséges kapcsolatainak számát. Amikor a MySQL fő szál nagyon rövid idő alatt nagyon sok kapcsolati kérést kap, ez a paraméter lép életbe, és a fő szál rövid időbe telik ellenőrizni a kapcsolatot és új szálat indítani. back_log paraméter értéke azt mutatja, hány kérést lehet rövid ideig tárolni a veremben, mielőtt a MySQL ideiglenesen megáll az új kérésekre való válaszadással. Ha a rendszerben rövid idő alatt sok kapcsolat van, növelni kell ennek a paraméternek az értékét, amely meghatározza a bejövő TCP/IP kapcsolatok hallgatási sorának méretét. Ha megpróbálsz olyan határt beállítani, ami back_log magasabb, mint az operációs rendszered, az hatástalan. Az alapértelmezett érték 50. Linux rendszereknél ajánlott egy egész számot 512-nél kisebbnek állítani. max_connections = n A MySQL szerver által egyszerre kezelhető adatbázis-kapcsolatok maximális száma (az alapértelmezett beállítás 100). Ha a határt átlépik, a Túl sok kapcsolat hiba jelenthető key_buffer_size = n RMA érték indexblokkokra (alapértelmezett beállítás 8M), az index növelése a jobb kezelés érdekében (minden olvasás és multiwrite esetén) record_buffer: Minden szál, amely sorozatos szkennelést végez, egy ilyen méretű puffert oszt ki minden bevizsgált táblának. Ha sok szekvenciális vizsgálatot végzel, érdemes lehet növelni ezt az értéket. Az alapértelmezett érték 131072 (128K) wait_timeout: Az a másodperc, hány másodpercet vár a szerver a kapcsolat működésére, mielőtt leállítja azt. interactive_timeout: Az a másodperc, hány másodpercre vár a szerver egy interaktív kapcsolaton, mielőtt leállítja azt. Az interaktív ügyfél olyan ügyfélként definiálható, aki a CLIENT_INTERACTIVE opciót használja mysql_real_connect(). Az alapértelmezett érték 28800, módosíthatod 3600-ra. Skip-name-resolve A MySQL DNS-felbontásának tiltása külső kapcsolatokon, így ezzel az opcióval kizárja a MySQL DNS-megoldásának idejét. Ugyanakkor meg kell jegyezni, hogy ha ez az opció engedélyezve, minden távoli hoszt-kapcsolat hitelesítésnek az IP-cím metódusát kell használnia, különben a MySQL nem tudja normálisan feldolgozni a kapcsolati kérelmet! log-slow-queries = slow.log Rögzítsd a lassú lekérdezéseket, és optimalizáld őket egyenként skip-innodb skip-bdb Zárd be a nem kívánt táblázattípusokat, és ne add hozzá ezt, ha szükség van rá
# > OLYAN VÁLTOZÓKAT MUTATNAK, MINT A '%query_cache%'; # > STÁTUSZT MUTATHAT, MINT 'Qcache%'; Ha a Qcache_lowmem_prunes érték nagyon nagy, az azt jelzi, hogy gyakran nincs elég pufferelés; Ha a Qcache_hits értéke nagyon nagy, az azt jelzi, hogy a lekérdezési puffert nagyon gyakran használják, és ha az érték kicsi, de befolyásolja a hatékonyságot, akkor érdemes lehet nem használni lekérdezési pufferelést. Ha a Qcache_free_blocks értéke nagyon nagy, az azt jelzi, hogy sok törmelék van a pufferben.
########################################## ###### max_allowed_packet ###### ########################################## A kommunikációs csomag egyetlen SQL utasítás, amelyet a MySQL szervernek vagy egyetlen sor küldenek az ügyfélnek. A MySQL 5.1 szerver és az ügyfél között a lehető maximális csomag 1 GB. Amikor egy MySQL kliens vagy mysqld szerver max_allowed_packet bájtnál nagyobb csomagot kap, "csomag túl nagy" hiba keletkezik, és a kapcsolat lezárul. Néhány kliensnél, ha a kommunikációs csomag túl nagy, a lekérdezés során előfordulhat, hogy "Kapcsolatvesztés a MySQL szerverrel" hibával. Mind a kliensnek, mind a szervernek megvannak a saját max_allowed_packet változói, így ha nagy csomagokat tervezel kezelni, ezt a változót mind a kliensre, mind a szerverre kell hozzáadnod. Ha mySQL kliens programot használsz, a max_allowed_packet változója alapértelmezés 16MB. Nagyobb érték beállításához a mysql-t a következő módon indíthatod: mysql> mysql --max_allowed_packet=32M Az információcsomag méretét 32MB-ra állítja be. A szerver alapértelmezett max_allowed_packet értéke 1MB. Ha a szervernek nagy lekérdezéseket kell feldolgoznia, növelheted ezt az értéket (például ha nagy blob oszlopokat dolgozunk fel). Például, ha 16MB-ra szeretnéd állítani, a szervert a következőképpen indíthatod el: mysql> mysqld --max_allowed_packet=16M
Opció fájlokat is használhatsz max_allowed_packet beállításhoz. A szerver változójának beállításához 16MB-ra adjunk le lefelé irányuló tartalmat az opciók fájlba: [mysqld] max_allowed_packet=16M Biztonságos növelni ennek a változónak az értékét, mert csak szükség esetén külön memóriát biztosítanak. Például a mysqld csak akkor oszt több memóriát, ha hosszú lekérdezést adsz ki, vagy a mysqldnek nagy eredménysorokat kell visszaadnia. Ennek a változónak a kis alapértelmezett értéke óvintézkedésként szolgál a hibacsomagok elkapására a kliens és a szerver között, és annak biztosítására, hogy a memória túlcsordulása ne okozza nagy csomagok véletlen felhasználása miatt. Ha nagy tömbértékeket használsz, és nem ad engedélyt a mysqld-nek ahhoz, hogy elegendő memóriához hozzáférjen a lekérdezésekhez, akkor furcsa problémákba ütközhetsz a nagy csomagokkal kapcsolatban. Ha gyanítod, hogy ez így van, próbáld meg elkezdeni növelni az ulimit -d 256000 értéket mysqld_safe szkriptben, és újraindítsd a mysqld-et. ########################################## ##### Hogyan nyitunk és zárjuk az adatbázistáblákat a MySQL-ben ##### ########################################## table_cache, max_connections és max_tmp_tables befolyásolják, hogy a szerver mennyi maximális fájlszámot tart nyitva. Ha ezek közül az egyik vagy mindkét értéket növeled, elérheted az operációs rendszer által előírt korlátot, amely a folyamat által megnyitott fájlleírók számára vonatkozik. Azonban sok rendszeren növelheted a határt. Kérdezd meg az operációs rendszer dokumentációját, hogy hogyan lehet ezt megvalósítani, mivel a korlátok módosításának módszerei rendszerenként jelentősen eltérnek. table_cache max_connections-hoz kapcsolódik. Például 200 nyitott csatlakozásnál legalább 200 * n táblöfre kell rendelkezni, ahol n a maximális tábla száma egy csatlakozásban. A nyitott táblák gyorsítótárát maximum egy table_cache-re lehet növelni (alapértelmezés szerint 64; Ez megvalósítható a mysqld -O table_cache=#选项来改变). Egy tábla sosem záródik be, kivéve, ha a gyorsítótár tele van, és egy másik szál megpróbál megnyitni egy táblát, vagy ha használod a mysqladmin refresh vagy mysqladmin flush-table-t. Amikor a tábla gyorsítótár tele van, a szerver a következő eljárást alkalmazza, hogy megtalálja a gyorsítótár bejegyzést: A jelenleg nem használt táblákat adják ki, a legkevésbé használt (LRU) sorrendben. Ha a cache tele van, és nincs kiadni kívánt táblázat, de új táblát kell megnyitni, akkor a cache-t ideiglenesen nagyítani kell. Ha a gyorsítótár ideiglenesen kibővített állapotban van, és egy tábla aktívról inaktívra változik, akkor bezárják és kiszabadulnak a gyorsítótárból. Nyiss egy táblázatot minden egyidejű hozzáféréshez. Ez azt jelenti, hogy ha két szál fér hozzá ugyanahhoz a táblához vagy kétszer is hozzáfér ugyanabban a lekérdezésben (AS-szal), akkor a táblát kétszer kell megnyitni. Bármely tábla első megnyitása két fájlleírót tartalmaz; Minden további táblázathasználat csak egy fájlleírót jelent. Az első megnyitáshoz egy extra leíró szolgál a fájl indexeléséhez; Ez a leírás minden szál között megosztott
|