Upravte běžící parametry MySQL, upravte soubor /etc/my.cnf Upravte parametry MySQL tak, aby se projevily po restartu MySQL po verzi MySQL 4 lze některé interní proměnné nastavit za běhu MySQL, ale při restartu MySQL to bude neplatné. Mysqld Program - adresáře a soubory basedir = cesta # Použijte daný adresář jako kořenový adresář (instalační adresář). datadir = cesta # Přečtěte databázový soubor z daného adresáře. pid-file = název souboru # Specifikovat soubor, který program mysqld ukládá ID procesu (dostupné pouze pro systémy UNIX/Linux);
[mysqld] socket = /tmp/mysql.sock # Specifikuje socket soubor pro lokální komunikaci mezi MySQL klientským programem a serverem (výchozí je soubor /var/lib/mysql/mysql.sock na Linuxu) port=3306 # Specifikuje port, který MsSQL poslouchá key_buffer = 384M # key_buffer je velikost bufferu používaného pro indexování bloků, čímž se zvyšuje index, který lépe zvládá (pro všechny čtení a vícenásobné zápisy). Index block je bufferován a sdílen všemi vlákny a velikost key_buffer závisí na velikosti paměti. table_cache = 512 # Počet otevřených tabulek pro všechna vlákna. Zvýšení této hodnoty zvyšuje počet souborových deskriptorů požadovaných mysqld. Zabraňuje tak režii, kterou by často otevíral datové tabulky sort_buffer_size = 2M # Přidělte buffer této velikosti pro každé vlákno, které je třeba seřadit. Zvýšení této hodnoty urychluje operace ORDER BY nebo GROUP BY. Poznámka: Přidělená paměť odpovídající tomuto parametru je exkluzivní pro každé spojení! Pokud je 100 připojení, pak celková velikost sortovacího bufferu, která je skutečně přidělena, je 100×6 = 600MB read_buffer_size = 2M # Velikost bufferu, který lze použít pro operaci čtecího dotazu. Stejně jako u sort_buffer_size je alokovaná paměť odpovídající tomuto parametru také exkluzivní pro každé spojení. query_cache_size = 32M # Specifikuje velikost bufferu výsledků dotazu MySQL read_rnd_buffer_size = 8M # Po seřazení změňte parametr, který se náhodně čte, pomocí ukazatele řádku. myisam_sort_buffer_size =64M # Buffer potřebný k přeuspořádání tabulek MyISAM, když se mění thread_concurrency = 8 # Maximální počet souběžných vláken je stanoven jako počet logických procesorů serveru ×2, a pokud procesor podporuje hyperthreading H.T, × 2 thread_cache = 8 # #缓存可重用的线程数 skip-locking # zabraňuje externímu uzamčení MySQL, snižuje pravděpodobnost chyb a zvyšuje stabilitu. [mysqldump] max_allowed_packet =16M # Maximální možný paket informací, který lze mezi serverem a klientem přenést
[myisamchk] key_buffer = 256M sort_buffer = 256M read_buffer = 2M write_buffer = 2M
Další volitelné parametry: back_log = 384 Specifikuje počet možných připojení pro MySQL. Když hlavní vlákno MySQL obdrží velmi velké množství požadavků na spojení během velmi krátké doby, tento parametr se uplatní a hlavní vlákno potřebuje krátkou dobu ke kontrole spojení a zahájení nového vlákna. Hodnota parametru back_log ukazuje, kolik požadavků lze uložit do zásobníku po krátkou dobu, než MySQL dočasně přestane odpovídat na nové požadavky. Pokud má systém v krátkém čase mnoho připojení, je nutné zvýšit hodnotu tohoto parametru, který určuje velikost poslechové fronty pro příchozí TCP/IP spojení. Snažit se nastavit limit, který back_log vyšší než váš operační systém, bude neúčinné. Výchozí hodnota je 50. Pro linuxové systémy se doporučuje nastavit celé číslo menší než 512. max_connections = n Maximální počet databázových připojení, které může MySQL server zvládnout současně (výchozí nastavení je 100). Pokud je limit překročen, bude hlášena chyba Příliš mnoho spojení key_buffer_size = n RMA hodnota pro indexové bloky (výchozí nastavení je 8M), což zvyšuje index pro lepší zpracování (pro všechny čtení a vícenásobné zápisy) record_buffer: Každé vlákno, které provede sekvenční skenování, přiděluje této velikosti buffer každé tabulce, kterou skenuje. Pokud děláte hodně sekvenčních skenů, možná budete chtít tuto hodnotu zvýšit. Výchozí hodnota je 131072 (128K) wait_timeout: Počet sekund, které server čeká na akci na spojení, než ho vypne. interactive_timeout: Počet sekund, které server čeká na akci na interaktivním připojení, než ho vypne. Interagující zákazník je definován jako zákazník, který používá možnost CLIENT_INTERACTIVE pro mysql_real_connect(). Výchozí hodnota je 28800, můžete ji změnit na 3600. přeskočit jméno-vyřešit Vypněte MySQL z DNS řešení na externích připojeních, použití této možnosti eliminuje čas potřebný k vyřešení DNS pomocí MySQL. Je však třeba poznamenat, že pokud je tato možnost povolena, veškeré autorizace připojení k vzdálenému hostiteli musí použít metodu IP adresy, jinak MySQL nebude schopen žádost o připojení zpracovat normálně! log-slow-queries = slow.log Zaznamenávejte pomalé dotazy a optimalizujte je jeden po druhém skip-innodb skip-bdb Uzavírejte nežádoucí typy tabulek a nepřidávajte to, pokud je to potřeba
# > ZOBRAZIT PROMĚNNÉ JAKO '%query_cache%'; # > STAV POŘADU JAKO 'Qcache%'; Pokud je hodnota Qcache_lowmem_prunes velmi velká, znamená to, že často není dostatečné bufferování; Pokud je hodnota Qcache_hits velmi velká, znamená to, že dotazovací buffer se používá velmi často, a pokud je hodnota malá, ale ovlivní efektivitu, můžete zvážit nepoužití query bufferingu. Pokud je hodnota Qcache_free_blocks velmi velká, znamená to, že v bufferu je hodně nečistot.
########################################## ###### max_allowed_packet ###### ########################################## Komunikační paket je jeden SQL příkaz zaslaný serveru MySQL nebo jeden řádek klientovi. Maximální možný paket, který lze mezi serverem MySQL 5.1 a klientem odeslat, je 1 GB. Když klient MySQL nebo server mysqld obdrží paket větší než max_allowed_packet bajtů, je vydána chyba "paket je příliš velký" a spojení je uzavřeno. U některých klientů, pokud je komunikační paket příliš velký, můžete během dotazu narazit na chybu "Ztráta spojení s MySQL serverem". Klient i server mají své vlastní max_allowed_packet proměnné, takže pokud plánujete zpracovávat velké pakety, musíte tuto proměnnou přidat jak na klienta, tak na server. Pokud používáte klientský program MySQL, jeho proměnná max_allowed_packet je výchozí 16MB. Pro nastavení větší hodnoty můžete spustit mysql následujícím způsobem: mysql> mysql --max_allowed_packet=32M Nastavuje velikost informačního balíčku na 32MB. Výchozí hodnota max_allowed_packet serveru je 1MB. Pokud server potřebuje zpracovávat velké dotazy, můžete tuto hodnotu zvýšit (například pokud se připravujete na zpracování velkých sloupců blobů). Například pro nastavení na 16MB můžete spustit server následovně: mysql> mysqld --max_allowed_packet=16M
Můžete také použít soubory nastavení max_allowed_packet. Pro nastavení této proměnné pro server na 16MB přidejte obsah downlinku do souboru možností: [mysqld] max_allowed_packet=16M Je bezpečné zvýšit hodnotu této proměnné, protože další paměť je alokována pouze tehdy, když je to potřeba. Například mysqld přidělí více paměti pouze tehdy, pokud zadáte dlouhý dotaz, nebo mysqld musí vracet velké výsledkové řádky. Malá výchozí hodnota této proměnné je preventivním opatřením k zachycení chybových paketů mezi klientem a serverem a k zajištění, že přetečení paměti není způsobeno náhodným použitím velkých paketů. Pokud používáte velké hodnoty blobů a neudělujete mysqld oprávnění k přístupu k dostatečné paměti pro zpracování dotazů, narazíte také na zvláštní problémy spojené s velkými pakety. Pokud to tušíte, zkuste začít zvyšovat ulimit -d 256000 ve mysqld_safe skriptu a restartujte mysqld. ########################################## ##### Jak otevírat a zavírat databázové tabulky v MySQL ##### ########################################## table_cache, max_connections a max_tmp_tables ovlivňují maximální počet souborů, které server udržuje otevřené. Pokud zvýšíte jednu nebo obě tyto hodnoty, můžete narazit na limit, který váš operační systém stanovil na počet souborových deskriptorů, které každý proces otevírá. Nicméně limit můžete zvýšit na mnoha systémech. Požádejte svou OS dokumentaci, abyste zjistili, jak to udělat, protože způsoby změny limitů se mezi systémy velmi liší. table_cache se týkají max_connections. Například pro 200 otevřených spojení byste měli mít tabulkový buffer alespoň 200 * n, kde n je maximální počet tabulek v spojování. Cache otevřených tabulek lze zvýšit maximálně na jeden table_cache (výchozí 64; To lze provést pomocí mysqld -O table_cache=#选项来改变). Tabulka se nikdy nezavírá, pokud není cache plná a jiné vlákno se ji pokusí otevřít, nebo pokud použijete mysqladmin refresh nebo mysqladmin flush-tables. Když je tabulková cache plná, server použije následující postup k nalezení cache záznamu k použití: Tabulky, které nejsou aktuálně používány, jsou zveřejňovány v pořadí nejméně používaných (LRU). Pokud je cache plná a nejsou žádné tabulky k uvolnění, ale je třeba otevřít novou tabulku, cache musí být dočasně zvětšena. Pokud je cache v dočasně rozšířeném stavu a tabulka se změní z aktivní na neaktivní, je uzavřena a uvolněna z cache. Otevřete tabulku pro každý současný přístup. To znamená, že pokud máte dvě vlákna, která přistupují ke stejné tabulce nebo k ní přistupují dvakrát ve stejném dotazu (s AS), je potřeba tabulku otevřít dvakrát. První otevření jakékoli tabulky zahrnuje 2 popisovače souborů; Každé další použití tabulky zahrnuje pouze jeden popisný soubor souboru. Pro první zahájení se používá další deskriptor k indexování souboru; Tento deskriptor je sdílen mezi všemi vlákny
|