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

Software RSS Feed





Einleitung

Überrascht, durch den Titel? gut ist dieses eine Tour von, wie wir das scalability jinx Behandlung magere 40 Aufzeichnungen pro Sekunde von der zu 500 Aufzeichnungen pro Sekunde knackten. Passen Sie auf, waren die meisten Problemen, die wir gegenüberstellten, gerade Vorwärts, also konnten erfahrene Leute dieses überflüssig finden.
Inhalt

* 1.0, wo wir waren?

1.1 Gedächtnis schlägt den Himmel
1.2 niedrige Verarbeitung Rate
1.3 Datenverlust:- (
1.4 Mysql zieht uns herunter
1.5 Langsames Web client

* Straße 2.0 zum Nirwana

2.1 Steuerndes Gedächtnis!
2.2 Stromlinienverkleidung von von Verarbeitung Rate
2.3 Welches Datenverlust uh-uh?
2.4 Abstimmende Sql Fragen
2.5 Abstimmendes Datenbankschema
2.5 Mysql hilft uns Führung zu übernehmen!
2.6 Schneller... schneller web client

* Endergebnis 3.0

Wo waren wir?

Zuerst hatten wir ein System, das nur bis zu 40 Aufzeichnungen /sec einstufen könnte. Ich könnte die Diskussion, über "was sogar bedenken sollte die ideale Rate der Aufzeichnungen sein? ". Schließlich entschieden wir, daß 40/sec die ideale Rate für eine einzelne Brandmauer war. So, wenn wir erlöschen müssen, mußten wir atleast 3 Brandmauern stützen. Folglich entschieden wir, daß 120/sec die ideale Rate sein würde. Gegründet auf den Daten von unserem competitor(s) kamen wir zur Zusammenfassung, die, sie um 240/sec sich stützen könnte. Wir dachten, daß sie okay war! da es unsere erste Freigabe war. Weil alle Konkurrenten über die Zahl Brandmauern sprachen, stützte sich er aber nicht auf die Rate.

Gedächtnis schlägt den Himmel

Unser Gedächtnis schlug immer den Himmel sogar an 512MB! (OutOfMemory Ausnahme) tadelten wir cewolf(s) das inmemory Cachieren des erzeugten images.But, das wir nicht für langes entgehen könnten! Gleichgültig, ob wir den Klienten anschlossen oder nicht wir verwendeten, den Himmel in einem Paar von Tagesmaximum flach zu schlagen 3-4 Tage! Interessant war dieses, als wir Daten am sehr hohen rates(then) sendeten, von um 50/sec reproduzierbar. Sie schätzten es Recht, ein unbegrenzter Puffer, der wächst, bis er das Dach schlägt.

Niedrige Verarbeitung Rate

Wir verarbeiteten Aufzeichnungen mit der Rate von 40/sec. Wir benutzten Massenupdate von dataobject(s). Aber es gab nicht die erwartete Geschwindigkeit! Wegen dieses begannen wir, Daten im Gedächtnis zu horten, resultierend, wenn wir Gedächtnis horteten!

Daten-Verlust:- (

Bei sehr hohen Geschwindigkeiten pflegten wir, viel ein packet(s) zu vermissen. Wir schienen, wenig Datenverlust zu haben, aber der ergab ein Gedächtnisschwein. Auf einigem, das zwickt, um die Puffergröße zu begrenzen fingen wir an, einen unveränderlichen Datenverlust von ungefähr 20% mit sehr hoher Rate zu haben.

Mysql zieht uns herunter

Wir stellten eine haltbare Zeit gegenüber, als wir eine Maschinenbordbuchakte von ungefähr 140MB importierten. Mysql begann in Beschlag zu nehmen, das Maschine begonnene Kriechen und manchmal es gleichmäßiges gestopptes responding.Above alle, fingen wir an, deadlock(s) und Verhandlung timeout(s) zu erhalten. Welches schließlich das Reaktionsvermögen des Systems verringerte.

Langsames Web client

Hier wieder tadelten wir die Zahl Diagrammen, die wir in einer Seite als der Engpaß zeigten und ignorierten die Tatsache, daß es viele andere Faktoren gab, die das System herunterzogen. Die Seiten verwendeten, 30 Sekunden zur Last für eine Seite mit 6-8 Diagrammen und Tabellen nach 4 Tagen im Internet-Rechenzentrum zu dauern.

Straße Zum Nirwana

Steuerndes Gedächtnis!

Wir versuchten, eine Begrenzung auf die Puffergröße von 10.000 zu setzen, aber sie nicht dauert für langes. Der Hauptfehler im Design war, daß wir annahmen, daß der Puffer von herum 10000 genügen würde, d.h. würden wir Prozeßaufzeichnungen bevor der Puffer von 10.1000 Reichweiten sein. Inline mit der Grundregel ", das etwas falsch gehen kann es, geht falsch!" es ging falsch. Wir fingen an, Daten zu lösen. Subsesquently, das wir entschieden, mit einem flache Akte gegründeten Cachieren zu gehen, worin die Daten in die flache Akte entleert wurden und in die Datenbank mit "den infile Last Daten" geladen würden. Dieses war viele Mal schneller als ein Masseneinsatz über Datenbanktreiber, den Sie zur Prüfung etwas mögliche Optimierungen mit den infile Last Daten auch wünschen konnten. Dieses regelte unser Problem der Erhöhung von von Puffergröße der rohen Aufzeichnungen.

Das zweite Problem, das wir gegenüberstellten, war die Zunahme von cewolf(s) des Gedächtnisses, das Einheit cachiert. Durch Rückstellung verwendete es "TransientSessionStorage", das die Bildgegenstände im Gedächtnis cachiert, dort geschienen, um irgendein Problem beim Säubern herauf die Gegenstände zu sein, selbst nachdem die rerferences verloren waren! So schrieben wir eine kleine "FileStorage" Implementierung, die die Bildgegenstände in der lokalen Akte speichern. Und seien gedient Sie, wie und wann den Antrag hereinkommt. Außerdem implmentated wir auch eine Reinigungeinheit Reinigung zu den verjährten images(Bildern, die älter als 10mins sind).

Ein anderer interessanter Aspekt, den wir war fanden hier, daß der Abfallkollektor niedrigste Priorität also die Gegenstände, die für jedes Aufzeichnungen verursacht wurden hatte, wurden gesäubert kaum oben. Ist hier wenig Mathe, zum der Größe des Problems zu erklären. Wann immer wir eine Maschinenbordbuchaufzeichnung empfangen, die wir objects(hashmap ~20 verursachten, tokenized Zeichenketten usw.) so mit der Rate von 500/sec für 1 zweites, die Zahl Gegenständen war 10,000(20*500*1). Wegen des schweren verarbeitenabfallkollektors hatte nie eine Wahrscheinlichkeit zur Reinigung die Gegenstände. So aller, den wir tun mußten, war ein Minderjähriger zwicken, wir zuwies gerade "Null" den Gegenstandhinweisen. Voila! der Abfallsammler war nie gequält ich schätzen; -)

Stromlinienverkleidung von von Verarbeitung Rate

Die Verarbeitung Rate war an einem mageren 40/sec, das bedeutet, daß wir sogar einem kleinen Ausbruch der Maschinenbordbuchaufzeichnungen kaum widerstehen könnten! Die Gedächtnissteuerung gab uns irgendeinen Trost, but, welches das tatsächliche Problem mit der Anwendung der Alarmfilter über den Aufzeichnungen war. Wir hatten herum 20 Eigenschaften für jede Aufzeichnung, wir verwendeten, nach allen Eigenschaften zu suchen. Wir änderten die Implementierung zum Gleichen für jene Eigenschaften, die wir Kriterien für hatten! Außerdem hatten wir auch eine Gedächtnisleckstelle in der Alarmfilterverarbeitung. Wir behielten eine Warteschlange bei, die für immer wuchs. So mußten wir einen flache Akte Gegenstand beibehalten, der entleert, um die Re-Satzgliederung der Aufzeichnungen zu vermeiden, um Gegenstände zu bilden! Außerdem pflegten wir, die Tat des Suchens nach einem Gleichen zu tun für jede der Eigenschaft, selbst wenn wir keine Alarmkriterien zusammenbauen ließen.

Welches Datenverlust uh-uh?

Sobald wir regelten, gibt das Gedächtnis heraus, wenn es die Daten empfängt d.h., die in flache Akte, wir entleeren, verlor nie Daten! Zusätzlich zu dem mußten wir ein Paar der unerwünschten Indizes in der rohen Tabelle entfernen, um die Unkosten beim Entleeren von von Daten zu vermeiden. Wir hadd Indizes für Spalten, die ein Maximum von 3 möglichen Werten haben konnten. Welches wirklich den Einsatz langsamer bildete und nicht nützlich war.

Abstimmende Sql Fragen

Ihre Fragen sind Ihre Schlüssel zur Leistung. Sobald Sie anfangen, die Ausgaben zu nageln, sehen Sie, daß Sie die Tabellen De-normalisieren sogar müssen konnten. Wir taten sie! Ist hier einige der Schlüssellearnings:

* Gebrauch "analysiert Tabelle", um zu kennzeichnen, wie die mysql Frage arbeitet. Dieses gibt Ihnen Einblick ungefähr, warum die Frage langsam ist, d.h., ob sie die korrekten Indizes verwendet, ob sie einen Tabelle Niveauscan usw. verwendet.

* Nie Löschungreihen, wenn Sie sehr große Daten im Auftrag von 50.000 Aufzeichnungen in einer einzelnen Tabelle beschäftigen. Immer Versuch, zum einer "Tropfentabelle" soviel wie möglich zu tun. Wenn es nicht möglich ist, entwerfen Sie Ihr Schema neu, daß Ihr nur Ausweg ist!

* Vermeiden Sie unerwünschtes join(s), haben nicht Angst De-zu normalisieren (kopieren Sie d.h. die Spalte Werte), vermeiden join(s) soviel wie, möglich, sie neigen, Ihre Frage herunterzuziehen. Ein versteckter Vorteil ist die Tatsache, daß sie Einfachheit in Ihren Fragen auferlegen.

* Wenn Sie Massendaten beschäftigen, immer ist Gebrauch "die infile Last Daten" dort zwei Wahlen hier, Einheimisches und Direktübertragung. Verwenden Sie Einheimischen, wenn das mysql und die Anwendung in der gleichen Maschine anders Gebrauchdirektübertragung sind.

* Versuchen Sie, Ihre komplizierten Fragen in zwei oder drei einfachere Fragen aufzuspalten. Die Vorteile in dieser Annäherung sind, daß das mysql Hilfsmittel oben nicht für den gesamten Prozeß in Beschlag genommen wird. Neigen Sie, temporäre Tabellen zu benutzen. Anstatt zu verwenden, legt eine einzelne Frage, die über 5-6 überspannt ver.

* Wenn Sie sehr große Menge Daten beschäftigen, d.h. wünschen Sie zu den proces sagen 50.000 Aufzeichnungen oder mehr in einem einzelnen Frage Versuch mit Begrenzung zum Stapelprozeß die Aufzeichnungen. Dieses hilft Ihnen, das System zu den neuen Höhen einzustufen

* Benutzen Sie immer kleineres transaction(s) anstelle von den großen d.h. überspannend über "n" Tabellen. Dieses verriegelt oben die mysql Betriebsmittel, die Langsamkeit des Systems sogar für einfache Fragen verursachen konnten

* Benutzen Sie join(s) auf Spalten mit Indizes oder fremden Schlüsseln

* Stellen Sie sicher, daß die Fragen von der Benutzerschnittstelle Kriterien haben oder begrenzen Sie.

* Stellen Sie auch sicher, daß die Kriterien Spalte registriert ist

* Haben Sie nicht den numerischen Wert in den sql Kriterien innerhalb der Anführungsstriche, weil mysql eine Art Form tut

* benutzen Sie temporäre Tabellen soviel wie möglich, und lassen Sie sie... fallen

* Einsatz von select/delete ist eine doppelte Tabelle Verriegelung... ist bewußt...

* Mach's gut, daß Sie die mysql Datenbank mit der Frequenz Ihrer Updates nicht zur Datenbank schmerzen. Wir hatten einen typischen Fall, den, wir pflegten, zur Datenbank zu entleeren nachdem jede 300 Aufzeichnungen. So, als wir anfingen, auf 500/sec zu prüfen, fingen wir an, zu sehen, daß das mysql uns buchstäblich unten schleppte. Das ist, als wir feststellten, daß das typicall mit der Rate von 500/sec dort ein infile "Antrag" der Last Daten jede Sekunde zur mysql Datenbank ist. So mußten wir ändern, um die Aufzeichnungen nach 3 Minuten anstatt 300 Aufzeichnungen zu entleeren.

Abstimmendes Datenbankschema

Wenn Sie sehr große Menge Daten beschäftigen, stellen Sie immer sicher, daß Sie Ihre Daten verteilten. Die ist Ihre Straße zum scalability. Eine einzelne Tabelle mit Sagen 10 lakhs kann nie einstufen. Wenn Sie beabsichtigen, Fragen für Reports durchzuführen. Haben Sie immer zwei Niveaus Tabellen, rohe Tabellen eine für die tatsächlichen Daten und einen anderen Satz für das Report tables(die Tabellen, die die Benutzerschnittstellen an! fragen) Stellen Sie immer sicher, daß die Daten bezüglich Ihrer Reporttabellen nie über einer Begrenzung hinaus wachsen. Hüllen Sie Sie planen, Orakel, Sie ein zu verwenden kann das Verteilen ausprobieren basiert auf Kriterien. Aber leider stützt mysql nicht das. So müssen wir das tun. Behalten Sie eine Metatabelle bei, in der Sie die Kopfzeile d.h., die verlegen, um zu suchen, für einen Satz gegebene Kriterien normalerweise Zeit haben.

* Wir mußten durch unser Datenbankschema gehen und wir fügten hinzu, um einige Indizes zu addieren, löschen einiges und sogar kopiertes column(s), um teures join(s) zu entfernen.

* Vorwärts gehen verwirklichten wir das, welches die rohen Tabellen hat, da InnoDB wirklich Unkosten zum System war, also uns änderten es zu MyISAM

* Wir gingen auch im Umfang eines Verringerns der Zahl Reihen in den statischen Tabellen, die innen betroffen sind, verbinden

* NULL in den Datenbanktabellen scheint, irgendeine Leistung zu veranlassen zu schlagen, also vermeiden Sie sie

* Haben Sie nicht Indizes für Spalten, das Werte von 2-3 erlaubt hat

* Gegenprüfung die Notwendigkeit an jedem Index in Ihrer Tabelle, sind sie teuer. Wenn die Tabellen InnoDB dann von der Doppeltüberprüfung ihre Notwendigkeit sind. Weil InnoDB Tabellen scheinen zu nehmen herum, setzt 10-15 Zeit Größe der MyISAM Tabellen fest.

* Verwenden Sie MyISAM, wann immer es eine Majorität von gibt, irgendein eine von (wählen Sie oder Einsatz) vor, Fragen. Wenn der Einsatz und die auserwählten sein werden dann, ist es besser, ihn als InnoDB zu haben

Mysql hilft uns Führung zu übernehmen!

Stimmen Sie Ihren mysql Bediener NUR nach Ihnen feine Melodie Ihr queries/schemas und Ihr Code ab. Nur dann Sie können eine spürbare Verbesserung in der Leistung sehen. Sind hier einige der Parameter, die in handliches kommt:

* Verwenden Sie die Pufferpoolgröße, die Ihren Fragen ermöglicht, -- innodb_buffer_pool_size=64M für InnoDB und verwenden -- key-bufer-size=32M für MyISAM schneller durchzuführen

* Gleichmäßige einfache Fragen fingen an, mehr Zeit als erwartet zu dauern. Wir wurden wirklich verwirrt! Wir stellten fest, daß mysql scheint, den Index jeder möglicher Tabelle zu laden, die er anfängt, an einzusetzen. So was gewöhnlich geschah, war, jede einfache Frage zu einem Tabelle mit 5-10 Reihen dauerte herum 1-2 sek. Auf weiterer Analyse fanden wir daß kurz vor der einfachen Frage, "Last Daten infile" geschehen. Dieses verschwand, als wir die rohen Tabellen zur MyISAM Art änderten, weil die Puffergröße für innodb und MyISAM zwei unterschiedliche Konfigurationen sind.

für konfigurierbarere Parameter sehen Sie hier.

Spitze: beginnen Sie Ihr mysql, um mit der folgenden Wahl zu beginnen -- Maschinenbordbuch-Störung dieses ermöglicht der Störspeicherung

Schneller... schneller web client

Die Benutzerschnittstelle ist der Schlüssel zu jedem möglichem Produkt, besonders die wahrgenommene Geschwindigkeit der Seite ist wichtiger! Ist hier eine Liste der Lösungen und der learnings, die in handliches kommen konnten:

* Wenn Ihre Daten nicht für Sagen ändern werden 3-5 Minuten, ist es besser, Ihre Klient Seite Seiten zu cachieren

* Neigen Sie, Iframe(s)for innere Diagramme etc. zu benutzen, das sie eine wahrgenommene Festigkeit zu Ihren Seiten geben. Verbessern Sie noch Gebrauch die Javascript gegründete zufriedene Ladeneinheit. Dieses ist etwas, das Sie tun wünschen konnten, wenn Sie Diagramme des Sagens 3+ in der gleichen Seite haben.

* Internet Explorer zeigt die vollständige Seite an, nur wenn der ganzer Inhalt vom Bediener empfangen wird. So ist es ratsam, iframes oder Javascript für zufriedenes Laden zu verwenden.

* Benutzen Sie nie multiple/duplicate Eintragungen der CSS Akte im HTML page. Internet Explorer neigt, jede CSS Akte als unterschiedliche Eintragung zu laden und trifft auf der kompletten Seite zu!

Grundlinie Ihre Fragen und Schema bilden das System langsamer! Reparieren Sie sie zuerst und tadeln dann die Datenbank!

Sehen Sie Auch

* Hohe Leistung Mysql

* Frage Leistung

* Erklären Sie Frage

* Optimierenfragen

* InnoDB Abstimmen

* Abstimmendes Mysql

Kategorien: Brandmauer-Analysator | Leistung spitzt diese Seite war Last modified 18:00, August 31 2005.

- Ramesh-

Artikel Quelle: Messaggiamo.Com

Translation by Google Translator





Related:

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


Holen Sie sich den HTML-Code fü Webmaster
Fügen Sie diese Artikel Ihrer Website jetzt hinzu!

Webmaster veröffentlichen Sie Ihre Artikel
Keine Anmeldung erforderlich! Füllen Sie das Formular aus und Ihr Artikel wird im Messaggiamo.Com Artikel-Verzeichnis aufgenommen!

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

Veröffentlichen Sie Ihre Texte im Messaggiamo.Com Artikel-Verzeichnis

Kategorien


Copyright 2006-2011 Messaggiamo.Com - Site Map - Privacy - Webmaster, veröffentlichen Sie Ihre Artikel kostenfrei auf Messaggiamo.Com! [0.01]
Hosting by webhosting24.com
Dedicated servers sponsored by server24.eu