2016-05-02 10 views
1

Ich sehe fehlerhafte Leistung mit einer Azure Search Basic-Instanz. Unser Index hat nur 1.544 Dokumente und ist 28 MB groß, daher würde ich erwarten, dass die Suchanfragen sehr schnell sein werden.Fehlerbehebung Azure Search schlechte Leistung

Azure Application Insights meldet in unserer App innerhalb der letzten 12 Stunden Aufrufe der Azure Search von 4,7K mit einer durchschnittlichen Antwortzeit von 2,1 s und einer Standardabweichung von 35,8 s (!).

Ich sehe persönlich fehlerhafte Leistung während meiner manuellen Tests. Eine Abfrage kann in einem Moment mehr als 20 Sekunden dauern, und nur ein bisschen später dauert die Abfrage weniger als 100 ms.

Dort sind Abfragen sehr einfach. Hier ist ein Beispiel Query-String:

api-version = 2015.02.28 & api-key = entfernt & search = &% 24count = true &% 24top = 10 &% 24skip = 0 & search = alle & scoringProfile = FieldBoost &% 24Orderby = SortierbarTitel

Was kann ich tun, um dieses Problem weiter zu beheben?

Antwort

2

Zunächst einmal nehme ich an, dass Sie eine ziemlich gleichmäßige Verteilung von Abfragen haben, was bedeutet, dass Sie auf Basis Ihrer Zahlen nur ~ 1 Abfrage pro Sekunde haben. Klingt das richtig? Wenn dies nicht der Fall ist und Sie große Anzahl von Abfragen sehen, ist es sehr wahrscheinlich, dass Sie nicht genügend Replikate (Kopien des Indexes) haben, um die Abfrage zu verarbeiten. Bitte beachten Sie, dass ein einzelner Replikat-Basic-Service für die Verarbeitung von niedrig einstelligen QPS-Werten vorgesehen ist (obwohl dies je nach Komplexität oder Einfachheit der Abfragen sehr unterschiedlich sein kann). Wenn Sie über die Grenzen des Dienstes hinausgehen, kann Latenz sicherlich ein Problem werden. Eine gute Möglichkeit, dies zu untersuchen, ist die Verwendung von Azure Search Traffic Analytics, die die Suchmesswerte verfügbar machen kann, die Daten wie die Anzahl der Abfragen pro Sekunde über verschiedene Zeiträume hinweg sowie die Latenzmetriken enthalten, die wir intern sehen.

Versuchen Sie außerdem, die HTTP-Verbindungen soweit wie möglich wiederzuverwenden und das HTTP-Verbindungs-Pooling nach Möglichkeit zu nutzen. Übrigens sollten Sie in .NET eine einzelne HttpClient-Instanz oder SearchIndexClient-Instanz verwenden, wenn Sie unser Azure Search SDK verwenden.

+0

Unser Verkehr variiert und ist daher konzentrierter. In der Spitzenzeit von 7 bis 8 Uhr gab es heute 2270 Anrufe, was immer noch weniger als 1 QPS ist. Die Anfragen kommen direkt von den Browsern unserer Benutzer, so dass es keine Möglichkeit gibt, Verbindungen zu bündeln. Ist es möglich, dass die kostenlose Stufe eine bessere Leistung als Basic bietet? Ich habe Analytics aktiviert, um mehr Daten zu sammeln. –

+0

Ja, es ist möglich, dass Sie gelegentlich bessere Leistung mit kostenlos sehen, aber Sie müssen auch daran denken, dass kostenlos ein Multi-Tenant-System ist, was bedeutet, dass die Nutzung von anderen Benutzern kostenlos die Gesamtleistung des Dienstes beeinflussen kann . Basic und Standard sind dedizierte Ressourcen, was bedeutet, dass Sie ein konsistentes Leistungsniveau sehen sollten. Wenn Sie sich die Daten aus der Traffic Analytics-Suche ansehen und eine inkonsistente Leistung für ein konsistentes Datenverkehrsaufkommen feststellen, würden wir uns das viel genauer ansehen. –

+0

An diesem Punkt sieht es wie ein vorübergehendes Problem am Montagmorgen aus. Ich lasse die Analyse weiter und berichte zurück, wenn ich in der Lage bin, umsetzbare Daten zu erfassen. –

0

Ich sammelte mehr Daten und posted my results über im Azure Search-Forum.

Die Verlangsamungen sind auf die Tatsache zurückzuführen, dass wir eine einzige grundlegende Instanz ausführen und Codebereitstellungen durch das Azure Search-Team eine kurze (einige Minuten nach meiner Erfahrung) Unterbrechung/Verschlechterung im Dienst verursachen.

Ich finde zwei grundlegende Instanzen zu teuer. Unser Such-Traffic garantiert keine zwei Instanzen außer Verfügbarkeit.

Es ist mein Verständnis aus dem Forum, dass die kostenlose Ebene im Allgemeinen höhere Verfügbarkeit als eine einzige grundlegende Instanz hat. Aus diesem Grund habe ich eine feedback item eingereicht, in der vorgeschlagen wird, eine kostenpflichtige gemeinsam genutzte Schicht bereitzustellen, die mehr Speicher als die freie Schicht bietet und gleichzeitig eine höhere Verfügbarkeit als eine einzelne dedizierte Instanz aufweist.