Existují dvě věci, které můžete udělat pro snížení dopadu tímto
MOŽNOST #1:Zvyšte počet proměnných tmp_table_size a/nebo max_heap_table_size
Tyto možnosti budou určovat, jak velká může být dočasná tabulka v paměti, než bude považována za příliš velkou a poté stránky na disk jako dočasná tabulka MyISAM. Čím větší jsou tyto hodnoty, tím je méně pravděpodobné, že se „zkopíruje do tabulky tmp na disk“. Ujistěte se prosím, že váš server má dostatek paměti RAM a max_connections je středně nakonfigurován, pokud by jedno DB připojení potřebovalo hodně paměti RAM pro své vlastní dočasné tabulky.
MOŽNOST #2:Použijte RAM disk pro tmp tabulky
Měli byste být schopni nakonfigurovat RAM disk v Linuxu a poté nastavit tmpdir v mysql je složka, ve které je připojen RAM disk.
Pro začátek nakonfigurujte RAM disk v OS
Vytvořte složku v Linuxu s názvem /var/tmpfs
mkdir /var/tmpfs
Dále přidejte tento řádek do /etc/fstab (například pokud chcete 16GB RAM disk)
none /var/tmpfs tmpfs defaults,size=16g 1 2
a restartujte server.
Poznámka:Je možné vytvořit RAM disk bez restartu. Jen nezapomeňte přidat výše uvedený řádek do /etc/fstab, abyste měli RAM disk po restartu serveru.
Nyní k MySQL:
Přidejte tento řádek do /etc/my.cnf
[mysqld]
tmpdir=/var/tmpfs
a restartujte mysql.
MOŽNOST #3:Získejte tabulku tmp na disk RAM ASAP (za předpokladu, že nejprve použijete MOŽNOST #2)
Možná budete chtít co nejrychleji vnutit tabulky tmp na disk RAM, aby se MySQL neroztočilo při migraci velkých tabulek tmp v paměti na disk RAM. Stačí přidat toto do /etc/my.cnf:
[mysqld]
tmpdir=/var/tmpfs
tmp_table_size=2K
a restartujte mysql. To způsobí, že i ta nejmenší dočasná tabulka vznikne přímo na disku RAM. Můžete pravidelně spouštět ls -l /var/tmpfs
sledovat přechodné tabulky přicházející a odcházející.
Vyzkoušejte to !!!
UPOZORNĚNÍ
Pokud v /var/tmpfs 24/7 nevidíte nic jiného než dočasné tabulky, může to ovlivnit funkčnost/výkon OS. Abyste se ujistili, že /var/tmpfs nebude přeplněný, podívejte se na vyladění svých dotazů. Jakmile to uděláte, měli byste vidět méně tabulek tmp, které se zhmotňují ve /var/tmpfs.