it-swarm-eu.dev

Jak nákladné je otevírání a zavírání připojení DB?

Jak náročné na CPU je otevírání a zavírání připojení DB (pro webovou aplikaci) v MySQL

  • ... když je software DB na localhost?
  • ... když je software DB na jiném počítači?
15
ThinkingMonkey

Přemýšlejte o množství paměti přidělené na připojení DB. Co musí být přiděleno? Podle MySQL 5.0 Certifikační studijní příručka, strana 357 :

Server udržuje několik vyrovnávacích pamětí pro každé připojení klienta. Jeden se používá jako komunikační buffer pro výměnu informací s klientem. Ostatní vyrovnávací paměti jsou udržovány na klienta pro čtení tabulek a provádění operací spojování a třídění.

Jaká nastavení upravují vyrovnávací paměti pro připojení?

Jakmile dojde k připojení, přidělení a uvolnění těchto vyrovnávacích pamětí vyžaduje čas. Nezapomeňte násobit součet těchto hodnot max_connections . Jako vedlejší poznámku nepoužívejte mysql_pconnect as PHP a trvalé připojení MySQL nevycházejí dobře. Zde jsou dva informativní odkazy na toto téma:

V prostředí s vysokým čtením, jako je například OLTP, by to bylo drahé, pokud jde o použití RAM využití a možná inhibice v důsledku výměny v operačním systému). „To bych se nebál.

12
RolandoMySQLDBA

Nejsem si jistý, že na tom záleží „o kolik dražší“. Je to jistě nákladnější než opakované použití stejného připojení. To, co budete sledovat, bude záviset na tom, zda správně používáte sdružování připojení, jak je nasycený váš fond, dostupné zdroje na krabici atd.

Obecně platí, že pokud provádíte smyčku, abyste provedli nějakou interakci s databází, budete daleko lepší z opakovaného použití stejného aktivního připojení než otevírání a zavírání v rámci smyčky (anti- vzor, ​​který vidím docela často).

10
Aaron Bertrand

Dilema mezi opětovným použitím objektu a jeho roztržením a opětovným vybudováním (které mají výhody i nevýhody) lze často řešit kompromisem: ukládá se do mezipaměti, ale po omezenou dobu (tj. S vypršením). Pokud je k objektu často přistupováno, bude se opakovaně používat. Pokud se však nějaký čas nepoužívá, mechanismus expirace jej zlikviduje a nutí jej znovu vytvořit, když je potřeba znovu.

Systém může mít globální hák pro tyto druhy mezipaměti, který se vyvolá, když je nedostatek paměti, což způsobí, že všechny z nich upustí nedávno nepoužívané objekty.

4
Dude

MySQL mezipaměti připojení (nebo podprocesů) pomocí mezipaměti podprocesu (thread_cache_size). Maximální hodnota je 100. Když klient ukončí připojení, vrátí se do mezipaměti. Když se otevře nové připojení, zkontroluje mezipaměť podprocesů. Ve velmi zaneprázdněném systému může být otevření uzavíracího připojení drahé, zejména pokud máte dlouhodobě spuštěné dotazy.

https://dev.mysql.com/doc/refman/5.6/en/connection-threads.html Pokud si můžete dovolit Mysql Enterprise, můžete použít doplněk Thread Pool implementovaný v Mysql 5.6 .

2
greenlitmysql