Upravte bežiace parametre MySQL, upravte súbor /etc/my.cnf Upravte bežné parametre MySQL tak, aby sa prejavili po reštarte MySQL po verzii MySQL 4, niektoré vnútorné premenné sa dajú nastaviť za behu MySQL, ale pri reštarte MySQL to bude neplatné. Mysqld program - adresáre a súbory basedir = cesta # Použite daný adresár ako koreňový adresár (inštalačný adresár). datadir = cesta # Prečítajte databázový súbor z daného adresára. pid-file = názov súboru # Špecifikovať súbor pre program mysqld na uloženie ID procesu (dostupné len pre UNIX/Linux systémy);
[mysqld] socket = /tmp/mysql.sock # Špecifikuje socket súbor pre lokálnu komunikáciu medzi MySQL klientským programom a serverom (predvolený je /var/lib/mysql/mysql.sock súbor na Linuxe) port=3306 # Špecifikuje port, ktorý MsSQL počúva key_buffer = 384M # key_buffer je veľkosť bufferu používaného na indexovanie blokov, čím sa zvyšuje index, ktorý lepšie spracováva (pre všetky čítania a viacnásobné zápisy). Indexový blok je uložený a zdieľaný všetkými vláknami a veľkosť key_buffer závisí od veľkosti pamäte. table_cache = 512 # Počet otvorených tabuliek pre všetky vlákna. Zvýšenie tejto hodnoty zvyšuje počet súborových deskriptorov potrebných pre mysqld. Vyhýba sa režijným nákladom na časté otváranie dátových tabuliek sort_buffer_size = 2M # Pridelte buffer tejto veľkosti pre každé vlákno, ktoré je potrebné zoradiť. Zvýšenie tejto hodnoty urýchľuje operácie ORDER BY alebo GROUP BY. Poznámka: Pridelená pamäť zodpovedajúca tomuto parametru je exkluzívna pre každé spojenie! Ak je 100 pripojení, celková veľkosť sortovacieho bufferu, ktorá je skutočne pridelená, je 100×6 = 600MB read_buffer_size = 2M # Veľkosť vyrovnávacej pamäte, ktorú možno použiť na operáciu čítacieho dotazu. Rovnako ako pri sort_buffer_size, aj alokovaná pamäť zodpovedajúca tomuto parametru je exkluzívna pre každé spojenie. query_cache_size = 32M # Špecifikuje veľkosť výsledkovej pamäte MySQL dotazu read_rnd_buffer_size = 8M # Po zoradení zmeňte náhodný parameter pomocou ukazovateľa riadku. myisam_sort_buffer_size =64M # Na preusporiadanie MyISAM tabuliek pri zmene thread_concurrency = 8 # Maximálny počet súbežných vlákien je nastavený ako počet logických CPU servera ×2, a ak CPU podporuje H.T hyperthreading, × 2 thread_cache = 8 # #缓存可重用的线程数 skip-locking # zabraňuje externému zamknutiu MySQL, znižuje pravdepodobnosť chýb a zvyšuje stabilitu. [mysqldump] max_allowed_packet =16M # Maximálny možný paket informácií, ktorý môže byť odoslaný medzi serverom a klientom
[myisamchk] key_buffer = 256M sort_buffer = 256M read_buffer = 2M write_buffer = 2M
Ďalšie voliteľné parametre: back_log = 384 Špecifikuje počet možných pripojení pre MySQL. Keď hlavné vlákno MySQL prijme veľmi veľký počet požiadaviek na pripojenie v krátkom čase, tento parameter nadobudne účinok a hlavné vlákno potrebuje krátky čas na kontrolu pripojenia a spustenie nového vlákna. Hodnota parametra back_log určuje, koľko požiadaviek môže byť uložených v zásobníku na krátky čas, kým MySQL dočasne prestane reagovať na nové požiadavky. Ak má systém v krátkom čase veľa pripojení, je potrebné zvýšiť hodnotu tohto parametra, ktorý určuje veľkosť čakacej fronty pre prichádzajúce TCP/IP spojenia. Snažiť sa nastaviť limit, ktorý back_log vyšší než váš operačný systém, bude neúčinné. Predvolená hodnota je 50. Pre linuxové systémy sa odporúča nastaviť celé číslo menšie ako 512. max_connections = n Maximálny počet databázových pripojení, ktoré môže MySQL server súčasne spracovať (predvolené nastavenie je 100). Ak je limit prekročený, bude hlásená chyba Príliš veľa spojení key_buffer_size = n RMA hodnota pre indexové bloky (predvolené nastavenie je 8M), čím sa zvyšuje index pre lepšie spracovanie (pre všetky čítania a viacnásobné zápisy) record_buffer: Každé vlákno, ktoré vykoná sekvenčné skenovanie, priraďuje vyrovnávaciu pamäť tejto veľkosti každej tabuľke, ktorú prehľadáva. Ak robíte veľa sekvenčných skenov, možno budete chcieť túto hodnotu zvýšiť. Predvolená hodnota je 131072 (128K) wait_timeout: Počet sekúnd, počas ktorých server čaká na akciu spojenia, než ho vypne. interactive_timeout: Počet sekúnd, počas ktorých server čaká na akciu na interaktívnom pripojení, než ho vypne. Interagujúci zákazník je definovaný ako zákazník, ktorý používa možnosť CLIENT_INTERACTIVE pre mysql_real_connect(). Predvolená hodnota je 28800, môžete ju zmeniť na 3600. preskočiť meno-vyriešiť Vypnite MySQL z DNS riešenia na externých pripojeniach, použitím tejto možnosti sa eliminuje čas, ktorý MySQL potrebuje na vyriešenie DNS. Treba však poznamenať, že ak je táto možnosť povolená, všetka autorizácia pripojenia vzdialeného hostiteľa musí použiť metódu IP adresy, inak MySQL nebude schopný normálne spracovať požiadavku na spojenie! log-slow-queries = slow.log Zaznamenávajte pomalé dotazy a optimalizujte ich jeden po druhom skip-innodb skip-bdb Zatvorte nežiaduce typy tabuliek a nepridávajte to, ak je to potrebné
# > ZOBRAZIŤ PREMENNÉ AKO '%query_cache%'; # > STAV RELÁCIE AKO 'Qcache%'; Ak je hodnota Qcache_lowmem_prunes veľmi veľká, naznačuje to, že často nie je dostatočná vyrovnávacia pamäť; Ak je hodnota Qcache_hits veľmi veľká, znamená to, že sa buffer dotazov používa veľmi často, a ak je hodnota malá, ale ovplyvní efektivitu, môžete zvážiť nepoužitie bufferovania dotazov. Ak je hodnota Qcache_free_blocks veľmi veľká, znamená to, že v zásobníku je veľa nečistôt.
########################################## ###### max_allowed_packet ###### ########################################## Komunikačný paket je jeden SQL príkaz odoslaný MySQL serveru alebo jeden riadok klientovi. Maximálny možný paket, ktorý môže byť odoslaný medzi serverom MySQL 5.1 a klientom, je 1 GB. Keď MySQL klient alebo mysqld server prijme paket väčší ako max_allowed_packet bajtov, vydá sa chyba "paket je príliš veľký" a spojenie sa ukončí. Pre niektorých klientov, ak je komunikačný paket príliš veľký, môžete počas dotazu naraziť na chybu "Strata pripojenia k MySQL serveru". Klient aj server majú svoje vlastné max_allowed_packet premenné, takže ak plánujete spracovať veľké pakety, musíte túto premennú pridať na klienta aj server. Ak používate klientský program mysql, jeho max_allowed_packet premenná je predvolene 16MB. Ak chcete nastaviť väčšiu hodnotu, môžete začať mysql nasledovným spôsobom: mysql> mysql --max_allowed_packet=32M Nastavuje veľkosť informačného balíka na 32MB. Predvolená hodnota max_allowed_packet pre server je 1MB. Ak server potrebuje spracovať veľké dotazy, môžete túto hodnotu zvýšiť (napríklad ak sa pripravujete na spracovanie veľkých blob stĺpcov). Napríklad, ak ho nastavíte na 16MB, môžete spustiť server nasledovne: mysql> mysqld --max_allowed_packet=16M
Na nastavenie max_allowed_packet môžeš použiť aj súbory s nastaveniami. Ak chcete nastaviť túto premennú pre server na 16MB, pridajte obsah downlinku do súboru možností: [mysqld] max_allowed_packet=16M Je bezpečné zvýšiť hodnotu tejto premennej, pretože dodatočná pamäť sa prideľuje len vtedy, keď je to potrebné. Napríklad mysqld pridelí viac pamäte len vtedy, ak zadáte dlhý dotaz alebo mysqld musí vracať veľké riadky výsledkov. Malá predvolená hodnota tejto premennej je preventívnym opatrením na zachytenie chybových paketov medzi klientom a serverom a na zabezpečenie, že pretečenie pamäte nie je spôsobené náhodným použitím veľkých paketov. Ak používate veľké hodnoty blobov a neudeľujete mysqld povolenie na prístup k dostatočnej pamäti na spracovanie dotazov, narazíte aj na zvláštne problémy spojené s veľkými paketmi. Ak máte podozrenie, skúste začať zvyšovať ulimit -d 256000 v mysqld_safe skripte a reštartujte mysqld. ########################################## ##### Ako otvárať a zatvárať databázové tabuľky v MySQL ##### ########################################## table_cache, max_connections a max_tmp_tables ovplyvňujú maximálny počet súborov, ktoré server udržiava otvorené. Ak zvýšite jednu alebo obe tieto hodnoty, môžete naraziť na limit, ktorý váš operačný systém stanovuje na počet súborových deskriptorov, ktoré každý proces otvorí. Avšak limit môžete zvýšiť na mnohých systémoch. Požiadajte svoju dokumentáciu operačného systému, aby ste zistili, ako to urobiť, pretože spôsoby zmeny limitov sa veľmi líšia systém od systému. table_cache súvisiace s max_connections. Napríklad pre 200 otvorených spojov by ste mali mať tabuľkový buffer aspoň 200 * n, kde n je maximálny počet tabuliek v spojení. Cache otvorených tabuliek je možné zvýšiť maximálne o jeden table_cache (štandardne 64; To sa dá urobiť pomocou mysqld -O table_cache=#选项来改变). Tabuľka sa nikdy nezatvára, okrem prípadov, keď je cache plná a iné vlákno sa pokúsi otvoriť tabuľku, alebo ak použijete mysqladmin refresh alebo mysqladmin flush-tables. Keď je cache tabuľky plná, server použije nasledujúci postup na nájdenie záznamu cache na použitie: Tabuľky, ktoré sa momentálne nepoužívajú, sa zverejňujú v poradí najmenej používaných (LRU). Ak je cache plná a nie sú žiadne tabuľky na uvoľnenie, ale je potrebné otvoriť novú tabuľku, cache musí byť dočasne rozšírená. Ak je cache v dočasnom rozšírenom stave a tabuľka sa zmení z aktívnej na neaktívnu, je uzavretá a uvoľnená z cache. Otvorte tabuľku pre každý súbežný prístup. To znamená, že ak máte 2 vlákna, ktoré pristupujú k tej istej tabuľke alebo k nej pristupujú dvakrát v rovnakom dotaze (s AS), tabuľka musí byť otvorená dvakrát. Prvé otvorenie akejkoľvek tabuľky zahŕňa 2 popisy súborov; Každé ďalšie použitie tabuľky zahŕňa len jeden súborový deskriptor. Pri prvom úvode sa používa ďalší deskriptor na indexovanie súboru; Tento deskriptor je zdieľaný medzi všetkými vláknami
|