Zum Hauptinhalt springen

Datenbanken

Select immer mit Filter

Verwenden Sie das DB Select-Transferobjekt nur in Verbindung mit Filtern, damit nicht die ganze Tabelle in den Arbeitsspeicher geladen wird. Die Filter projektieren Sie grafisch; welcher Vergleichsoperator wofür steht, zeigt die Übersicht der Datenbank-Filteroperatoren.

In Verbindung mit Transfermarkierungen filtern Sie nach der Transferflag-Spalte. Bei den drei Zuständen „nicht transferiert“, „transferiert“ und „Transferfehler“ sind zwei Filter gleichwertig: Ein Filter mit NOT_EQUAL auf den Wert für „transferiert“ liefert dieselben Datensätze wie die Kombination aus „nicht transferiert“ und „Transferfehler“ – beide holen genau die noch ausstehenden und die fehlerhaften Datensätze. Legen Sie in der Datenbank einen passend gefilterten Index dazu an.

Transferierte Datensätze markieren

Markieren Sie transferierte Datensätze. Halten Sie in Ihren Tabellen Spalten vor, in denen der OPC Router transferierte Datensätze markieren kann („Transferflag“ nicht übertragen, übertragen, Transferfehler).

Die Transferflag-Spalten dürfen nicht NULL annehmen, damit immer eine korrekte Zuordnung zu den drei Status gewährleistet ist. Mit welchem Standardwert die Spalte in der Tabelle vorbelegt wird, hängt dagegen vom Prozess ab: Sollen neue Datensätze sofort zur Übertragung anstehen, ist es der Wert für „nicht transferiert“, sonst ein anderer. Die Markierungswerte und beide Fälle stehen unter Datenbank zu anderen Systemen.

Transferflag indizieren

Zur Verbesserung der Leistung sollte die Transferflag-Spalte indiziert werden. Die folgenden Beispiele sind in T-SQL für den Microsoft SQL Server geschrieben; für Oracle, MySQL, PostgreSQL, SAP HANA sowie ODBC- und OLE-DB-Anbindungen gilt dieselbe Regel mit der Syntax des jeweiligen Systems.

  • Wenn der OPC Router nach Transferflag = 0 filtern soll:

    CREATE NONCLUSTERED INDEX [IX_TransferTable_Transferflag] ON [dbo].[TransferTable]
    (
    [Transferflag] ASC
    )
    WHERE ([Transferflag]=(0))
    GO
  • Wenn der OPC Router nach Transferflag <> 1 filtern soll:

    CREATE NONCLUSTERED INDEX [IX_TransferTable_Transferflag] ON [dbo].[TransferTable]
    (
    [Transferflag] ASC
    )
    WHERE ([Transferflag]<>(1))
    GO

Select-Ergebnisse sortieren

Sortieren Sie das Abfrageergebnis aufsteigend nach der Transferflag-Spalte. Dazu setzen Sie im DB Select auf der Registerkarte Abfrage die Felder Sortierreihenfolge und Sortierungsspalte. So werden zuerst die nicht transferierten Datensätze übertragen; fehlerhafte Einzeltransfers werden erst am Ende des Transfers erneut versucht.

Datenbank-Design

Datenbanktabellen sollten sinnvoll indiziert werden:

  • Spalten, innerhalb derer häufig gesucht wird, sollten indiziert werden.
  • Werden indizierte Spalten bestehender Datensätze häufig aktualisiert, wird der Index nach und nach fragmentiert und muss regelmäßig neu erstellt werden. Anderenfalls wären Leistungseinbußen die Folge.

Weitere Hinweise, auch zur Verwendung von Diagnose-Scripts, erhalten Sie über den inray-Support.