English version
German version
Spanish version
French version
Italian version
Portuguese / Brazilian version
Dutch version
Greek version
Russian version
Japanese version
Korean version
Simplified Chinese version
Traditional Chinese version
Hindi version
Czech version
Slovak version
Bulgarian version
 

40/sec na 500/sec

Software RSS Feed





IntroductionSurprised tím, že titul? dobře, to je výlet, jak jsme popraskané škálovatelnost uhranout z manipulace hubené 40 záznamů za sekundu na 500 záznamů za sekundu. Dejte si pozor, většina problémů, kterým čelí jsme byli vpřed, může to zkušení lidé najít to zbytečné. Obsah * 1.0 Kde jsme to skončili? 1.1 Memory hity obloze 1,2 Nízká rychlost zpracování 1,3 ztrátě dat :-( 1,4 Mysql nás táhne dolů 1,5 Slow Web Client * 2.0 Road Nirvana2.1 na paměti Controlling! 2.2 Zefektivnění zpracování sazba 2,3 Jaké ztráty dat uh-uh? 2.4 Ladění SQL dotazů 2,5 ladění schématu databáze MySQL 2.5 pomáhá nám vyrazit kupředu! 2.6 Faster ... rychleji Web Client * 3.0 Bottom lineWhere jsme? Původně jsme měli systém, který by mohl pouze v rozsahu až 40 záznamů / sec. Mohl bych ještě vzpomenout diskusi na téma "co by mělo být ideální míra záznamů?". Nakonec jsme se rozhodli, že se 40/sec ideální rychlost pro jeden firewall. Takže když máme jít ven, aspoň jsme potřebovali podporu 3 firewally. Z tohoto důvodu jsme se rozhodli, že 120/sec by bylo ideální míry. Na základě údajů z našeho konkurenta (y) jsme dorazili do závěru, že by mohli podpořit kolem 240/sec. Mysleli jsme, že je to ok! jak to bylo naše první vydání. Protože všechny konkurenty mluvil o počtu firewall on podporoval, ale ne na rate.Memory hity skyOur paměť byla vždy bít nebi i na 512 mb! (OutOfMemory výjimky) jsme vinu cewolf (y) inmemory cache vzniklého images.But jsme nemohli uniknout na dlouho! Nezáleží na tom, zda jsme připojen klient nebo ne jsme použili k hitu obloze za pár dní, max. 3-4 dny byt! Je zajímavé, že to bylo reprodukovatelné, když jsme odeslaných dat na velmi vysoké úrovni (pak), přibližně 50/sec. Uhodli jste pravdu, neomezený vyrovnávací paměť, která roste, dokud nenarazí roof.Low zpracování rateWe bylo zpracování záznamů ve výši 40/sec. Byli jsme za použití hromadného aktualizace dataobject (y). Ale to se nedá očekávat, rychlost! Protože toto jsme začali hromadit data v paměti za následek hromadění paměti! :-( ztráta dat při velmi vysokých rychlostech jsme si ujít mnoho paketu (y). My se zdálo, že má málo ztráty dat, ale vyústil v paměti vepř. On some tweaking omezit buffer Velikost jsme začali mít trvalé ztrátě dat přibližně 20% na velmi vysoké rates.Mysql posadí nás downWe měli před sebou těžké časy, kdy jsme dovezli log soubor asi 140 megabajt Mysql začal prase, stroj začal plazit a někdy to dokonce zastavit responding.Above všichni, začali jsme dostat deadlock (y) a transakce timeout (y). Který nakonec snižuje reakce system.Slow webu ClientHere jsme opět obvinil počet grafy jsme ukázali na stránce, jako úzký profil, ignoruje skutečnost, že existuje řada dalších faktorů, které byly roztažením systému dolů. Stránek, aby se 30 sekund, aby zatížení na stránku s 6-8 grafů a tabulek po 4 dnech na internetu Center.Road dat do paměti NirvanaControlling! Snažili jsme se dát limit velikosti vyrovnávací paměti na 10.000, ale to netrvalo dlouho. Hlavní chybu v návrhu bylo, že jsme se předpokládalo, že buffer kolem 10.000 bude stačit, tj. bychom procesu záznamy před nárazníkovou 10,1000 dosáhne. Inline se zásadou "Něco se může pokazit to se pokazí!" nevyšlo to. Začali jsme ztráty dat. Subsesquently jsme se rozhodli jít s plochým soubor založený v mezipaměti, v němž byla data vyhozeny do bytu a soubor by byly vloženy do databáze pomocí "načíst data infile". To bylo mnohokrát rychleji než hromadnou vložit pomocí ovladače databáze. Můžete také k pokladně některé možnosti optimalizace se načíst data infile. Tato fixní náš problém zvýšit velikost vyrovnávací paměti ze surového records.The druhý problém, kterým jsme čelili byla zvýšení cewolf (y) v paměti cache mechanismu. Ve výchozím nastavení se používá "TransientSessionStorage", který ukládá do paměti cache obraz objektů v paměti, zdálo se, že nějaký problém při čištění objektů, dokonce i po rerferences bylo ztraceno! Tak jsme napsali malý "FileStorage" provedení, které uchovávají obraz objektů v místní soubor. A bylo by sloužil jak a kdy přijde žádost palců Kromě toho jsme také implmentated vyčištění mechanismus k čištění nehybné obrazy (fotografie starší než 10mins). Dalším zajímavým aspektem jsme zjistili, že zde byl sběratel Garbage měl nejnižší prioritu, takže objekty vytvořené pro jednotlivé záznamy, byli sotva uklidil. Tady je malý matematický vysvětlit závažnost problému. Kdykoli jsme obdrželi záznam záznam jsme vytvořili ~ 20 objektů (HashMap, tokenized řetězce atd.), takže v poměru 500/sec za 1 sekundu, počet objektů byl 10000 (20 * 500 * 1). Vzhledem k těžkým zpracování sběratel odpadkové nikdy neměli možnost vyčištění objektů. Takže všechno, co jsme museli udělat, bylo menší štípnout, jen účelově "null" na objekt odkazy. Voila! odpadky sběratel nikdy nebyl mučen Myslím, že ;-) zefektivnění zpracování rateThe zpracování kurzu byla v hubené 40/sec to znamená, že bychom mohli jen stěží odolat i malý výbuch log záznamů! Paměti, dal nám útěchu, ale skutečný problém byl s použitím záznamu filtry za záznamů. Měli jsme asi 20 vlastnosti jsou u všech záznamů, jsme použili k vyhledání všech vlastností. Změnili jsme k provádění Zápas pro ty vlastnosti jsme kritéria pro! Kromě toho jsme také měli únik paměti v záznamu filtr zpracování. Jsme udržuje fronty, která rostla navždy. Takže jsme museli udržovat byt soubor objekt dumping, aby se zabránilo re-analýzu záznamů, které se tvoří předměty! Navíc jsme dělávali akt hledání zápas pro každou vlastnost, i když jsme neměli žádné varování kritéria configured.What ztrátě dat, uh-uh? Jakmile jsme pevnou pamětí problémy v přijímání dat, tj. shazování do plochého souboru, nikdy jsme ztracená data! Kromě toho, že jsme museli odstranit pár nechtěných indexy v syrové tabulce, aby se zabránilo režijní, zatímco dumping dat. Jsme hadd indexy sloupců, které by mohly mít maximálně 3 možných hodnot. Které skutečně provedené vložit pomalejší a nebyl useful.Tuning SQL QueriesYour vaše dotazy jsou klíčem k výkonnosti. Jakmile začnete nastřelovací problémy, budete vidět, že jste mohl dokonce mít až k de-normalizovat tabulky. Dokázali jsme to! Zde jsou některé z nejdůležitější poznatky: * Použijte "Analyzovat tabulku", aby zjistil, jak funguje mysql dotazu. To vám dá představu o tom, proč dotaz je pomalý, tj. zda je používáte správné indexy, zda je použití tabulky úrovně skenování apod. * Nikdy neodstraňujte řádky, když jednáte s obrovským dat v řádu 50.000 záznamů v jedné tabulce. Se vždy snaží dělat "drop table" co nejvíce. Pokud to není možné, redesign schématu, je to vaše jediná cesta ven! * Vyhnout se nežádoucí vstup (y), nebojte se, aby de-normalize (tj. duplicitní sloupec hodnot) Vyhněte se připojit (y) co možná nejvíce , mají tendenci tahat svůj dotaz dolů. Jeden skrytý výhodou je skutečnost, že v jednoduchosti uložit vaše dotazy .* Pokud máte co do činění s hromadnou dat, vždy používejte "načíst data infile" existují dvě možnosti, zde, místní a vzdálené. Použití místní pokud mysql a aplikace jsou ve stejném stroji jinak používat dálkový .* Snažte se rozdělit své složité dotazy na dva nebo tři jednodušší dotazy. Výhody tohoto přístupu je, že mysql zdroj není upíná se na celý proces. Inklinují k použití dočasné tabulky. Namísto použití jediného dotazu, která se rozpíná po celé tabulky 5.6 .* Když se zabývá velké množství dat, tedy proces, který chcete říct, 50000 záznamy a více v jednom dotazu zkuste použít limit pro dávkové zpracování záznamů. To vám pomůže měřítko systému do nových výšek * Vždy používejte menší transakce (y) namísto velkých tj. kostra v "n" tabulky. Tento uzamkne mysql zdroje, které by mohly způsobit pomalost systému i pro jednoduché dotazy * Použití join (y) na sloupech s indexy nebo cizí klíče * Ujistěte se, že dotazy z uživatelského rozhraní, mají kritéria nebo omezit .* také zajistit, že kritéria sloupec indexován * Nemáte číselné hodnoty v SQL kritérií do uvozovek, protože to mysql typu obsazení * použití dočasné tabulky co nejvíce, a pokles to ...* Vložení vybrat / smazat je dvojí tabulky zámek ... být si vědom ...* Postarejte se, že nemáte bolesti mysql databáze četnost aktualizací do databáze. Měli jsme typický případ jsme na skládku do Databáze po každých 300 záznamů. Takže když jsme začali testování 500/sec začali jsme viděli, že mysql doslova táhl nás. To je, když jsme si uvědomili, že typicall ve výši 500/sec je "načíst data infile" žádost každou sekundu na MySQL databázi. Takže jsme museli změnit na výpis záznamů po 3 minutách než 300 records.Tuning databáze schemaWhen jednáte s obrovskými objemy dat, vždy zajistit že rozdelovat dat. To je vaše cesta k škálovatelnost. Jednoduchou tabulku s řekněme 10 lakhs nikdy měřítku. Když máte v úmyslu provádět dotazy na zprávy. Vždy mít dvě úrovně stoly, stolky surového jeden pro aktuální údaje a další nastavení pro zprávy tabulek (tabulky, které uživatelské rozhraní, na dotaz!) vždy zajistí, že údaje o vaší zprávě tabulky nikdy poroste nad limit. Zapouzdřit plánujete používat Oracle, můžete vyzkoušet rozdělení na základě kritérií. Mysql, ale bohužel nepodporuje to. Takže se budeme muset udělat. Zachovat meta tabulku, v níž máte informace v hlavičce, tj. tabulky, které se hledat, pro daný soubor kritérií, obvykle čas .* Museli jsme projít si naše schéma databáze a jsme přidali přidat některé indexy, odstraňte některé i duplicitní sloupce (y) odstranit nákladné vstup (y) .* Do budoucna jsme si uvědomili, že mít syrové tabulky InnoDB, jak byl ve skutečnosti nad hlavou do systému, takže jsme to změnil na MyISAM * Také jsme šli do té míry snížit počet řádků ve statických tabulkách účastní se připojí * NULL v databázi tabulky se zdá způsobit snížení výkonu, a tak se jim vyhnout * Nemáte indexy na sloupcích, která umožnila hodnoty 2.3 * Cross zkontrolovat, že je třeba pro každý index v tabulce, jsou nákladné. Jestliže jsou tabulky InnoDB pak dvakrát zkontrolujte jejich potřeby. Vzhledem k tomu, InnoDB tabulky Zdá se, že přibližně 10-15 krát větší než MyISAM tabulek MyISAM .* Používejte vždy, když je většina, a to buď jeden (nebo zvolte vložit) dotazů. Je-li vložit a vyberte možnost se bude více, pak je lepší mít to jako InnoDBMysql nám pomáhá postupovat vpřed! Nalaďte si MySQL server až po jemné vyladění vašich dotazů / schémata a kód. Teprve potom můžete vidět zřetelné zlepšení výkonnosti. Tady jsou některé z parametrů, které přijde vhod: * Použijte vyrovnávací paměti velikosti bazénu, který umožní vaše dotazy k výkonu rychleji - innodb_buffer_pool_size = 64M pro InnoDB a použití - klíč-bufer-size = 32M pro MyISAM * Dokonce i jednoduché dotazy začala brát více času, než se očekávalo. Byli jsme opravdu zmaten! Uvědomili jsme si, že mysql Zdá se, že zatížení indexu každého stolu začíná na vkládání. Tak co typicky se stalo, byla každý jednoduchý dotaz na tabulku s 5-10 řádky se kolem 1-2 sekund. Na další analýze jsme zjistili, že těsně předtím, než jednoduchý dotaz: "načíst data infile" se stalo. Tento zmizelo, když jsme změnili surový tabulky typu MyISAM, protože velikost vyrovnávací paměti pro MyISAM a InnoDB jsou dva různé configurations.for více konfigurovatelné parametry viz here.Tip: spuštění mysql začít s následující volby - log-error to umožní, aby dluh loggingFaster ... ClientThe rychlejší webové uživatelské rozhraní je klíčové, aby všechny výrobky, zejména vnímané rychlosti stránky je důležitější! Zde je seznam řešení a poznatky , které by mohly přijít vhod: * Pokud jsou data se nebude měnit za 3-5 minuty říct, že je lepší cache stránek straně klienta * inklinují k použití Iframe (y) pro vnitřní grafy atd. dávají vnímány stálostí na Vaše stránky. Ještě lepší je použít na javascript obsahu nakládací mechanismus. To je něco, co budete chtít dělat, když máte říct, 3 + grafy v téže stránce .* Internet Explorer zobrazí celou stránku pouze tehdy, když všechny obsah obdržené ze serveru. Tak to je vhodné použít iframe a javascriptu obsahu nakládání .* Nikdy nepoužívejte více / duplicitní záznamy v souboru CSS v html stránce. Internet explorer inklinuje k zatížení jednotlivých CSS soubor jako samostatná položka a vztahuje se na kompletní stránky! Bottomline Vaše dotazy a schématu, aby systém pomaleji! Opravit a pak vinu databázi! Viz též * High Performance MySQL Performance * Dotaz *

Článek Zdroj: Messaggiamo.Com

Translation by Google Translator





Related:

» Seo Elite: New Seo Software!
» AntiSpywareBOT
» Reverse Mobile
» Error Nuker


Webmaster si html kód
Přidejte tento článek do svých webových stránek se!

Webmaster Zašlete svůj článek
Ne nutná registrace! Vyplňte formulář a váš článek je v Messaggiamo.Com Adresář!

Add to Google RSS Feed See our mobile site See our desktop site Follow us on Twitter!

Odešlete vaše články na Messaggiamo.Com Adresář

Kategorie


Copyright 2006-2011 Messaggiamo.Com - Mapa stránek - Privacy - Webmaster předložit vaše články na Messaggiamo.Com Adresář [0.01]
Hosting by webhosting24.com
Dedicated servers sponsored by server24.eu