Optimieren der Leistung einer Lösung für Azure KI-Suche
Die Leistung Ihrer Suchlösung kann durch die Größe und Komplexität Ihrer Indizes beeinträchtigt werden. Sie müssen auch wissen, wie Sie effiziente Abfragen schreiben, um die richtige Dienstebene zu finden und auszuwählen.
Hier erkunden Sie all diese Dimensionen und lernen Schritte kennen, die Sie ausführen können, um die Leistung Ihrer Suchlösung zu verbessern.
Messen der aktuellen Suchleistung
Sie können die Leistung nicht optimieren, wenn Sie nicht wissen, wie gut Ihr Suchdienst ist. Erstellen Sie eine Benchmark für die Baselineleistung, damit Sie die vorgenommenen Verbesserungen überprüfen können. Zudem können Sie auch ermitteln, ob im Laufe der Zeit eine Leistungsminderung aufgetreten ist.
Aktivieren Sie zunächst die Diagnoseprotokollierung mithilfe von Log Analytics:
- Klicken Sie im Azure-Portal auf Diagnoseeinstellungen.
- Klicken Sie auf + Add diagnostic settings (Diagnoseeinstellungen hinzufügen).
- Benennen Sie die Diagnoseeinstellung.
- Wählen Sie allLogs und AllMetrics aus.
- Aktivieren Sie An Log Analytics-Arbeitsbereich senden.
- Wählen Sie Ihren Log Analytics-Arbeitsbereich aus, oder erstellen Sie einen.
Es ist wichtig, diese Diagnoseinformationen auf Suchdienstebene zu erfassen. Dies liegt daran, dass Endbenutzer*innen oder Apps an vielen Stellen Leistungsprobleme ermitteln können.
Wenn Ihr Suchdienst nachweislich gut funktioniert, können Sie ausschließen, dass er für die Leistungsprobleme verantwortlich ist.
Überprüfen Ihres Suchdiensts auf Drosselung
Suchvorgänge und -indizes von Azure KI-Suche können gedrosselt werden. Wenn die Suchvorgänge von Benutzer*innen oder Apps gedrosselt sind, wird dies in Log Analytics mit einer 503 HTTP-Antwort erfasst. Bei Drosselung der Indizes werden 207 HTTP-Antworten angezeigt.
Diese Abfrage, die Sie für Ihre Suchdienstprotokolle ausführen können, zeigt an, ob Ihr Suchdienst gedrosselt ist.
Klicken Sie im Azure-Portal unter Überwachung auf Protokolle. Auf der Registerkarte „Neue Abfrage 1“ würden Sie diese Abfrage verwenden:
AzureDiagnostics
| where TimeGenerated > ago(7d)
| summarize count() by resultSignature_d
| render barchart
Wenn Sie den Befehl ausführen, erhalten Sie ein Balkendiagramm der HTTP-Antworten Ihrer Suchdienste. Wie aus der Abbildung hervorgeht, gab es mehrere 503-Antworten.
Überprüfen der Leistung einzelner Abfragen
Die beste Möglichkeit, die Leistung einzelner Abfragen zu testen, besteht in der Verwendung eines Clienttools wie Postman. Sie können ein beliebiges Tool verwenden, das die Header in der Antwort auf eine Abfrage anzeigt. Azure KI-Suche gibt immer einen „elapsed-time“-Wert dafür zurück, wie lang der Dienst für den Abschluss der Abfrage benötigt hat.
Wenn Sie wissen möchten, wie lange es dauern würde, die Abfrage zu senden und dann die Antwort vom Client zu erhalten, subtrahieren Sie die verstrichene Zeit vom Gesamtwert für den Roundtrip. Beim obigen Beispiel wären dies 125 ms – 21 ms = 104 ms.
Optimieren der Größe und des Schemas Ihres Indexes
Die Leistung Ihrer Suchabfragen ist direkt mit der Größe und Komplexität Ihrer Indizes verbunden. Je kleiner und optimierter Ihre Indizes sind, desto schneller kann Azure KI-Suche auf Abfragen antworten. Im Folgenden finden Sie einige Tipps, die Ihnen helfen können, wenn Sie bei einzelnen Abfragen Leistungsprobleme feststellen.
Wenn Sie nicht darauf achten, können Indizes im Laufe der Zeit größer werden. Sie sollten sicherstellen, dass alle Dokumente in Ihrem Index nach wie vor relevant sind und durchsucht werden können.
Können Sie die Komplexität des Schemas reduzieren, wenn Sie keine Dokumente entfernen können? Müssen noch immer dieselben Felder durchsuchbar sein? Benötigen Sie noch alle Skillsets wie zu Beginn der Verwendung des Indexes?
Überprüfen Sie alle Attribute, die Sie für die jeweiligen Felder ausgewählt haben. Beispielsweise kann das Hinzufügen der Unterstützung für Filter, Facetten und die Sortierung den für die Unterstützung Ihres Indexes erforderlichen Speicherplatz vervierfachen.
Hinweis
Zu viele Attribute in einem Feld schränken die Funktionen ein. So können Sie in einem Feld, das facettierbar, filterbar und durchsuchbar ist, nur 16 KB speichern. Dahingegen können Sie in einem durchsuchbaren Feld bis zu 16 MB Text speichern.
Wenn Ihr Index optimiert wurde, die Leistung aber noch nicht Ihren Erwartungen entspricht, können Sie Ihren Suchdienst hoch- oder aufskalieren.
Verbessern der Leistung Ihrer Abfragen
Wenn Sie die Funktionsweise des Suchdiensts verstehen, können Sie Ihre Abfragen optimieren, um die Leistungsfähigkeit erheblich zu verbessern. Nutzen Sie diese Checkliste zum Schreiben optimierter Abfragen:
- Geben Sie nur die Felder an, die Sie für die Suche mithilfe des Parameters searchFields benötigen. Bei zusätzlichen Feldern ist eine weitere Verarbeitung erforderlich.
- Geben Sie die geringste Anzahl an Feldern zurück, die Sie auf Ihrer Suchergebnisseite rendern müssen. Das Zurückgeben zusätzlicher Daten nimmt mehr Zeit in Anspruch.
- Versuchen Sie, Teilsuchbegriffe wie Präfixe oder reguläre Ausdrücke zu vermeiden. Diese Arten von Suchen sind rechenintensiver.
- Vermeiden Sie Verwendung von Werten, die häufig übersprungen werden. Dadurch wird die Suchmaschine gezwungen, größere Datenvolumen abzurufen und zu bewerten.
- Beschränken Sie die Verwendung facettierbarer und filterbarer Felder auf Daten mit niedriger Kardinalität.
- Nutzen Sie Suchfunktionen anstelle von einzelnen Werten in den Filterkriterien. Beispielsweise können Sie
search.in(userid, '123,143,563,121',',')
anstelle von$filter=userid eq 123 or userid eq 143 or userid eq 563 or userid eq 121
verwenden.
Wenn Sie all diese Punkte berücksichtigt haben und bei einzelnen Abfragen noch immer Probleme vorliegen, können Sie Ihren Index aufskalieren. Je nach Dienstebene, die Sie zum Erstellen Ihrer Suchlösung verwendet haben, können Sie bis zu zwölf Partitionen hinzufügen. Partitionen sind der physische Speicher, in dem sich Ihr Index befindet. Standardmäßig werden alle neuen Suchindizes mit einer einzelnen Partition erstellt. Wenn Sie weitere Partitionen hinzufügen, wird der Index in diesen gespeichert. Wenn Ihr Index beispielsweise 200 GB umfasst und Sie über vier Partitionen verfügen, enthält jede Partition 50 GB Ihres Indexes.
Das Hinzufügen zusätzlicher Partitionen kann sich positiv auf die Leistungsfähigkeit auswirken, da die Suchmaschine in jeder Partition Vorgänge parallel ausführen kann. Die beste Möglichkeit für Verbesserungen bieten Abfragen, die eine hohe Anzahl von Dokumenten zurückgeben, sowie Abfragen, die Facetten verwenden, um eine Vielzahl von Dokumenten bereitzustellen. Dies ist ein Faktor dafür, wie rechenintensiv es ist, die Relevanz von Dokumenten zu bewerten.
Verwenden der idealen Dienstebene für Ihre Suchanforderungen
Sie haben bereits gelernt, dass Sie Dienstebenen aufskalieren können, indem Sie weitere Partitionen hinzufügen. Wenn Sie aufgrund einer höheren Last skalieren müssen, können Sie mit Replikaten aufskalieren. Zudem haben Sie die Möglichkeit, Ihren Suchdienst mithilfe einer höheren Ebene aufzuskalieren.
Die beiden zuvor genannten Suchindizes weisen eine Größe von 200 GB auf. Die S1-Ebene verwendet acht Partitionen, die S2-Ebene nur zwei. Beide verfügen über zwei Replikate und kosten ungefähr gleich viel. Um die am besten geeigneten Ebene für Ihre Suchlösung auszuwählen, müssen Sie die ungefähre Gesamtgröße des erforderlichen Speichers kennen. Der aktuell größte unterstützte Index umfasst zwölf Partitionen auf der L2-Ebene und bietet einen Gesamtspeicher von 24 TB.
Tarif | type | Speicher | Replikate | Partitionen |
---|---|---|---|---|
F | Kostenlos | 50 MB | 1 | 1 |
B | Basic | 2 GB | 3 | 1 |
S1 | Standard | 25 GB/Partition | 12 | 12 |
S2 | Standard | 100 GB/Partition | 12 | 12 |
S3 | Standard | 200 GB/Partition | 12 | 12 |
S3HD | Hohe Dichte | 200 GB/Partition | 12 | 3 |
L1 | Datenspeicheroptimiert | 1 TB/Partition | 12 | 12 |
L2 | Datenspeicheroptimiert | 2 TB/Partition | 12 | 12 |
Welche der beiden Ebenen im obigen Beispiel bietet Ihrer Meinung nach die beste Leistungsfähigkeit? Sie haben gelernt, dass das Aufskalieren aufgrund der Parallelität Leistungsvorteile bietet. Die höheren Ebenen bieten jedoch Premium-Speicher, leistungsstärkere Computeressourcen und zusätzlichen Speicher. Die zweite Option ermöglicht eine leistungsstärkere Infrastruktur und zukünftiges Indexwachstum. Leider hängt es von der Größe und Komplexität Ihres Indexes sowie den von Ihnen geschriebenen Abfragen für die Suche danach ab, welche Ebene die beste Leistung bietet. Es lässt sich also nicht genau sagen, welche Option die beste ist.
Wenn Sie Ihre Suchlösung auf künftiges Wachstum vorbereiten möchten, sollten Sie die Nutzung von Sucheinheiten in Erwägung ziehen. Eine Sucheinheit (SU) ist das Produkt von Replikaten und Partitionen. Dies bedeutet, dass die zuvor erwähnte S1-Ebene 16 SUs und die S2-Ebene nur 4 SUs verwendet. Die Kosten sind dieselben, da bei höheren Ebenen mehr pro SU berechnet wird.
Machen Sie sich Gedanken, ob Sie Ihre Suchlösung aufgrund der erhöhten Last skalieren müssen. Durch das Hinzufügen eines weiteren Replikats zu beiden Ebenen wird die S1-Ebene auf 24 SUs erhöht, die S2-Ebene jedoch nur auf 6 SUs.