Farbschema: Dunkel
Sie befinden sich hier: start » de » Dokumentation » Datenintegration und Datenzugriff » WKL Database Gateway » Anleitungen » So finden Sie heraus, was den Dienst und die Datenbank belastet

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.

MengeZeigtRecht
LoadShapesje Form der letzten sieben Tage Anzahl, Zeiten, Zeilen, Bytes, Fehler und Hinweiseadmin
LoadHoursdieselben Zahlen je Stunde, für den Verlauf über Monate und das Wochenmusteradmin
SlowRequestseinzelne Anfragen ab einer Sekunde mit Korrelationskennungadmin; Person und Schlüssel nur mit load-persons
LoadAdviceFormen mit einer bekannten Abhilfeadmin
LoadPersonsAnfragen je Tag, Form und Personload-persons

Felder und Werte beschreibt die Verwaltungsschnittstelle.

Umsetzung

  1. 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

    Text beschreibt die Form, etwa dbo.Reparaturliste read: filter=(Werk eq ?); orderby=Datum; top. Steht DataMs nahe TotalMs, liegt die Zeit in der Datenbank; ist DataMs klein, liegt sie im Dienst oder in der Übertragung (Bytes).

  2. Hinweise lesen. LoadAdvice nennt zu einer Form, was sie unabhängig von den Daten teuer macht, und was meist hilft:

    CodeTypische UrsacheWas Sie tun
    wholeSetAccess öffnet eine verknüpfte Tabelle ganz, Power Query lädt eine Tabelle ohne FilterFormular oder Abfrage mit Kriterium verwenden; in Power Query vor dem Laden filtern
    unindexedFilterGefiltert wird nach einer Spalte ohne IndexIndex von der Datenbankverwaltung anlegen lassen oder nach einer indizierten Spalte filtern
    deepPagingEin Programm blättert mit $skip weit in eine große MengeEingrenzen oder fortlaufend über den Folgelink lesen
    countLargeJede Seite fordert die Gesamtzahl an$count nur bei Bedarf anfordern
    aggregateWholeSummen über eine ganze große TabelleEingrenzen oder als Sicht mit Index vorberechnen lassen
    expensiveStatementEine eigene Anweisung braucht langeIm Query Store prüfen, als Prozedur oder Sicht ablegen
    refreshLoopEin Formular mit Zeitgeber oder kurzem Aktualisierungsintervall, eine Abfrage mit häufiger automatischer AktualisierungIntervall verlängern oder abschalten
  3. Zeitliches Muster erkennen. Gruppieren Sie LoadHours nach Weekday (1 = Montag) und HourOfDay, um zu sehen, wann der Dienst belastet ist, oder nach Hour, um den Verlauf über Wochen und Monate zu verfolgen. Stunde und Wochentag gelten nach der Uhr des Servers.
  4. Einzelne langsame Anfrage verfolgen. SlowRequests nennt Zeitpunkt, Dauer und CorrelationId. Mit der Korrelationskennung finden Sie dieselbe Anfrage im Protokoll des Dienstes und im Audit.
  5. 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 aus LoadShapes ist. 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 an program_name = Wkl.Data.Gateway in sys.dm_exec_sessions.

  6. 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-load oder 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 sql erscheinen 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 oder program_name.
  • Eigener Application Name. Setzt die Verbindungszeichenfolge einer Datenquelle selbst einen Application Name, behält der Dienst ihn; program_name zeigt dann diesen Namen.
  • Last je Person. Wer LoadPersons liest, sieht, wer wann wie viel abgefragt hat. Vergeben Sie das Recht load-persons nur, 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 = false ab.

Verwandte Themen

de/wiki/data-conectivity/database-gateway/how-to/investigate-load.txt · Zuletzt geändert: von Wolfgang van der Stille