Leistungsdebugging und -verbesserung im Jitterbit App Builder
Chrome Entwickler
Chrome DevTools ist eine Reihe von Entwickler Tools, die direkt in den Google Chrome-Browser integriert sind. Mit den DevTools von Chrome können Sie Probleme diagnostizieren in App Builder bei Anfragen, die nicht beantwortet oder richtig behandelt werden, zeichnen Sie eine HAR-Datei auf, die zur weiteren Fehlerbehebung verwendet wird, und helfen Sie dabei, Probleme mit Seitenladezeiten zu lokalisieren.
Chrome DevTools bietet Ihnen außerdem Tools zum Aufnehmen von Screenshots, zum Emulieren der Erfahrung eines mobilen Benutzers und zum Analysieren der von der Seite gestellten Anfragen während des Ladens, um bestimmte Bereiche zu identifizieren, die sich auf die Seitenladezeit auswirken.
Notiz
So laden Sie Google Chrome herunter: https://www.google.com/chrome/
Identifizieren von HTTP-Fehlercodes mit Chrome
Mit den Chrome DevTools können Sie HTTP-Fehlercodes schnell anzeigen und filtern, um einen Fehler zu isolieren und zu identifizieren. an App Builder App-Anforderung, die nicht beantwortet oder richtig verarbeitet wird. HTTP-Antwortstatuscodes geben an, ob eine bestimmte HTTP-Anforderung erfolgreich abgeschlossen wurde.
Auf der Tab Netzwerk von Chrome DevTools können Sie die resultierenden Informationen schnell filtern, indem Sie auf die Spaltenüberschriften klicken. Hier können Sie auf Status klicken, um HTTP-Codeergebnisse anzuzeigen und alle Aufgaben zu identifizieren, die kein 200 OK-Ergebnis zurückgeben.
Im Screenshot-Beispiel auf der Tab „Netzwerk“ von Chrome DevTools sehen wir, dass die App-Seite die Fehlermeldungen 500 Internal Server Error und 504 Gateway Timeout ausgibt. Informationen in der Spalte „Name“ dieses Ergebnisses helfen zu definieren, wo in App Builder dieser Fehler wird ausgelöst.
Hier ist eine Liste der häufigsten HTTP-Fehlercode-Ergebnisse:
- 301 Dauerhaft verschoben
- 302 Gefunden
- 307 Temporäre Umleitung
- 308 Permanente Umleitung
- 400 Ungültige Anfrage = Client-Fehler
- 401 Nicht autorisiert = Client-Fehler
- 403 Verboten = Client-Fehler
- 404 Nicht gefunden = Client-Fehler
- 405 Methode nicht zulässig = Client-Fehler
- 500 Interner Serverfehler = Server-Fehler
- 502 Ungültiges Gateway = Server-Fehler
- 503 Dienst nicht verfügbar = Server-Fehler
- 504 Gateway-Timeout = Server-Fehler
Notiz
Weitere HTTP-Fehlercodes finden Sie unter: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status
Generieren einer Har-Datei mit Chrome
Bei der Fehlerbehebung komplexer App Builder Probleme kann es hilfreich sein, eine HAR-Datei aufzuzeichnen und von den Chrome Web Developer Tools generieren zu lassen, bzw. an App Builder Entwickler zur weiteren fehlerbehebung. Eine HAR-Datei erfasst ein Protokoll der Netzwerkanforderungen und -aktivitäten zum Zeitpunkt des Auftretens des betreffenden Problems. Genauer gesagt ist eine HAR ein JSON-formatiertes Archivdateiformat zum Protokollieren der Interaktion eines Webbrowsers mit einer Site.
So generieren Sie eine Har-Datei:
- Öffnen Sie Google Chrome und gehen Sie zu App Builder Seite, auf der das Problem auftritt
- Wählen Sie in der Chrome-Menüleiste Ansicht > Entwickler > Entwicklertools
- Wählen Sie im Fenster unten auf Ihrem Bildschirm die Tab Netzwerk
- Suchen Sie in der oberen linken Ecke der Tab „Netzwerk“ nach einer runden roten Aufnahmeschaltfläche und stellen Sie sicher, dass sie rot ist. Wenn sie grau ist, klicken Sie einmal darauf, um die Aufnahme zu starten.
- Aktivieren Sie das Kontrollkästchen neben Protokoll beibehalten
- Klicken Sie auf die Schaltfläche Löschen, um alle vorhandenen Protokolle aus der Tab Netzwerk zu löschen
-
Versuchen Sie nun, das zuvor aufgetretene Problem zu reproduzieren, während die Netzwerkanforderungen aufgezeichnet werden
-
Sobald Sie das Problem reproduziert haben, klicken Sie mit der rechten Maustaste auf das Raster der Netzwerkanforderungen, wählen Sie Als HAR mit Inhalt speichern und speichern Sie die Datei auf Ihrem Computer
Weitere Informationen: Siehe „Erste Schritte mit der Analyse der Netzwerkleistung in Chrome DevTools“ https://developers.google.com/web/tools/chrome-devtools/network-performance/
Identifizieren von Leistungsproblemen mit Chrome
Chrome DevTools Tools können helfen, Leistungsprobleme in Ihrem App Builder App. Wenn Sie zuerst zu der Seite navigieren, auf der Sie ein Leistungsproblem haben, können Sie die DevTools öffnen und einen Blick auf die Tab Netzwerk werfen und nach der Spalte Zeit sortieren. Sortieren Sie, damit Sie sehen können, welche Anfragen am längsten dauern. Die entsprechenden Spalten Name und Initiator geben Ihnen zusätzliche Informationen über die Anfrage, die von der App Builder App.
Beachten Sie: Wenn Sie in den Ergebnissen der Tab „Netzwerk“ feststellen, dass Anfragen mit dem Namen Filter? den Großteil der Seitenladezeit in Anspruch nehmen, müssen Sie wahrscheinlich das entsprechende Geschäftsobjekt optimieren.
Geschäftsobjekte (oder Datenobjekte) können eine Ursache für langsame Seitenladezeiten sein. Wenn Sie feststellen, dass eine länger andauernde Anfrage von einem Geschäftsobjekt stammt, lesen Sie bitte den nächsten Abschnitt, in dem die Gründe für die Langsamkeit eines Datenobjekts und Möglichkeiten zur Verbesserung der Geschwindigkeit beschrieben werden.
Gründe, warum ein Geschäftsobjekt langsam ist und Möglichkeiten zur Verbesserung der Geschwindigkeit
Je nach Konfiguration können Business-Objekte (auch Datenobjekte genannt) eine Ursache für App Builder Leistungsprobleme oder Langsamkeit der App. Bestimmte Gründe, warum ein Business-Objekt langsam sein könnte, sind:
- SQL-Logik enthält viele Unterabfragen
- In der Logik werden nicht benötigte Spalten verwendet
- Where-Klauseln verwenden keine indexfreundlichen Anweisungen
- Indizes sind nicht für eine Tabelle definiert, die ein Datenobjekt verwendet
- Redundante Indizes für Tabellen, auf die von der SQL-Logik verwiesen wird
- Verknüpfung berechneter Spalten
- Die Indexverwendung kann aufgrund von Logik, die durch Funktionen läuft, verloren gehen
- Binärfeld ist enthalten, wenn das Binärfeld nicht von einem Panel verwendet wird
- Binärfeld(er) nur dann in Business-Objekte aufnehmen, wenn es als Dateisteuerung verwendet wird
- Es lohnt sich, Business-Objekte speziell für die Verwendung auf Panels zu erstellen, auf denen eine Datei hoch-/heruntergeladen wird
- Alle Spalten in einem Business-Objekt werden geladen von App Builder für die folgenden Bedingungen:
- Bedingte Formatierung vorhanden
- Wenn für ein Feld die Unterstützung für Ersetzungen aktiviert ist
- Wenn ein Panel nicht statische Sichtbarkeitsregeln hat
Business Objects können bei App-Seiten immer noch zu langsamen Ladezeiten führen, selbst wenn die resultierenden Business Object-„Ergebnisse“ schnell geladen werden. Prüfen Sie, ob es Dinge auf Ihrer App-Seite gibt, die die Geschwindigkeit beeinträchtigen, wie z. B. Sortierung, Listenfelder oder andere UI-Layer-Einstellungen, die zu langsameren Seitenladezeiten führen können.
Vereinfachen von SQL-Abfragen
Wenn Sie festgestellt haben, dass ein bestimmtes Geschäftsobjekt Leistungsprobleme verursacht, besteht möglicherweise die Möglichkeit, die SQL-Logik zu verbessern und die Abfrage ggf. zu vereinfachen.
- In den meisten Fällen sollten Sie Unterabfragen wiederverwenden
- Manchmal kann eine Abfrage mit verschachtelten Unterabfragen so groß werden, dass sie langsam ausgeführt wird - nur dann sollte sie überprüft und neu geschrieben werden
- Das Abflachen der Abfrage (Entfernen unnötiger Unterabfragen) verbessert normalerweise die Leistung
- Kann Ausführungsplan und Indizes untersuchen
Entfernen nicht verwendeter Spalten
Abfragen mit Leistungsproblemen verwenden häufig unnötige Spalten in der SQL-Logik.
- Häufig stellen wir fest, dass Abfragen mit Leistungsproblemen Unterabfragen haben, die viel mehr Daten auswählen, als von der äußeren Abfrage verwendet werden
- Das Entfernen dieser Spalten (insbesondere berechneter Spalten) verbessert die Leistung
- Verwenden Sie die Kopierregel und nehmen Sie Änderungen vor
- Zeit, die zum Zurückgeben der „Ergebnisse“ benötigt wird. Zeit auch, die zum Zurückgeben der „Weitere Zeilen laden“-Meldung benötigt wird.
Indexfreundliche Anweisungen in WHERE-Klauseln
Die Where-Klausel definiert die Suchbedingung einer SQL-Anweisung und fällt damit in den Kernfunktionsbereich eines Index: das schnelle Auffinden von Daten. Eine schlecht geschriebene Where-Klausel ist häufig der Grund für eine langsame Ausführung einer SQL- Abfrage. Eine Where-Klausel sollte effizient sein und die richtigen Indizes enthalten.
Schlecht (Indizes werden nicht verwendet):
- Wobei LOWER(Vorname) wie '%Bob%
- Wobei NOW() > DATEADD(Minuten,60,Startzeit)
Gut (verwendete Indizes):
- Wobei Vorname wie ‚Bob%‘ ist
- Wobei DateAdd(Minuten,-60,JETZT()) > StartZeit
SQL Server verfügt über Dienstprogramme für den Ablaufverfolgungsmodus und Abfrage, die Sie ausführen können, um zu sehen, ob Indizes verwendet werden.
Einstellungen zur Leistungsverbesserung
In diesem Abschnitt werden die Einstellungen in App Builder die die Leistung beeinträchtigen. Vermeiden Sie Suchen/Filtern/Sortieren in Spalten in großen Tabellen, die nicht indiziert sind - wenn langsame Abfragen erkannt werden und Indizes keine Option sind.
Auf Panel-Ebene kann das Aktivieren von Download unterstützen und die Aktivierung der einfachen Suche sowie die Konfiguration als „Nur indiziert“ zur Leistungssteigerung beitragen.
Hinweis
Bei der Suche in indexierten Feldern App Builder generiert indexfreundliche Abfragen:
…FirstName like 'Bob%'…
Will match: "Bob Smith"
Will not match: "Mr Bobert"
Indizes und was indiziert werden soll
In SQL wird ein Index verwendet, um die Leistung von Abfragen zu beschleunigen, indem er dabei hilft, Ihre Daten schneller vom SQL Server abzurufen. Dies wird erreicht, indem die Anzahl der Datenbankdatenseiten reduziert wird, die besucht/gescannt werden müssen. Wenn man über Indizes in nachdenkt App Builder Datenobjekte: Sie benötigen genügend Indizes, um Ihre SELECT-Abfragen zu beschleunigen. Gleichzeitig sollten Sie keine redundanten Indizes erstellen, die Ihre UPDATE/DELETE-Operationen möglicherweise verlangsamen könnten.
Indexarchitekturen werden als gruppiert oder nicht gruppiert klassifiziert. Gruppierte Indizes sind Indizes, deren Zeilenreihenfolge auf den Datenseiten der Zeilenreihenfolge im Index entspricht. Aus diesem Grund kann in einer bestimmten Tabelle nur ein gruppierter Index vorhanden sein, während in der Tabelle viele nicht gruppierte Indizes vorhanden sein können.
In App Builder, Indizes werden für Tabellenobjekte erstellt. Generell sollte jede Tabelle einen Clustered-Index haben, um eine effiziente Suche in den Daten dieser Tabelle zu ermöglichen. Wenn einer Tabelle ein Indexwert fehlt, kann dies zu einer Verlangsamung der Anwendungsgeschwindigkeit beitragen. Stellen Sie sicher, dass der Primärschlüssel für jede Tabelle und alle vorhandenen eindeutigen Schlüsselspalten indiziert sind. Wenn Sie Indizes in App Builder, beachten Sie die folgenden wichtigen Punkte:
- Sie müssen das Erstellen von Indizes mit den Leistungseinbußen abwägen, die bei Einfüge-/Aktualisierungsanweisungen auftreten. Das Hinzufügen von Indizes beschleunigt Abfragen, verlangsamt aber Einfüge-/Aktualisierungs-/Löschvorgänge.
- Sie müssen auch die Indizierung von Spalten in Betracht ziehen, die Sie zum Sortieren verwenden, und solche, die Sie in einem Gruppierungsausdruck verwenden. Es kann von Vorteil sein, die Spalten zu indizieren, die die Funktionen MIN(), MAX(), COUNT(), SUM() und AVG() zum Aggregieren der Daten verwenden.
- Sie können „Abdeckungsindizes“ nutzen, bei denen Sie einen größeren Index haben, der von Abfragen genutzt werden kann, die Teilmengen der Spalten verwenden.
- Die Reihenfolge der Spalten im Index ist wichtig.
- Es wird empfohlen, dass die Ungleichheitsspalten in Ihren Abdeckungsindizes nach den Gleichheitsspalten kommen.
Fehlende Indexierungstools
Es gibt vorhandene SQL Server Dienstprogramme und-Abfragen, die beim Überprüfen von Indizes hilfreich sein können. Dynamische Verwaltungsansichten (DMVs) sind SQL Server Dienstprogramme, die Informationen zum Serverstatus zurückgeben und zum Überwachen des Zustands Ihres Datenbankservers und zum Diagnostizieren von Problemen verwendet werden können. DMVs geben einen guten Einblick in die Vorgänge innerhalb von SQL Server. Zum Ausführen dieser Ansichten ist die Berechtigung VIEW DATABASE STATE für die betreffende Datenbank erforderlich.
Sie können fehlende Indizes in Ihren SQL-Abfragen hauptsächlich auf drei Arten identifizieren:
- Ausführen des Database Engine Tuning Advisor
- Fehlende Index Dynamic Management Views ausführen
- SQL Server Engine meldet fehlende Indizes, wenn Sie Ausführungspläne in SSMS generieren
Im Folgenden sind drei SQL-Abfragen aufgeführt, die häufig zur Ermittlung von Indexproblemen verwendet werden:
FindingLongRunningQueries.sql
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
SELECT TOP 20
CAST(qs.total_elapsed_time / 1000000.0 AS DECIMAL(28, 2))
AS [Total Duration (s)]
, CAST(qs.total_worker_time * 100.0 / qs.total_elapsed_time
AS DECIMAL(28, 2)) AS [% CPU]
, CAST((qs.total_elapsed_time - qs.total_worker_time)* 100.0 /
qs.total_elapsed_time AS DECIMAL(28, 2)) AS [% Waiting]
, qs.execution_count
, CAST(qs.total_elapsed_time / 1000000.0 / qs.execution_count
AS DECIMAL(28, 2)) AS [Average Duration (s)]
, SUBSTRING (qt.text,(qs.statement_start_offset/2) + 1,
((CASE WHEN qs.statement_end_offset = -1
THEN LEN(CONVERT(NVARCHAR(MAX), qt.text)) * 2
ELSE qs.statement_end_offset
END - qs.statement_start_offset)/2) + 1) AS [Individual Query]
, qt.text AS [Parent Query]
, DB_NAME(qt.dbid) AS DatabaseName
, qp.query_plan
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) as qt
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp
WHERE qs.total_elapsed_time > 0
ORDER BY qs.total_elapsed_time DESC
IdentifyMostImportantMissingIndexes.sql
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
SELECT TOP 20
ROUND(s.avg_total_user_cost *s.avg_user_impact* (s.user_seeks + s.user_scans),0) AS [Total Cost]
, d.[statement] AS [Table Name]
, equality_columns
, inequality_columns
, included_columns
FROM sys.dm_db_missing_index_groups g
INNER JOIN sys.dm_db_missing_index_group_stats s
ON s.group_handle = g.index_group_handle
INNER JOIN sys.dm_db_missing_index_details d
ON d.index_handle = g.index_handle
WHERE d.database_ID = DB_ID()
ORDER BY`[Gesamtkosten] `DESC
IdentityUnusedIndexes.sql
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
SELECT
DB_NAME() AS DatabaseName
, SCHEMA_NAME(o.Schema_ID) AS SchemaName
, OBJECT_NAME(s.[object_id]) AS TableName
, i.name AS IndexName
, s.user_updates
, s.system_seeks + s.system_scans + s.system_lookups AS [System usage]
INTO #TempUnusedIndexes
FROM sys.dm_db_index_usage_stats s
INNER JOIN sys.indexes i
ON s.[object_id] = i.[object_id]
AND s.index_id = i.index_id
INNER JOIN sys.objects o
ON i.object_id = O.object_id
WHERE 1=2
EXEC sp_MSForEachDB 'USE [?];
INSERT INTO #TempUnusedIndexes
SELECT TOP 20
DB_NAME() AS DatabaseName
, SCHEMA_NAME(o.Schema_ID) AS SchemaName
, OBJECT_NAME(s.[object_id]) AS TableName
, i.name AS IndexName
, s.user_updates
, s.system_seeks + s.system_scans + s.system_lookups
AS [System usage]
FROM sys.dm_db_index_usage_stats s
INNER JOIN sys.indexes i
ON s.[object_id] = i.[object_id]
AND s.index_id = i.index_id
INNER JOIN sys.objects o ON i.object_id = O.object_id
WHERE s.database_id = DB_ID()
AND OBJECTPROPERTY(s.[object_id], ''IsMsShipped'') = 0
AND s.user_seeks = 0
AND s.user_scans = 0
AND s.user_lookups = 0
AND i.name IS NOT NULL
ORDER BY s.user_updates DESC'
SELECT TOP 20 *
FROM #TempUnusedIndexes
ORDER BY`[Benutzerupdates] `DESC
DROP TABLE #TempUnusedIndexes
Verwenden von SQL-Anweisungen aus Protokollen und Index-Optimierern
Sobald Sie ein Business-Objekt mit Leistungsproblemen identifiziert haben, können Sie die SQL-Anweisungslogik aus dem App Builder Protokolle und führen Sie sie durch ein Indexoptimierungsprogramm, um verbesserungswürdige Bereiche zu identifizieren. Dies kann beispielsweise dazu führen, dass Indizes identifiziert werden, die hinzugefügt werden müssen.
Um die SQL-Anweisungslogik abzurufen, navigieren Sie in der App zu der Seite, auf der das Geschäftsobjekt verwendet wird. Von hier aus:
- Gehen Sie zu IDE > Überwachung
- Klicken Sie im Menü auf Datenbankprotokolle
- Klicken Sie auf die Schaltfläche Konfiguration bearbeiten
- Klicken Sie auf Bearbeiten
-
Legen Sie im Abschnitt Speicherprotokollkonfiguration den Mindestschweregrad auf Trace fest.
Wichtig
Setzen Sie den Wert für den Mindestschweregrad immer wieder auf „Aus“ zurück, wenn Sie mit der Erfassung der Protokollinformationen fertig sind.
-
Klicken Sie auf die Schaltfläche Speichern
- Sie sollten jetzt den Bildschirm „Fast Logs“ in App Builder, das aus 500 Zeilen Protokolldaten besteht (es sei denn, Sie ändern diesen Wert von 500). Blättern Sie durch die Protokolldaten, bis Sie die gesuchte SQL-Anweisungslogik finden.
-
Kopieren Sie die gesamte SQL-Anweisungslogik, beginnend mit SELECT. Beispiel:
-
Klicken Sie auf die Schaltfläche Konfiguration bearbeiten
- Klicken Sie im Bildschirm „Protokollkonfiguration“ auf Bearbeiten
- Setzen Sie im Abschnitt Speicherprotokollkonfiguration den Mindestschweregrad auf Aus
- Starten Sie SQL Server Management Studio
- Stellen Sie eine Verbindung zu Ihrer Datenbank her
- Es gibt einige verschiedene Möglichkeiten, die Sie in SQL Server Management Studio nutzen können, um die von Ihrer App verwendete SQL-Anweisungslogik letztendlich besser zu optimieren.
- Sie können auf die Schaltfläche Neue Abfrage klicken und die verfügbare Datenbank auf die entsprechende Datenbank für die App festlegen, die Sie überprüfen
-
Geben Sie die folgende Abfrage ein. Dabei handelt es sich um eine Abfrage zum Ermitteln der Top 10 der SQL-Abfragen, die die meisten Ressourcen verwenden (Lese-, Schreibvorgänge, Arbeitszeit (CPU) usw.):
-
Klicken Sie auf die Schaltfläche Ausführen
-
Unter „Ergebnisse“ werden die 10 SQL-Abfragen angezeigt, die am meisten Zeit benötigen, um Informationen in Ihrer App zurückzugeben. Beachten Sie, dass der zweite Eintrag in unserem Beispiel Screenshot dieselbe Abfrage zurückgibt, die wir oben identifiziert haben (SELECT TOP 2…).
-
Klicken Sie in der Symbolleiste auf die Schaltfläche Neue Abfrage
- Geben Sie die SQL-Anweisungslogik ein, die Sie aus dem App Builder Protokolle
-
Wählen Sie die entsprechende Datenbank aus dem Auswahlmenü „Verfügbare Datenbank“ aus
-
Wenn Sie eine SQL Server Datenbank verwenden (SQL Express unterstützt dies nicht), können Sie mit der rechten Maustaste in das SQL-Abfragefenster klicken und „Abfrage im Database Engine Tuning Advisor analysieren“ auswählen. Hier können Sie auch das Dienstprogramm „Ausführungsplan“ nutzen, das den Weg der SQL-Anweisung durch die App-Datenbank aufzeichnet und dabei hilft, Bereiche zu identifizieren, deren Optimierung möglicherweise viel Zeit in Anspruch nimmt.
Die Datenbankoptimierung erfordert komplexe technische Fähigkeiten und erfordert die richtigen Berechtigungen für den Zugriff auf und die Anzeige von Datenbanken. Sie sollte methodisch und sorgfältig erfolgen. Während des gesamten Prozesses müssen strenge Tests durchgeführt werden, um sicherzustellen, dass das Nettoergebnis positiv ist.
Ressourcen
- Abfrage-Leistungsoptimierung (SQL Server Compact): https://technet.microsoft.com/en-us/library/ms172984(v=sql.110).aspx.aspx)
- SQL Server 2017 - „Indexbezogene dynamische Verwaltungsansichten und -funktionen (Transact-SQL)“ von Microsoft: https://docs.microsoft.com/en-us/sql/relational-databases/system-dynamic-management-views/index-related-dynamic-management-views-and-functions-transact-sql?view=sql-server-2017