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