Ich habe eine ziemlich große (30 Millionen Zeilen, bis zu 5-100Kb) Tabelle auf Azure.
Jeder RowKey
ist eine GUID und PartitionKey
ist ein erster Teil Guid, zum Beispiel:Wie kann die Azure Table Storage-Latenz verringert werden?
PartitionKey = "1bbe3d4b"
RowKey = "1bbe3d4b-2230-4b4f-8f5f-fe5fe1d4d006"
Tabelle hat 600 liest und schreibt, 600 (Updates) pro Sekunde mit einer durchschnittlichen Latenzzeit von 60ms. Alle Abfragen verwenden beide PartitionKey
und RowKey
.
ABER, einige liest nehmen bis zu 3000ms (!). Im Durchschnitt benötigen> 1% aller Lesevorgänge mehr als 500 ms und es gibt keine Korrelation mit der Entitätsgröße (100 KB-Zeilen können in 25 ms und 10 KB in 1.500 ms zurückgegeben werden).
Meine Anwendung ist eine ASP.Net MVC 4-Website, die auf 4-5 großen Instanzen ausgeführt wird.
Ich habe alle MSDN Artikel über Azure Tabellen Speicher Leistungsziele gelesen und hat bereits die folgenden:
UseNagle
OffExpect100Continue
auch gedreht wird
MaxConnections
für Tisch-Client deaktiviert ist auf 250 gesetzt (Einstellung 1000-5000 macht keinen Sinn)
Ich habe auch überprüft, dass:
- Storage-Konto Überwachungszähler haben keine Drosselung Fehler
- Es gibt eine Art von „Wellen“ in der Leistung, obwohl sie nicht auf Last
abhängt Was ist der Grund für solche Performance-Probleme sein könnte und wie man es verbessert?
Ist Ihr Speicherkonto in der Region Ihrer Website liegt –
Für einen bestimmten PartitionKey, ungefähr wie viele Zeilen haben Sie? Findet diese bei den 600 Lesevorgängen und 600 Schreibvorgängen im selben PartitionKey statt oder ist sie auf mehrere Partitionen verteilt? –
@ Zain-Rizvi, ja, aus Gründen, zwischen den Regionen werde ich nicht durchschnittlich 60ms bekommen. –