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 aan 500/sec

Software RSS Feed





Inleiding

Verrast, door de titel? goed, is dit een reis van hoe wij scalability jinx van behandeling povere 40 verslagen per seconde aan 500 verslagen per seconde barstten. Beware, de meeste problemen die wij was vooruit recht gezien en=, zouden de zo ervaren mensen dit overtollig kunnen vinden.
Inhoud

* 1,0 Waar wij waren?

1.1 Het geheugen raakt de hemel
1.2 Laag verwerkingstarief
1.3 Het verlies van gegevens:- (
1.4 Mysql trekt neer ons
1.5 De langzame Cliënt van het Web

* Weg 2,0 aan Nirvana

2.1 Controlerend geheugen!
2.2 Stroomlijnend verwerkingstarief
2.3 Welk gegevensverlies uh-uh?
2.4 Het stemmen SQL Vragen
2.5 Stemmend gegevensbestandschema
2.5 Mysql helpt ons gestadig vorderen!
2.6 Sneller... sneller de Cliënt van het Web

* De lijn van 3,0 Bodem

Waar waren wij?

Aanvankelijk hadden wij een systeem dat slechts upto 40 verslagen/seconden kon schrapen. Ik kon zich gelijk de bespreking, over herinneren "wat het ideale tarief verslagen zou moeten zijn? ". Tot slot besloten wij dat 40/sec het ideale tarief voor één enkele firewall was. Zo wanneer wij moeten uitgaan, moesten wij atleast 3 firewalls steunen. Vandaar besloten wij dat 120/sec het ideale tarief zou zijn. Gebaseerd op de gegevens van onze concurrent (s) wij kwamen aan de conclusie die, zij kon rond 240/sec. steunen Wij dachten het o.k. was! aangezien het onze eerste versie was. Omdat alle concurrenten over het aantal firewalls spraken die hij maar niet op het tarief heeft gesteund.

Het geheugen raakt de hemel

Ons geheugen altijd raakte de hemel zelfs bij 512MB! (Uitzondering OutOfMemory) wij beschuldigden cewolf (s) inmemory caching van de geproduceerde beelden maar wij konden niet lang ontsnappen voor! Geen kwestie of wij de cliënt verbonden of niet gebruikten wij om de hemel in een paar vlakke dagen maximum 3-4 dagen te raken! Interessant, was dit reproduceerbaar toen wij verzonden gegevens aan zeer hoge tarieven (toen), van rond 50/sec. U veronderstelde juist het, een onbeperkte buffer die groeit tot het het dak raakt.

Laag verwerkingstarief

Wij verwerkten verslagen naar rato van 40/sec. Wij gebruikten bulkupdate van dataobject (s). Maar het gaf niet de verwachte snelheid! Wegens dit begonnen wij om gegevens in geheugen te hamsteren resulterend in hamsterengeheugen!

Het Verlies van gegevens:- (

Bij zeer hoge snelheden die wij hebben gebruikt om velen te missen een pakket (s). Wij schenen om weinig gegevensverlies te hebben, maar dat resulteerde in een geheugenvarken. Op wat die de buffergrootte tweaking te beperken die wij zijn begonnen hebbend een regelmatig gegevensverlies van ongeveer 20% aan zeer hoge tarieven.

Mysql trekt neer ons

Wij zagen een taaie tijd onder ogen toen wij een logboekdossier van ongeveer 140MB invoerden. Mysql begonnen=is= die aan varken, de machine begonnen te kruipen en soms het ophield zelfs antwoordend Vooral, begonnen wij impasse (s) en transactieonderbreking (s) te krijgen. Welke uiteindelijk de ontvankelijkheid van het systeem verminderde.

De langzame Cliënt van het Web

Ook hier beschuldigden wij het aantal grafieken die wij in een pagina als knelpunt getoond hebben, dat het feit negeert dat er veel andere factoren waren die het systeem neer trokken. De pagina's die worden gebruikt om 30 seconden aan lading voor een pagina met 6-8 grafieken en lijsten na 4 dagen op het Centrum van de Gegevens van Internet te vergen.

Weg aan Nirvana

Controlerend Geheugen!

Wij probeerden om een grens op de buffergrootte van 10.000 te zetten, maar het duurde niet lang. Het belangrijkste gebrek in het ontwerp was dat wij veronderstelden dat de buffer van rond 10000 voldoende zou zijn, d.w.z. zouden wij procesverslagen zijn alvorens de buffer van 10.1000 bereikt. Gealigneerd met het principe "iets verkeerd kan gaan het verkeerd!" zal gaan het ging verkeerd. Wij begonnen gegevens los te maken. Subsesquently die wij hebben beslist om met vlak dossier gebaseerd caching te gaan, waarin het gegeven gedumpt=werd= in het vlakke dossier en in het gegevensbestand worden geladen gebruikend "infile ladingsgegevens". Dit was vaak sneller dan een bulktussenvoegsel via gegevensbestandbestuurder u aan controle sommige mogelijke optimalisering met infile ladingsgegevens ook zou kunnen willen. Dit bevestigde ons probleem van stijgende buffergrootte van de ruwe verslagen.

Het tweede probleem dat wij was de verhoging van cewolf (s) van geheugen in het voorgeheugen onderbrengend mechanisme gezien en=. Door gebrek gebruikte het "TransientSessionStorage" die de geheime voorgeheugens de beeldvoorwerpen in geheugen, daar één of ander probleem schenen te zijn in het schoonmaken van de voorwerpen, zelfs nadat rerferences werden verloren! Zo schreven wij een kleine implementatie "FileStorage" wat de beeldvoorwerpen in het lokale dossier opslaan. En worden gediend als en wanneer het verzoek binnen komt. Voorts implmentated wij ook een schoonmaakbeurtmechanisme aan beelden van schoonmaakbeurt de oude images(ouder dan 10mins).

Een ander interessant aspect dat wij hier was hebben gevonden dat de collector van het Huisvuil had laagste prioriteit zodat de voorwerpen gecreeerd=worden= die voor elk registreert, nauwelijks schoongemaakt. Hier een weinig math is de omvang van het probleem verklaren. Wanneer wij een logboekverslag ontvangen creëerden wij ~20 objects(hashmap, tokenized zo koorden enz.) naar rato van 500/sec voor 1 tweede, was het aantal voorwerpen 10.000 (20*500*1). Toe te schrijven aan de zware collector van het verwerkingshuisvuil had nooit een kans aan schoonmaakbeurt de voorwerpen. Zo allen wij moesten doen was minder belangrijke tweak, wezen wij enkel "ongeldig" aan de objecten verwijzingen toe. Voila! de huisvuilcollector werd nooit gemarteld ik veronderstelt; -)

De verwerkingstarief van het stroomlijnen

Het verwerkingstarief bedroeg een povere 40/sec die betekent dat wij zelfs een kleine uitbarsting van logboekverslagen konden nauwelijks weerstaan! De geheugencontrole gaf ons één of andere solace, maar het daadwerkelijke probleem was met de toepassing van de waakzame filters over de verslagen. Wij hadden rond 20 eigenschappen voor elk verslag, gebruikten wij aan onderzoek naar alle eigenschappen. Wij veranderden de implementatie voor die eigenschappen aan te passen wij criteria voor hadden! Voorts hadden wij ook een geheugenlek in de waakzame filterverwerking. Wij handhaafden een rij die voor altijd groeide. Zo moesten wij een vlak dossiervoorwerp handhaven dat re-ontleedt van verslagen dumpt te vermijden om voorwerpen te vormen! Voorts gebruikten wij om de handeling te doen van het zoeken naar een gelijke voor elk van het bezit zelfs wanneer wij geen waakzame gevormde criteria hadden.

Welk gegevensverlies uh-uh?

Zodra wij de geheugenkwesties in het ontvangen van gegevens bevestigden die d.w.z. in vlak dossier dumpen, verloren wij nooit gegevens! Naast dat moesten wij een paar ongewenste indexen in de ruwe lijst verwijderen om de overheadkosten te vermijden terwijl het dumpen van gegevens. Wij hadd indexen voor kolommen die een maximum van 3 mogelijke waarden konden hebben. Welke echt het tussenvoegsel langzamer maakte en niet nuttig was.

Het stemmen SQL Vragen

Uw vragen zijn uw sleutels aan prestaties. Zodra u begint de kwesties te nagelen, zult u zien dat u zelfs de lijsten zou kunnen moeten DE-NORMALISEREN. Wij deden het! Hier is enkele het zeer belangrijke leren:

* Het gebruik "analyseert lijst" om te identificeren hoe de mysqlvraag werkt. Dit zal u inzicht ongeveer geven waarom de vraag langzaam is, d.w.z. of het de correcte indexen gebruikt, of het een aftasten enz. van het lijstniveau gebruikt.

* Schrap nooit rijen wanneer u reusachtige gegevens in de orde van 50.000 verslagen in één enkele lijst behandelt. Probeer altijd om een "dalingslijst" te doen zo veel mogelijk. Als het niet mogelijk is, herontwerp uw schema, dat uw enige uitweg is!

* Vermijd ongewenst aansluiten zich bij (s), niet zijn bang DE-TE normaliseren (dupliceer d.w.z. de kolomwaarden) vermijden aansluiten bij (s) zo veel mogelijk zich, neigen zij om uw vraag neer te trekken. Één verborgen voordeel is het feit dat zij eenvoud in uw vragen opleggen.

* Als u bulkgegevens behandelt, altijd gebruik "infile ladingsgegevens" er zijn twee opties, lokaal hier en ver. Lokaal gebruik als mysql en de toepassing in het zelfde verre machine anders gebruik zijn.

* Probeer om uw complexe vragen in twee of drie eenvoudigere vragen te verdelen. De voordelen in deze benadering zijn dat het mysqlmiddel niet hogged omhoog voor het volledige proces is. Neig om tijdelijke lijsten te gebruiken. In plaats van het gebruiken van één enkele vraag die spanwijdten over 5-6 lijsten.

* Wanneer u reusachtige hoeveelheid gegevens behandelt, d.w.z. wilt u aan proces zegt 50.000 verslagen of meer in één enkele vraag proberen gebruikend grens aan partijproces de verslagen. Dit zal u helpen het systeem aan nieuwe hoogten schrapen

* Gebruik altijd kleinere transactie (s) in plaats van grote degenen die d.w.z. over "n" lijsten overspannen. Dit sluit omhoog de mysqlmiddelen, die traagheid van het systeem zelfs voor eenvoudige vragen zouden kunnen veroorzaken

* Het gebruik sluit zich aan bij (s) op kolommen met indexen of buitenlandse sleutels

* Zorg ervoor dat de vragen van het gebruikersinterface criteria of grens hebben.

* Zorg ook ervoor dat de criteriakolom wordt geïndexeerd

* Hebben niet de numerieke waarde in sql criteria binnen citaten, omdat mysql een gegoten type doet

* gebruik tijdelijke lijsten zo veel mogelijk, en laat vallen het...

* Het tussenvoegsel van uitgezocht/schrapt is een dubbel lijstslot... bewust ben...

* Neem zorg dat u niet pijn het mysqlgegevensbestand met de frequentie van uw updates aan het gegevensbestand. Wij hadden een typisch geval dat wij hebben gebruikt om aan het gegevensbestand na elke 300 verslagen te dumpen. Zo toen wij begonnen voor 500/sec te testen die wij zijn begonnen te zien dat mysql neer sleepte ons letterlijk. Dat is toen wij realiseerden dat typicall naar rato van 500/sec er een infile "verzoek" van ladingsgegevens elke seconde aan het mysqlgegevensbestand is. Zo moesten wij veranderen om de verslagen na 3 minuten eerder dan 300 verslagen te dumpen.

Stemmend gegevensbestandschema

Wanneer u reusachtige hoeveelheid gegevens behandelt, zorg altijd ervoor dat u uw gegevens verdeelt. Dat is uw weg aan scalability. Één enkele lijst met zegt 10 lakhs nooit kunnen schrapen. Wanneer u van plan bent vragen voor rapporten uit te voeren. Hebben altijd twee niveaus van lijsten, ruwe lijsten één voor de daadwerkelijke gegevens en een andere reeks voor het rapport tables(de lijsten die het gebruikersinterface! vraagt) Zorg altijd ervoor dat de gegevens over uw rapportlijsten nooit voorbij een grens groeien. Incase u is van plan om Orakel te gebruiken, kunt u verdelen uitproberen gebaseerd op criteria. Maar jammer genoeg mysql steunt dat niet. Zo zullen wij dat moeten doen. Handhaaf een metalijst waarin u de header informatie d.w.z. wat om indienen te zoeken, voor een reeks van bepaalde criteria normaal tijd hebt.

* Wij moesten door ons gegevensbestandschema lopen en wij voegden toe om sommige indexen toe te voegen, schrappen wat en zelfs sluit aan de gedupliceerde kolom zich (s) om duur te verwijderen bij (s).

* Doorgaand realiseerden wij dat het hebben van de ruwe lijsten als InnoDB eigenlijk overheadkosten aan het systeem was, zodat veranderden wij het in MyISAM

* Wij gingen ook in de mate van het verminderen van het aantal rijen in statische lijsten binnen in kwestie toetreden

* VERKLAAR in gegevensbestandlijsten schijnt nietig om één of andere prestatiesklap te veroorzaken, zo hen vermijden

* Hebben geen indexen voor kolommen wat waarden van 2-3 heeft toegestaan

* Dwarscontrole de behoefte aan elke index in uw lijst, zijn zij duur. Als de lijsten van InnoDB toen dubbel zijn controleer hun behoefte. Omdat De innoDB- lijsten schijnen om rond 10-15 te nemen keer de grootte van de MyISAM- lijsten.

* Gebruik MyISAM wanneer er een meerderheid is van, één van beide één van (selecteer of tussenvoegsel) vragen. Als het tussenvoegsel en uitgezocht gaat zijn meer toen is het beter om het als InnoDB te hebben

Mysql helpt ons gestadig vorderen!

Stem uw mysqlserver slechts nadat fijn u uw vragen/schema's en uw code stemt. Slechts dan kunt u een waarneembare verbetering van prestaties zien. Hier zijn enkele parameters dat in handig komt:

* Gebruik de grootte van de bufferpool die uw vragen zal toelaten om -- innodb_buffer_pool_size=64M voor InnoDB en gebruiken -- zeer belangrijk-bufer-size=32M voor MyISAM sneller uit te voeren

* Zelfs begonnen de eenvoudige vragen meer tijd te vergen dan verwacht. Wij waren eigenlijk in verwarring gebracht! Wij realiseerden dat mysql schijnt om de index van om het even welke lijst te laden het begint op te nemen op. Zo was wat typisch gebeurde, nam om het even welke eenvoudige vraag aan een lijst met 5-10 rijen rond 1-2 seconden. Bij de verdere analyse vonden wij dat vlak vóór de eenvoudige vraag, "infile ladings de gegevens" gebeurden. Dit verdween toen wij de ruwe lijsten in type MyISAM veranderden, omdat de buffergrootte voor innodb en MyISAM twee verschillende configuraties zijn.

voor meer configureerbare parameters zie hier.

Uiteinde: begin uw mysql om met de volgende optie te beginnen -- logboek-fout dit foutenregistreren zal toelaten

Sneller... sneller de Cliënt van het Web

Het gebruikersinterface is de sleutel aan om het even welk product, vooral is de waargenomen snelheid van de pagina belangrijker! Hier is een lijst van oplossingen en het leren die in handig zou kunnen komen:

* Als uw gegeven niet gaat veranderen voor zeg 3-5 minuten, is het beter om uw cliënt zijpagina's in het voorgeheugen onder te brengen

* Neig om Iframe(s)for binnengrafieken enz. te gebruiken zij waargenomen fastness aan uw pagina's geven. Beter gebruik nog het javascript gebaseerde mechanisme van de inhoudslading. Dit is iets u zou kunnen willen doen wanneer u hebt 3 zeggen + grafieken in de zelfde pagina.

* De ontdekkingsreiziger van Internet toont de gehele pagina slechts wanneer alle inhoud van de server wordt ontvangen. Zo is het raadzaam om iframes of javascript voor inhoudslading te gebruiken.

* Nooit gebruiks veelvoudige/dubbele ingangen van het CSS dossier in de HTML- pagina. De ontdekkingsreiziger van Internet neigt om elk CSS dossier als afzonderlijke ingang te laden en is op de volledige pagina van toepassing!

Het resultaat Uw vragen en schema maakt het systeem langzamer! Bevestig hen eerst en beschuldig dan het gegevensbestand!

Zie ook

* Hoge Prestaties Mysql

* De Prestaties van de vraag

* Verklaar Vraag

* Het optimaliseren van Vragen

* Het Stemmen InnoDB

* Het stemmen Mysql

Categorieën: De Analysator van de firewall | De prestaties tippen Deze pagina het laatst werden gewijzigd 18:00, 31 Augustus 2005.

- Ramesh -

Artikel Bron: Messaggiamo.Com

Translation by Google Translator





Related:

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


Webmaster krijgen html code
Voeg dit artikel aan uw website!

Webmaster verzenden van artikelen
Geen registratie vereist! Vul het formulier in en uw artikel is in de Messaggiamo.Com Directory!

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

Dien uw artikelen te Messaggiamo.Com Directory

Categorieën


Copyright 2006-2011 Messaggiamo.Com - Sitemap - Privacy - Webmaster verzenden van artikelen naar Messaggiamo.Com Directory [0.01]
Hosting by webhosting24.com
Dedicated servers sponsored by server24.eu