So finden Sie heraus, was den Dienst und die Datenbank belastet
Anwender melden, dass Access, Excel oder Power BI langsam sind, oder die Datenbank ist zu bestimmten Zeiten ausgelastet. Sie wollen wissen, welche Anfragen das verursachen, wann sie kommen und was dagegen hilft.
Lösungsübersicht
Der Dienst führt ein Lastprotokoll in der Protokolldatei neben dem Verwaltungsspeicher. Er fasst Anfragen zu Formen zusammen: Eine Form ist die Anfrage ohne ihre Werte. Hundert Abfragen eines Formulars, die sich nur in der Kundennummer unterscheiden, sind eine Form mit hundert Anfragen. So zeigt sich, dass meist wenige Formen den größten Teil der Last tragen, und im Protokoll stehen keine Daten der Anwender.
| Menge | Zeigt | Recht |
|---|---|---|
LoadShapes | je Form der letzten sieben Tage Anzahl, Zeiten, Zeilen, Bytes, Fehler und Hinweise | admin |
LoadHours | dieselben Zahlen je Stunde, für den Verlauf über Monate und das Wochenmuster | admin |
SlowRequests | einzelne Anfragen ab einer Sekunde mit Korrelationskennung | admin; Person und Schlüssel nur mit load-persons |
LoadAdvice | Formen mit einer bekannten Abhilfe | admin |
LoadPersons | Anfragen je Tag, Form und Person | load-persons |
Felder und Werte beschreibt die Verwaltungsschnittstelle.
Umsetzung
Teuerste Formen ansehen. Lesen Sie
LoadShapes, nach der Gesamtzeit absteigend geordnet:GET /admin/v1/odata/LoadShapes?$orderby=TotalMs desc&$top=20&$select=Id,Alias,Kind,Text,Requests,TotalMs,P95Ms,DataMs,AverageRows,Advice
Textbeschreibt die Form, etwadbo.Reparaturliste read: filter=(Werk eq ?); orderby=Datum; top. StehtDataMsnaheTotalMs, liegt die Zeit in der Datenbank; istDataMsklein, liegt sie im Dienst oder in der Übertragung (Bytes).Hinweise lesen.
LoadAdvicenennt zu einer Form, was sie unabhängig von den Daten teuer macht, und was meist hilft:Code Typische Ursache Was Sie tun wholeSetAccess öffnet eine verknüpfte Tabelle ganz, Power Query lädt eine Tabelle ohne Filter Formular oder Abfrage mit Kriterium verwenden; in Power Query vor dem Laden filtern unindexedFilterGefiltert wird nach einer Spalte ohne Index Index von der Datenbankverwaltung anlegen lassen oder nach einer indizierten Spalte filtern deepPagingEin Programm blättert mit $skipweit in eine große MengeEingrenzen oder fortlaufend über den Folgelink lesen countLargeJede Seite fordert die Gesamtzahl an $countnur bei Bedarf anfordernaggregateWholeSummen über eine ganze große Tabelle Eingrenzen oder als Sicht mit Index vorberechnen lassen expensiveStatementEine eigene Anweisung braucht lange Im Query Store prüfen, als Prozedur oder Sicht ablegen refreshLoopEin Formular mit Zeitgeber oder kurzem Aktualisierungsintervall, eine Abfrage mit häufiger automatischer Aktualisierung Intervall verlängern oder abschalten - Zeitliches Muster erkennen. Gruppieren Sie
LoadHoursnachWeekday(1 = Montag) undHourOfDay, um zu sehen, wann der Dienst belastet ist, oder nachHour, um den Verlauf über Wochen und Monate zu verfolgen. Stunde und Wochentag gelten nach der Uhr des Servers. - Einzelne langsame Anfrage verfolgen.
SlowRequestsnennt Zeitpunkt, Dauer undCorrelationId. Mit der Korrelationskennung finden Sie dieselbe Anfrage im Protokoll des Dienstes und im Audit. In SQL Server weitersuchen. Jede Anweisung, die der Dienst erzeugt, trägt hinter ihrem ersten Schlüsselwort den Kommentar
/* wkl:<Id> */, wobei<Id>die Kennung der Form ausLoadShapesist. Die Datenbankverwaltung findet damit den Plan und seine Kosten, etwa im Plancache:SELECT TOP (20) s.execution_count, s.total_worker_time / 1000 AS cpu_ms, s.total_logical_reads, t.text FROM sys.dm_exec_query_stats AS s CROSS APPLY sys.dm_exec_sql_text(s.sql_handle) AS t WHERE t.text LIKE N'%/* wkl:%' ORDER BY s.total_worker_time DESC;
Ist der Query Store der Datenbank eingeschaltet, finden Sie dieselbe Kennung dort in
sys.query_store_query_text. Sitzungen des Dienstes erkennen Sie anprogram_name=Wkl.Data.Gatewayinsys.dm_exec_sessions.Last an den Hersteller geben. Soll der Hersteller untersuchen, wo Anwender warten, schreiben Sie die Last als Datei – über die Verwaltung mit
POST /admin/v1/export-loadoder am Server mit `export-load`:Wkl.Data.Gateway export-load --to C:\Temp\last.json --days 30
Die Datei ist lesbares JSON. Prüfen Sie sie vor dem Versand: Sie enthält Namen von Aliassen, Tabellen und Spalten, aber keine Personen, Adressen und Werte.
Hinweise
- Erst nach einer Minute sichtbar. Der Dienst schreibt die gesammelten Zahlen einmal in der Minute.
- Eigene Anweisungen mit dem Recht
sqlerscheinen mit ihrem Text ohne Literale und Kommentare; der Dienst ändert sie nicht und gibt ihnen deshalb keinen Kommentar/* wkl:… */mit. In SQL Server finden Sie sie über den Text oderprogram_name. - Eigener
Application Name. Setzt die Verbindungszeichenfolge einer Datenquelle selbst einenApplication Name, behält der Dienst ihn;program_namezeigt dann diesen Namen. - Last je Person. Wer
LoadPersonsliest, sieht, wer wann wie viel abgefragt hat. Vergeben Sie das Rechtload-personsnur, wo eine Auswertung je Person erlaubt und abgestimmt ist; die Tageszahlen bleiben nach Vorgabe sieben Tage (Gateway:LoadLog:PersonDays). Die übrigen Mengen nennen keine Person. - Was nicht gezählt wird. Anfragen an
/health. Kommen in einer Minute mehr als 5 000 verschiedene Formen zusammen, zählt der Dienst die übrigen nicht mit und meldet das in seinem Protokoll. - Kosten. Das Lastprotokoll verlängert eine Anfrage nicht messbar. Wer es nicht braucht, schaltet es mit
Gateway:LoadLog:Enabled=falseab.
Verwandte Themen
- Konfiguration: Gateway:LoadLog – alle Einstellungen
- Verwaltungsschnittstelle: Lastprotokoll – Felder, Werte und
export-load - So prüfen Sie Anmeldemuster und Herkunft – das Gegenstück für Anmeldungen