2013-02-19 17 views
7

In the documentation indica che le partizioni di Archiviazione tabella di Azure hanno una velocità minima di 500 operazioni al secondo.Prestazioni singole partizione di archiviazione tabella di Azure

Se i miei dati sono partizionati correttamente, le operazioni parallele su ciascuna di queste partizioni non influiscono l'una sull'altra?

Ad esempio, se dovessi eseguire costose scansioni di tabelle complete sulla partizione A (con un massimo di 500 entità al secondo), le prestazioni di qualsiasi operazione che si verifica nella partizione B potrebbero essere influenzate?

Gli account di archiviazione hanno un limite di 5000 operazioni/secondo. Questo significa essenzialmente che posso eseguire il maxout di 10 partizioni prima che inizino a influenzare le prestazioni reciproche?

risposta

12

Come regola generale, si desidera evitare scansioni della tabella quando possibile. Sono operazioni molto costose (specialmente se si hanno molte partizioni). non tanto dal punto di vista dello stress da tavolo, ma hanno una latenza aggregata molto elevata (spiegata di seguito). Detto questo, a volte semplicemente non è possibile evitarlo.

Abbiamo aggiornato l'architettura di archiviazione e aumentato alcuni dei limiti di destinazione.

http://blogs.msdn.com/b/windowsazure/archive/2012/11/02/windows-azure-s-flat-network-storage-and-2012-scalability-targets.aspx

Ogni account di archiviazione è ora 20K IOPS/sec. Ogni partizione ora è 2k/sec

Il modo in cui le partizioni interagiscono è un po 'sottile e dipende dal modo in cui vengono utilizzate (e cambia nel tempo).

Lo storage di Azure ha due fasi: un gruppo di server gestisce gli intervalli, l'altro imposta la memoria effettiva (ovvero le 3 copie). Quando una tabella è fredda, tutte le partizioni possono essere servite da un server. Quando le partizioni vengono sottoposte a stress prolungato, il sistema inizierà a distribuire automaticamente il carico di lavoro (ad esempio shard) su server aggiuntivi. I frammenti sono fatti sui confini delle partizioni.

Per lo stress basso/medio, è possibile che non si raggiunga la soglia per squartare o solo un numero minimo di volte. Anche il modello di accesso avrà un certo impatto (se si aggiunge solo, lo sharding non aiuta). L'accesso casuale a tutti i modelli scalerà di gran lunga il migliore. Quando il sistema si sta riequilibrando, si otterrà una risposta 503 per alcuni secondi e quindi le operazioni torneranno alla normalità.

Se si esegue una scansione della tabella, si effettuano effettivamente più viaggi di andata e ritorno sulla tabella.Quando una query raggiunge la fine di una partizione, la risposta verrà restituita con qualsiasi dato trovato (o nessun dato se i criteri non sono stati soddisfatti) e un token di continuazione. La query viene quindi reinviata (e restituita con w/token) ancora e ancora fino a raggiungere la fine della tabella. Questo è sottratto dall'SDK, ma se hai fatto chiamate dirette al REST lo vedresti.

Dal punto di vista delle prestazioni della tabella, la scansione influirebbe solo sulla partizione in cui è attualmente sottoposta a scansione.

Per velocizzare una query estesa che colpisce più partizioni, è possibile suddividerla in un accesso parallelo multiplo (ad esempio, un thread per partizione) e quindi unire nel client. In realtà dipende dalla quantità di dati che si riceve, dalla grandezza del tavolo, ecc.

6

Le tue osservazioni sono corrette, le prestazioni di ogni partizione sono indipendenti. MA .. Le prestazioni dell'archiviazione della tabella sono anche (principalmente?) Influenzate dalla larghezza di banda della VM. Se si guarda allo Azure pricing, c'è una colonna per "Prestazioni I/O" e le macchine piccole e piccole hanno l'I/O "Basso" e "Moderato". Quindi, se una macchina riesce a ottenere dati solo a 10 MB/s, le prestazioni della memoria della tabella sono in gran parte irrilevanti, tenendo anche presente che l'archiviazione virtualizzata (come parte del sistema operativo) utilizzerà anche questa larghezza di banda.

Il limite dell'account di archiviazione di 5000/sec indica che quando si inizia a colpire quel livello è possibile che si verifichino dei timeout su alcune operazioni. Assicurati di aver architettato un numero qualsiasi di account di archiviazione, come se fosse stato eseguito correttamente in anticipo, è facile aggirare il limite delle prestazioni.

Se si pensa che si possa mettere la memoria della tabella sotto carico. Assicurarsi di codificare con una diagnostica sufficiente per individuare i problemi e eseguire una gestione dei guasti temporanea per consentire nuovi tentativi.

Problemi correlati