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

Software RSS Feed





Introduzione

Sorprendo, dal titolo? bene, questo è un giro di come abbiamo spezzato il jinx di scalability dal maneggiamento 40 annotazioni magre al secondo a 500 annotazioni al secondo. Guardisi da, la maggior parte dei problemi che abbiamo affrontato erano diritto di andata, in modo da la gente esperta potrebbe trovare questa superflua.
Indice

* 1.0 dove eravamo?

1.1 La memoria colpisce il cielo
1.2 tasso di elaborazione basso
1.3 Perdita di dati: - (
1.4 Mysql li tira in giù
1.5 Web client Lento

* strada 2.0 al nirvana

2.1 Memoria di controllo!
2.2 Miglioramento del tasso di elaborazione
2.3 Che uh-uh di perdita di dati?
2.4 Domande Di sintonia di Sql
2.5 Schema di sintonia della base di dati
2.5 Mysql li aiuta a procedere a tutta velocità!
2.6 Più velocemente... più velocemente web client

* linea inferiore 3.0

Dove eravamo?

Inizialmente abbiamo avuti un sistema in grado di regolare soltanto fino a 40 annotazioni /sec. Potrei persino ricordare la discussione, circa "che cosa dovrei essere il tasso ideale delle annotazioni? ". Infine abbiamo deciso che 40/sec era il tasso ideale per una singola parete refrattaria. Così quando dobbiamo uscire, atleast abbiamo dovuto sostenere 3 pareti refrattarie. Quindi abbiamo deciso che 120/sec sarebbe il tasso ideale. Sulla base dei dati dal nostro competitor(s) siamo giunto alla conclusione che, potrebbe sostenere intorno a 240/sec. Abbiamo pensato che fosse giusta! poichè era il nostro primo rilascio. Poiché tutti i competitori hanno parlato del numero di pareti refrattarie ha sostenuto ma non sul tasso.

La memoria colpisce il cielo

La nostra memoria stava colpendo sempre il cielo anche a 512MB! (eccezione di OutOfMemory) abbiamo incolpato del nascondere inmemory del cewolf(s) del images.But che generato non potremmo fuoriuscire per lungo! Nessuna materia se abbiamo collegato il cliente o non noi ha usato colpire pianamente il cielo in una coppia del massimo di giorni 3-4 giorni! Interessante, questo era riproducibile quando abbiamo trasmesso i dati a rates(then) molto alto, intorno a 50/sec. Lo avete indovinato destra, un amplificatore illimitato che si sviluppa fino a che non colpisse il tetto.

Tasso di elaborazione basso

Stavamo procedendo le annotazioni al tasso di 40/sec. Stavamo usando l'aggiornamento all'ingrosso di dataobject(s). Ma non ha dato la velocità prevista! A causa di questo abbiamo cominciato accumulare i dati nella memoria con conseguente memoria di tesaurizzazione!

Perdita Di Dati: - (

A velocità molto elevata abbiamo usato mancare molto un packet(s). Abbiamo sembrato avere poca perdita di dati, ma quella ha provocato un maiale di memoria. Su alcuno che tweaking per limitare la dimensione della memoria di transito abbiamo cominciato avere una perdita costante di dati di circa 20% ai tassi molto alti.

Mysql li tira in giù

Stavamo affrontando un periodo duro in cui abbiamo importato una lima di ceppo circa di 140MB. Mysql ha cominciato hog, strisciare iniziato macchina ed a volte esso persino responding.Above arrestato tutto, abbiamo cominciato ottenere il timeout(s) di transazione e del deadlock(s). Quale finalmente ha ridotto la risposta del sistema.

Web client Lento

Qui abbiamo incolpato ancora del numero di grafici che abbiamo mostrato in una pagina come l'ingorgo, ignorante il fatto che ci erano molti altri fattori che stavano tirando in giù il sistema. Le pagine hanno usato occorrere 30 secondi al carico per una pagina con 6-8 grafici e tabelle dopo 4 giorni al centro di dati del Internet.

Strada Al Nirvana

Memoria Di Controllo!

Abbiamo provato a mettere un limite sulla dimensione della memoria di transito di 10.000, ma non dura lungo. Il difetto principale nel disegno era che abbiamo supposto che l'amplificatore di intorno 10000 basterebbe, cioè saremmo annotazioni trattate prima che l'amplificatore di 10.1000 estensioni. In linea con il principio "che qualcosa può andare male esso andrà male!" è andato male. Abbiamo cominciato slacciare i dati. Subsesquently che abbiamo deciso andare con nascondere basato della lima piana, in cui i dati sono stati fatti uscire nella lima piana e sarebbero caricati nella base di dati usando "i dati del carico infile". Ciò era molte volte più velocemente di un inserto all'ingrosso via il driver che della base di dati potreste anche desiderare alla verifica alcune ottimizzazioni possibili con i dati del carico infile. Ciò ha riparato il nostro problema di aumento della dimensione della memoria di transito delle annotazioni grezze.

Il secondo problema che abbiamo affrontato era l'aumento di cewolf(s) nella memoria che nasconde il meccanismo. Per difetto ha usato "TransientSessionStorage" che nasconde gli oggetti di immagine nella memoria, là sembrato per essere un certo problema nel pulire gli oggetti, anche dopo che i rerferences sono stati persi! Così abbiamo scritto una piccola esecuzione "di FileStorage" che memorizzano gli oggetti di immagine nella lima locale. E sia servito man mano che la richiesta entra. Inoltre, inoltre implmentated un meccanismo di pulizia alle immagini stantie del images(di pulizia più vecchie di 10mins).

Un'altra funzione che interessante abbiamo trovato qui era che il collettore dell'immondizia ha avuto la priorità più bassa in modo da gli oggetti generati per l'ogni annotazioni, appena è stata pulita. Qui è un poco per la matematica per spiegare la grandezza del problema. Ogni volta che riceviamo un'annotazione che del ceppo abbiamo generato il objects(hashmap ~20, tokenized le stringhe ecc) così al tasso di 500/sec per 1 secondo, il numero di oggetti era 10,000(20*500*1). dovuto il collettore d'elaborazione pesante dell'immondizia non ha avuto mai una probabilità a pulizia gli oggetti. Così tutto che dovessimo fare era un tweak secondario, noi appena ha assegnato "la posizione di segnale minimo" ai riferimenti dell'oggetto. Voila! il collettore dell'immondizia era non torturato mai indovina; -)

Miglioramento del tasso di elaborazione

Il tasso di elaborazione era ad un 40/sec magro che significa che potremmo appena sostenere persino un piccolo scoppio delle annotazioni del ceppo! Il controllo di memoria ci ha dato un certo solace, ma il problema reale era con l'applicazione dei filtri attenti sopra le annotazioni. Abbiamo avuti intorno 20 proprietà per ogni annotazione, noi abbiamo usato cercare tutte le proprietà. Abbiamo cambiato l'esecuzione al fiammifero per quelle proprietà che abbiamo avuti test di verifica per! Inoltre, inoltre abbiamo avuti una perdita di memoria nell'elaborazione attenta del filtro. Abbiamo effettuato una coda che si è sviluppata per sempre. Così abbiamo dovuto effettuare un oggetto della lima piana che fa uscire per evitare re-analizzare delle annotazioni per formare gli oggetti! Inoltre, abbiamo usato fare l'atto di ricerca del fiammifero per ciascuna della proprietà anche quando non abbiamo fatti configurare test di verifica attenti.

Che uh-uh di perdita di dati?

Una volta che riparassimo la memoria pubblica nella ricezione dei dati cioè che fanno uscire nella lima piana, noi mai non ha perso i dati! Oltre che quella abbiamo dovuto rimuovere una coppia degli indici indesiderabili nella tabella grezza per evitare le spese generali mentre facevamo uscire i dati. Noi indici del hadd per le colonne in grado di avere un massimo di 3 valori possibili. Quale realmente ha reso l'inserto più lento e non era utile.

Domande Di sintonia di Sql

Le vostre domande sono le vostre chiavi alle prestazioni. Una volta che cominciate inchiodare le edizioni, vedrete che potreste persino dovere de-normalizzare le tabelle. Le abbiamo fatte! Qui sono alcuni dei learnings chiave:

* L'uso "analizza la tabella" per identificare come la domanda del mysql funziona. Ciò vi darà la comprensione circa perchè la domanda è lenta, cioè se sta usando gli indici corretti, se sta usando un'esplorazione ecc del livello della tabella.

* Mai file di cancellazione quando vi occupate dei dati enormi per 50.000 annotazioni in una singola tabella. Sempre prova per fare "una tabella di goccia" tanto come possibile. Se non è possibile, riprogetti il vostro schema, che è la vostra soltanto uscita!

* Eviti il join(s) indesiderabile, non sono impaurito de-normalizzare (cioè duplichi i valori della colonna) evitano il join(s) tanto quanto possibile, tendono a tirare in giù la vostra domanda. Un vantaggio nascosto è il fatto che impongono la semplicità nelle vostre domande.

* Sesiete occupandosi iete occupandosi dei dati all'ingrosso, l'uso "dati del carico infile" là è sempre due opzioni qui, local e ripresa esterna. Usi il local se il mysql e l'applicazione sono al contrario nella stessa ripresa esterna di uso della macchina.

* Provi a tagliare le vostre domande complesse in due o tre domande più semplici. I vantaggi in questo metodo sono che la risorsa del mysql non hogged in su per l'intero processo. Tenda ad usare le tabelle provvisorie. Invece di usando una singola domanda che misura attraverso 5-6 pospone.

* Quando vi occupate della quantità enorme di dati, cioè desiderate ai proces dite 50.000 annotazioni o più in una singola prova di domanda usando il limite al processo discontinuo le annotazioni. Ciò li aiuterà a regolare il sistema alle nuove altezze

* Usi sempre il più piccolo transaction(s) anziché quei grandi cioè che misurano attraverso le tabelle "di n". Ciò blocca in su le risorse del mysql, che potrebbero causare la lentezza del sistema anche per le domande semplici

* Usi il join(s) sulle colonne con gli indici o le chiavi straniere

* Accertisi che le domande dall'interfaccia di utente abbiano test di verifica o limiti.

* Inoltre accertisi che la colonna di test di verifica sia spostata ad incrementi

* Non abbia il valore numerico nei test di verifica di sql all'interno delle citazioni, perché il mysql fa un tipo getto

* usi le tabelle provvisorie tanto come possibile e cadale...

* L'inserto di select/delete è una doppia serratura della tabella... è informato...

* Ciao che non fate soffrire la base di dati del mysql con la frequenza dei vostri aggiornamenti alla base di dati. Abbiamo avuti un caso che tipico abbiamo usato fare uscire alla base di dati dopo che ogni 300 annotazioni. Così quando abbiamo cominciato esaminare a 500/sec abbiamo cominciato vedere che il mysql stava trascinandoli letteralmente giù. Quello è quando ci siamo resi conto che il typicall al tasso di 500/sec là è "una richiesta infile di dati del carico" ogni secondo alla base di dati del mysql. Così abbiamo dovuto cambiare per fare uscire le annotazioni dopo 3 minuti piuttosto che 300 annotazioni.

Schema di sintonia della base di dati

Quando vi occupate della quantità enorme di dati, accertisi sempre che abbiate diviso i vostri dati. Quella è la vostra strada allo scalability. Una singola tabella con i lakhs di opinione 10 può non regolare mai. Quando intendete eseguire le domande per i rapporti. Abbia sempre due livelli delle tabelle, delle tabelle grezze una per i dati reali e di un altro insieme per il tables(di rapporto le tabelle che le interfacce di utente interrogano sopra!) Accertisi sempre che i dati sulle vostre tabelle di rapporto non si sviluppino mai oltre un limite. Incassili stanno progettando usare l'oracolo, voi può provare dividere basato sui test di verifica. Ma purtroppo il mysql non sostiene quello. Così dovremo fare quello. Effettui una tabella del meta in cui avete normalmente le informazioni di intestazione cioè che pospongono per cercare, per un insieme di dato tempo di test di verifica.

* Abbiamo dovuto camminare attraverso il nostro schema della base di dati ed abbiamo aggiunto per aggiungere alcuni indici, cancelliamo alcuno e perfino il column(s) duplicato per rimuovere il join(s) costoso.

* Andare in avanti abbiamo realizzato quello che li ha le tabelle grezze poichè InnoDB era realmente lle spese generali al sistema, in modo da lo abbiamo cambiato a MyISAM

* Inoltre siamo andato nella misura di riduzione del numero di file in tabelle statiche coinvolgere dentro ci uniamo

* La POSIZIONE DI SEGNALE MINIMO in tabelle della base di dati sembra indurre lle certe prestazioni a colpire, in modo da evitile

* Non abbia indici per le colonne che ha permesso i valori di 2-3

* Controllo l'esigenza di ogni indice in vostra tabella, sono costosi. Se le tabelle sono del controllo del doppio di InnoDB allora il loro bisogno. Poiché le tabelle di InnoDB sembrano prendere intorno 10-15 cronometra il formato delle tabelle di MyISAM.

* Usi MyISAM ogni volta che ci è una maggioranza di, uno una (selezioni o inserto) delle domande. Se l'inserto ed il prescelti stanno andando essere più allora è migliore averlo come InnoDB

Mysql li aiuta a procedere a tutta velocità!

Sintonizzi il vostro assistente del mysql solo dopo voi aria fine il vostro queries/schemas ed il vostro codice. Soltanto allora potete vedere un miglioramento percettibile nelle prestazioni. Qui sono alcuni dei parametri che vengano in pratico:

* Usi il formato dello stagno di amplificatore che permetterà alle vostre domande di eseguire più velocemente -- innodb_buffer_pool_size=64M per InnoDB ed usare -- key-bufer-size=32M per MyISAM

* Le persino domande semplici hanno cominciato occorrere più tempo di quanto previsto. Realmente siamo stati imbarazzati! Ci siamo resi conto che il mysql sembra caricare l'indice di tutta la tabella che comincia inserire sopra. Così che cosa è accaduto tipicamente era, tutta la domanda semplice ad una tabella con 5-10 file ha occorr intorno 1-2 sec. Su ulteriore analisi abbiamo trovato che appena prima la domanda semplice, "infile di dati del carico" accaduto. Ciò è sparito quando abbiamo cambiato le tabelle grezze al tipo di MyISAM, perché la dimensione della memoria di transito per innodb e MyISAM sono due configurazioni differenti.

per i parametri più configurabili veda qui.

Punta: inizi il vostro mysql per iniziare con la seguente opzione -- l'ceppo-errore questo permetterà annotare di errore

Più velocemente... più velocemente web client

L'interfaccia di utente è la chiave a tutto il prodotto, particolarmente la velocità percepita della pagina è più importante! Qui è una lista delle soluzioni e dei learnings che potrebbero venire in pratico:

* Se i vostri dati non stanno andando cambiare per l'opinione 3-5 minuti, è migliore nascondere le vostre pagine del lato del cliente

* Tenda ad usare i grafici interni ecc. che di Iframe(s)for danno un fastness percepito alle vostre pagine. Migliori ancora l'uso il meccanismo soddisfatto di caricamento basato Javascript. Ciò è qualcosa che potrte desiderare per fare quando avete grafici di opinione 3+ nella stessa pagina.

* Il Internet Explorer visualizza la pagina intera soltanto quando tutto il soddisfare è ricevuto dall'assistente. Così è consigliabile usare i iframes o il Javascript per caricamento soddisfatto.

* Non usi mai le entrate di multiple/duplicate della lima di CSS nel HTML page. Il Internet Explorer tende a caricare ogni lima di CSS come entrata separata e si applica alla pagina completa!

La linea di fondo le vostri domande e schema rende il sistema più lento! Riparili in primo luogo ed allora incolpano della base di dati!

Veda Inoltre

* Rendimento elevato Mysql

* Prestazioni Di Domanda

* Spieghi La Domanda

* Domande D'Ottimizzazione

* Sintonizzazione Di InnoDB

* Mysql Di sintonia

Categorie: Analizzatore Della Parete refrattaria | Le prestazioni capovolgono questa pagina erano Last modified 18:00, il 31 agosto 2005.

- Ramesh-

Fonte dell'articolo: Messaggiamo.Com

Translation by Google Translator





Related:

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


Webmaster prendi il Codice Html
Aggiungi questo articolo al tuo sito ora!

Webmaster invia i tuoi Articoli
Nessuna registrazione richiesta. Compila il form e i tuoi articoli sono nella Directory di Messaggiamo.Com

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

Invia i tuoi articoli alla Directory di Messaggiamo.Com

Categorie


Copyright 2006-2011 Messaggiamo.Com - Mappa del Sito - Privacy - Webmaster invia i tuoi articoli alla Directory di Messaggiamo.Com [0.01]
Hosting by webhosting24.com
Dedicated servers sponsored by server24.eu