Quantcast
Channel: Tutorial - Embarcadero Community
Viewing all articles
Browse latest Browse all 503

InterBase 2017: Performance Optimierung

$
0
0

InterBase bietet von Haus aus eine Vielzahl von Optimierungsmöglichkeiten mit dem Performance Monitor:

Ich möchte im Performance Monitor zwei Tabs beschreiben:

  • Statements
  • Tables & Views

Statements

Hier sieht man eine Liste der Abfragen auf der aktuellen Datenbank, die noch nicht abgeschlossen sind (nicht COMMITted).

Eine Übersicht über die Spalten und Zustände findet man hier:

http://docwiki.embarcadero.com/InterBase/2017/en/InterBase_Performance_Monitor_Window#Statements_Tab

Kurz:

  • ACTIVE: Aktive Transaktion
  • INACTIVE: Nicht mehr aktiv (aber noch nicht COMMITed)
  • STALLED: Die Abfrage wurde gestartet, der Client hat aber noch nicht alle Daten angefordert Der Server wartet noch auf die Anforderung der restlichen Daten
  • CANCELLED: Abgebrochen

Gut und wichtig, und das ist der erste Optimierungspunkt:

  • Welche Abfragen laufen ungewöhnlich lange?
    Abfragen, die besonders lange laufen (ich habe bei Kunden schon Abfragen gesehen, die Wochen und gar Monate lang offen waren) erhöhen den allgemeinen Verwaltungsaufwand unter Umständen beträchtlich.
  • Warum laufen die Abfragen immer noch?
    Häufig kommt das durch einen "Amok-laufenden" Client (Absturz, oder einfach nur schlechte Programmierung: Transaktionen werden nie geschlossen/COMMITted)
  • Über die Schaltfläche "Find Transaction", die nur erscheint, wenn man den "Statement" Tab ausgewählt hat, bekommt man nähere Informationen, wer, wann, wo die Transaktion eröffnet hat (zum aktuellen Statement)

Es lohnt sich also ein regelmäßiger Blick in die aktuellen "Statements" von InterBase.

Tables & Views

Tables & Views geben einen Tabellen-orientierten Ansatz (Tabellen und Views): Hier sieht man, welche Tabellen und Views in einer Datenbank angesprochen werden. Die Standardansicht beinhaltet dabei keine Systemtabellen. Diese lassen sich über Monitor | Show System Tables einschalten:

Zwei Aspekte möchte ich hier herausstellen:

  • Indexed selects
  • Sequential selects

Indexed selects

Indexed Selects beschreibt die Anzahl der Datensätze, auf die indiziert zugegriffen wurde

Sequential selects

Sequential Selects beschreibt die Anzahl der Datensätze, die nicht über einen Index zugegriffen wurden.

http://docwiki.embarcadero.com/InterBase/2017/en/InterBase_Performance_Monitor_Window#Tables_.26_Views_Tab

Und da liegt auch wieder Optimierungspotential (abgesehen davon, daß die Index-Erstellung generell auch mit Nachteilen verbunden sein kein (zusätzlicher Overhead)):

Hat man eine Vielzahl von nicht-indizierten Zugriffen, ist es ratsam, diese zu identifizieren:

  • Man findet über "Tables & Views" die Tabelle heraus, die häufig im Zugriff steht, deren Zugriff man aber potentiell beschleunigen möchte (hohe Anzahl von "Sequential selects")
  • Die Benutzung der Tabelle findet man über die "Statements" Seite heraus (es gibt keine Möglichkeit direkt danach zu suchen
  • Dieses Statements testet man dann im iSQL (dort hat man die Möglichkeiten den Query-Plan einzusehen(!)

Bingo:

Bei dieser (sehr simplen) Abfrage sieht man, daß ein Index benutzt worden ist: RDB$PRIMARY22 und INDEX (RDB$FOREIGN25)

Im Gegensatz zu dieser Abfrage:

NATURAL gibt hier an, dass die natürliche Reihenfolge aus der Datenbank stammt (ohne Index).

Es lohnt sich also durchaus, mal seine Abfrage mit dem Performance Monitor und dem iSQL näher zu betrachten.


Viewing all articles
Browse latest Browse all 503

Latest Images

Trending Articles



Latest Images

<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>