Vertec AI Chatbot

Der Chatbot hilft Ihnen bei Fragen rund um das Produkt und die Anpassbarkeit der Software. Wie bei allen AI-generierten Daten sollten die Antworten bei kritischen Informationen verifiziert werden. Nehmen Sie dafür gerne Kontakt mit uns auf. Weitere Informationen zur Verarbeitung der Chat-Daten bieten wir auf der Datenschutzseite.

Die besten Antworten liefert der Chatbot, wenn Ihr Input möglichst viele Informationen enthält. Zum Beispiel:

«Welche Apps stehen im Vertec Cloud Abo zur Verfügung?»

Datenbank Performance und Indexstatistiken

Datenbank Performance und Indexstatistiken beim Betrieb von Vertec On-Premises

Standard

|

Expert

CLOUD ABO

|

ON-PREMISES

Leistung & CRM

Budget & Teilprojekt

Fremdkosten

Ressourcenplanung

Business Intelligence

Erstellt: 23.12.2020
Aktualisiert: 09.04.2021 | Scheduling via ISQL für Firebird beschrieben.

Eine SQL Datenbank braucht nicht nur Indizes auf wichtigen Feldern, damit eine SQL Query performant ablaufen kann, sondern auch eine Information, wie selektiv ein gewisser Index ist, damit vor der Ausführung eines SQL Statements die beste Taktik gewählt werden kann.

So ist zum Beispiel die Selektivität bei einem Boolean (Ja/Nein) Feld und einer flachen Verteilung 50%. Bei einem Index auf der PLZ einer Adresse ist die viel höher. Fragt man also gleichzeitig ein Boolean-Feld eine PLZ ab, so sagt die Selektivität dem Query Analyzer, dass er besser zuerst nach der PLZ sucht und erst nachher nach dem Boolean Feld.

Dafür werden sogenannte Indexstatistiken angelegt, welche Informationen über die Werteverteilung der indizierten Spalten speichern. Indexstatistiken müssen – genau wie die Indizes selbst – regelmässig gewartet werden. Veraltete oder gar nicht erst erstellte Indexstatistiken können dazu führen, dass die dazu gehörenden Indizes gar nicht verwendet werden, was einen messbaren und zum Teil sehr grossen Effekt auf die Performance gewisser SQL Statements hat.

Generell gilt:

  • Der Vertec DB Konvert versucht nach der Übertragung der Daten in die neue Datenbank die Indexstatistiken neu zu berechnen. Bei Firebird gelingt das immer, bei SQL Server nicht, siehe dazu den Artikel über den Konvert mit Microsoft SQL Server.
  • Bei einem Restore eines Backups berechnen beide Datenbanksysteme die Indexstatistiken neu.

Kundenspezifische Indizes

In Vertec Datenbanken können nach sorgfältiger Analyse und Abwägung kundenspezifische Indizes angelegt werden. Damit Indizes nach einem Datenbank Konvert erhalten bleiben, müssen Sie mit dem Präfix CIX_beginnen.

Kundenspezifische Indizes werden wie folgt erstellt:

CREATE [UNIQUE] INDEX indexname ON tablename (column1, column2, column3)

Die Syntax für Firebird und SQL für die Erstellung einfacher Indizes ist ähnlich, wenn weitere Angaben hinzukommen gibt es jedoch Unterschiede.

Beispiel:

CREATE INDEX CIX_INVOICENUMBER ON RECHNUNG (NUMMER);

Das Erstellen von Indizes kann Performance-Verbesserungen bewirken, allerdings gibt es auch Risiken. So kostet das Einfügen oder Updaten eines Records mehr Zeit, wenn auch noch ein Index zusätzlich bearbeitet werden muss, und auch bei einem SELECT führt ein Index nicht immer zu einem besseren Resultat: so kann es sein, dass bei einem Feld mit eigentlich guter Selektivität aber gleichzeitig vielen Werten wie «» oder NULL die Performance sogar schlechter wird. Auch wirkt ein Index nur bei einem = Vergleich, nicht bei einem LIKE.

Vor dem Entscheid, einen neuen Index einzufügen sollte man den Effekt die gesamte Applikation jedenfalls eingehend testen.

Microsoft SQL Server

Der SQL Server berechnet die Indexstatistiken standardmässig selbständig neu, wenn sich eine Tabelle "wesentlich" ändert, also zu mindestens 10%.

Das genügt nicht immer. Wir empfehlen hier, die Indexstatistiken mit einem Maintenance Job regelmässig nachzuführen. Dafür gibt es die Stored Procedure:

EXEC sp_updatestats;

die dabei gescheduled wird oder auch einfach von Hand angestossen werden kann.

Bei Migrationen - also wenn mit einer leeren Vertec Datenbank gestartet und viele Daten reinmigriert werden - berechnet der SQL Server aufgrund der 10% Regel die Indexstatistiken selbständig.

Firebird

Firebird hat keine Methode zur manuellen Neuberechnung der Indexstatistiken wie der Microsoft SQL Server (siehe oben).

Bei einem Vertec Datenbank Konvert werden die Statistiken neu berechnet. Das geschieht jeweils bei den Vertec Updates.

Bei Migrationen jedoch - also wenn mit einer leeren Vertec Datenbank gestartet und viele Daten reinmigriert werden - werden die Statistiken nicht berechnet. In diesem Fall muss die Indexstatistik noch erstellt werden. Es gibt folgende Möglichkeiten:

  • Backup - Restore mit gbak: Das gbak (siehe Artikel Backup der Vertec Daten) erstellt am Schluss, nachdem die Daten in der Datenbank sind, die Indizes.
  • Über eine Stored Procedure: Im von Vertec mitgelieferten Firebird Manager Programm (IBQ.exe oder IBOConsole.exe) kann eine Stored Procedure gestartet werden:
    • Die Vertec Firebird Datenbanken enthalten eine Stored Procedure mit Namen SP_VTC_UPDATESTATS:

Starten mit

EXECUTE PROCEDURE sp_vtc_updatestats;

Und wichtig: Erst der Commit führt die eigentliche Aktion durch:

  • Die Prozedur kann auch wie folgt gescheduled werden:
"C:\Program Files\Firebird\isql.exe" -user sysdba -password xyz localhost:C:\Program Files\Vertec\DB\Vertec.FDB -input C:\Program Files\Vertec\DB\indexstats.txt

In der Datei Indexstats.txt selbst stehen folgende Zeilen:

EXECUTE PROCEDURE SP_VTC_UPDATESTATS;
COMMIT;
  • Ist die Stored Procedure nicht da, so kann man sie wie folgt erstellen:
set term ^;

execute block
as
declare variable ix varchar(31);
begin
  for select rdb$indices.rdb$index_name
  from rdb$indices
  into ix
  do
  execute statement 'SET STATISTICS INDEX '||ix ;
end^

set term ;^

Der Code kann einfach in den SQL Editor kopiert und wie oben auf den Button

Execute und dann auf Commit geklickt werden:

 

Kontakt

Montag bis Freitag
9-12 und 14-17 Uhr

Vertec 30 Tage kostenlos ausprobieren

Lernen Sie unsere Software mit allen Kernfunktionen kennen

Jetzt testen
Bitte wählen Sie Ihren Standort