sql >> Databáze >  >> RDS >> Mysql

přeskočit kopírování do tabulky tmp na disku mysql

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.



  1. JDBC ResultSet:Potřebuji getDateTime, ale existuje pouze getDate a getTimeStamp

  2. SQL:Získejte produkty z kategorie, ale také musí být v jiné sadě kategorií

  3. Funkce CURRENT_TIMESTAMP() v Oracle

  4. Jak povolím MSDTC na SQL Server?