Optimierung von transaktionsorientierten Abfragen

Optimieren Sie transaktionsorientierte AQL-Abfragen, indem Sie den Ausdruck EXPLICIT mit den Ausdrücken BEGIN und END verwenden. Verwenden Sie außerdem die Ausdrücke TIMEOUT und TIMEWINDOW, um Zeitintervalle anzugeben.

Verwenden Sie den Ausdruck EXPLICIT mit den Ausdrücken BEGIN und END, um eine präzisere Filterung auf Ihre transaktionsorientierten Abfragen anzuwenden.

Sie können beispielsweise den Ausdruck BEGIN mit dem Ausdruck EXPLICIT END verwenden, um mehrere (BEGIN) nicht erfolgreiche Anmeldeversuche zu erfassen, auf die eine (EXPLICIT END) erfolgreiche Anmeldung folgt.

Verwenden Sie die Ausdrücke TIMEOUT und TIMEWINDOW, um Zeitfilter für die Sitzungen in Ihren transaktionsorientierten Abfragen anzuwenden.

Ausdrücke

Verwenden Sie die im Folgenden beschriebenen Ausdrücke, um Ihre transaktionsorientierte AQL-Abfrage zu optimieren:

Tabelle 1. AQL-Ausdrücke für transaktionsorientierte Abfragen
Abfrageausdrücke Beschreibung
BEGIN Eine Sitzung wird gestartet, wenn Sie ein Ereignis empfangen, bei dem der BEGIN-Ausdruck erfüllt ist oder das vorherige Ereignis die Sitzung beendet.
EXPLIZITER ANFANG Startet eine neue Sitzung nur, wenn der Ausdruck EXPLICIT BEGIN wahr ist.
ENDE Eine Sitzung wird beendet, wenn Sie ein Ereignis erhalten, bei dem der END-Ausdruck wahr ist oder das nächste Ereignis eine neue Sitzung startet.
EXPLIZITES ENDE Schließt die aktuelle Sitzung nur, wenn der Ausdruck EXPLICIT END wahr ist.
TIMEOUT Schließt die Sitzung, wenn der angegebene Zeitraum für TIMEOUT von dem Zeitpunkt, zu dem das vorherige Ereignis aufgetreten ist, bis zu dem Zeitpunkt, zu dem das aktuelle Ereignis eingetreten ist, abläuft.
ZEITFENSTER Verfolgt die Sitzungszeit.

Schließt die Sitzung, wenn der angegebene TIMEWINDOW-Zeitraum von dem Zeitpunkt, zu dem das erste Ereignis aufgetreten ist, bis zu dem Zeitpunkt, zu dem das aktuelle Ereignis eingetreten ist, abläuft.

Syntax
SESSION BY 
<TimeExpression> <ExpressionList> 
[EXPLICIT] BEGIN <booleanExpression>  
[EXPLICIT] END <booleanExpression> 
TIMEOUT <IntegerLiteral millieseconds> 
TIMEWINDOW <IntegerLiteral SECONDS|MINUTES|HOURS|DAYS>

Die folgenden Beispiele zeigen die Ergebnisse, die Sie mit verschiedenen Kombinationen der verfügbaren Abfrageausdrücke erhalten:

BEGIN-und END-Ausdrücke

Ein BEGIN-Ausdruck startet eine Sitzung, wenn ein Ereignis mit dem BEGIN-Ausdruck übereinstimmt oder das vorherige Ereignis die Sitzung beendet.

Ein Ausdruck END beendet eine Sitzung, wenn der Ausdruck END für ein Ereignis wahr ist oder wenn das nächste Ereignis eine neue Sitzung startet.

Wenn Sie den Ausdruck EXPLICIT mit den Ausdrücken BEGIN und END verwenden, wenden Sie einen präziseren Filter an, der die Ergebnismenge eingrenzt.

Sehen Sie sich die folgenden Beispiele für Abfragen und Ergebnisse an.

Im folgenden Abfragebeispiel werden BEGIN-und END-Ausdrücke verwendet.

Select sessionId, 
DATEFORMAT(starttime,'YYYY-MM-dd HH:mm:ss') 
start_time, username, sourceip, 
category from events into TR1 
where username = 'user_x' 
SESSION BY starttime username, sourceip 
BEGIN category=16001 
END category=16003 
start '2016-12-10 16:00' stop '2016-12-10 23:30'
Die Ereigniskategorie 16001 gibt ein Benutzeran-oder -abmeldeereignis an der Konsole an und die Ereigniskategorie 16003 gibt an, dass ein Benutzer einen Prozess eingeleitet hat, wie z. B. das Starten einer Sicherung oder das Generieren eines Berichts.

Die folgende Tabelle zeigt die Ergebnisse für die Abfrage, die BEGIN und END verwendet.

Tabelle 2. BEGIN-und END-Abfrageergebnisse
sessionID start_time Benutzername sourceip Kategorie
1 10.12.2016, 16:00:06 Uhr Benutzer_x 10.2.2.10 16001
1 10.12.2016, 16:00:06 Uhr Benutzer_x 10.2.2.10 16003
2 10.12.2016, 16:00:06 Uhr Benutzer_x 10.2.2.10 16003
3 10.12.2016, 16:00:10 Uhr Benutzer_x 10.2.2.10 16001
3 10.12.2016, 16:00:10 Uhr Benutzer_x 10.2.2.10 16003
4 10.12.2016, 16:00:11 Uhr Benutzer_x 10.2.2.10 16003
3 10.12.2016, 16:00:11 Uhr Benutzer_x 10.2.2.10 16001
3 10.12.2016, 16:00:11 Uhr Benutzer_x 10.2.2.10 16003
Hinweis: Sessionid 2 besteht nur aus einem Ereignis, das es schließt (Kategorie 16003). Eine Sitzung mit einem Ereignis ist eine Ausnahmebedingung und kann auftreten.

EXPLICIT BEGIN-und END-Ausdrücke

Ereignisse werden übersprungen, wenn eine Sitzung nicht gestartet wird und ein Ereignis kein EXPLICIT BEGIN -Ereignis ist.

Select sessionId, 
DATEFORMAT(starttime,'YYYY-MM-dd HH:mm:ss') 
start_time, username, sourceip, 
category from events into TR2 
where username='user_x' 
SESSION BY starttime username, sourceip 
EXPLICIT BEGIN category=16001 
END category=16003 start '2016-12-10 16:00' 
stop '2016-12-10 23:30'

Die folgende Tabelle zeigt die Ergebnisse für die Abfrage, die EXPLICIT BEGIN und END verwendet.

Tabelle 3. EXPLICIT BEGIN und END Abfrageergebnisse
sessionID start_time Benutzername sourceip Kategorie
1 10.12.2016, 16:00:06 Uhr Benutzer_x 10.2.2.10 16001
1 10.12.2016, 16:00:06 Uhr Benutzer_x 10.2.2.10 16003
2 10.12.2016, 16:00:07 Uhr Benutzer_x 10.2.2.10 16001
2 10.12.2016, 16:00:07 Uhr Benutzer_x 10.2.2.10 16003
3 10.12.2016, 16:00:11 Uhr Benutzer_x 10.2.2.10 16001
3 10.12.2016, 16:00:11 Uhr Benutzer_x 10.2.2.10 16003
3 10.12.2016, 16:00:11 Uhr Benutzer_x 10.2.2.10 16003
4 10.12.2016, 16:00:14 Uhr Benutzer_x 10.2.2.10 16001
5 10.12.2016, 16:00:15 Uhr Benutzer_x 10.2.2.10 16001
5 10.12.2016, 16:00:15 Uhr Benutzer_x 10.2.2.10 16003

Es werden nur Ereignisse zurückgegeben, die den Ausdruck EXPLICIT BEGIN erfüllen.

Sessionid 2 und Sessionid 4 in EXPLICIT BEGIN und END erfüllen den Ausdruck EXPLICIT BEGIN nicht.

BEGIN und EXPLICIT END

Aktuelle Sitzung nur schließen, wenn der Ausdruck EXPLICIT END wahr ist. Es gibt keine weiteren Prüfungen auf BEGIN-Ereignisse in der Sitzung, wenn der Ausdruck EXPLICIT END wahr ist.

Einem EXPLICIT END -Ausdruck können mehrere BEGIN-Ereignisse in einer Sitzung zugeordnet werden. Sie können beispielsweise den Ausdruck EXPLICIT END verwenden, um mehrere fehlgeschlagene Anmeldeversuche zu zählen, gefolgt von einer erfolgreichen Anmeldung während eines bestimmten Zeitintervalls (Sitzungszeitlimit).

Im folgenden Abfragebeispiel werden die Ausdrücke BEGIN und EXPLICIT END verwendet.

Select sessionId, 
DATEFORMAT(starttime,'YYYY-MM-dd HH:mm:ss') 
start_time, username, sourceip, 
category from events into TR3 
where username = 'user_x' 
SESSION BY starttime username, sourceip 
BEGIN category=16001 
EXPLICIT END category=16003 
start '2016-12-10 16:00' 
stop '2016-12-10 23:30'

Die folgende Tabelle zeigt die Ergebnisse für die Abfrage, die BEGIN-und EXPLICIT END-Ausdrücke verwendet.

Tabelle 4. Abfrageergebnisse für BEGIN und EXPLICIT END
sessionID start_time Benutzername sourceip Kategorie
1 10.12.2016, 16:00:06 Uhr Benutzer_x 10.2.2.10 16001
1 10.12.2016, 16:00:06 Uhr Benutzer_x 10.2.2.10 16003
2 10.12.2016, 16:00:07 Uhr Benutzer_x 10.2.2.10 16003
2 10.12.2016, 16:00:10 Uhr Benutzer_x 10.2.2.10 16001
2 10.12.2016, 16:00:10 Uhr Benutzer_x 10.2.2.10 16003
3 10.12.2016, 16:00:11 Uhr Benutzer_x 10.2.2.10 16001
3 10.12.2016, 16:00:11 Uhr Benutzer_x 10.2.2.10 16003
4 10.12.2016, 16:00:12 Uhr Benutzer_x 10.2.2.10 16003
4 10.12.2016, 16:00:12 Uhr Benutzer_x 10.2.2.10 16001
4 10.12.2016, 16:00:12 Uhr Benutzer_x 10.2.2.10 16003
5 10.12.2016, 16:00:13 Uhr Benutzer_x 10.2.2.10 16001
4 10.12.2016, 16:00:11 Uhr Benutzer_x 10.2.2.10 16003

EXPLICIT BEGIN und EXPLICIT END

Ereignisse werden ignoriert, wenn eine Sitzung nicht gestartet wird und ein Ereignis kein EXPLICIT BEGIN-Ereignis ist.

Aktuelle Sitzung nur schließen, wenn der Ausdruck EXPLICIT END wahr ist. Es gibt keine weiteren Prüfungen auf BEGIN-Ereignisse in der Sitzung, wenn der Ausdruck EXPLICIT END wahr ist.

Im folgenden Abfragebeispiel werden sowohl EXPLICIT BEGIN-als auch EXPLICIT END-Ausdrücke verwendet.

Select sessionId, 
DATEFORMAT(starttime,'YYYY-MM-dd HH:mm:ss') 
start_time, username, sourceip, 
category from events into TR4 
where username = 'user_x' 
SESSION BY starttime username, sourceip 
EXPLICIT BEGIN category=16001 
EXPLICIT END category=16003 
start '2016-12-10 16:00' 
stop '2016-12-10 23:30'

Die folgende Tabelle zeigt die Ergebnisse für die Abfrage, die sowohl EXPLICIT BEGIN-als auch EXPLICIT END-Ausdrücke verwendet.

Tabelle 5. EXPLICIT BEGIN und EXPLICIT END Abfrageergebnisse
sessionID start_time Benutzername sourceip Kategorie
1 10.12.2016, 16:00:06 Uhr Benutzer_x 10.2.2.10 16001
1 10.12.2016, 16:00:06 Uhr Benutzer_x 10.2.2.10 16003
2 10.12.2016, 16:00:10 Uhr Benutzer_x 10.2.2.10 16001
2 10.12.2016, 16:00:10 Uhr Benutzer_x 10.2.2.10 16003
3 10.12.2016, 16:00:11 Uhr Benutzer_x 10.2.2.10 16001
3 10.12.2016, 16:00:12 Uhr Benutzer_x 10.2.2.10 16001
3 10.12.2016, 16:00:12 Uhr Benutzer_x 10.2.2.10 16003
4 10.12.2016, 16:00:13 Uhr Benutzer_x 10.2.2.10 16001
4 10.12.2016, 16:00:14 Uhr Benutzer_x 10.2.2.10 16001
4 10.12.2016, 16:00:14 Uhr Benutzer_x 10.2.2.10 16003
5 10.12.2016, 16:00:15 Uhr Benutzer_x 10.2.2.10 16001
5 10.12.2016, 16:00:15 Uhr Benutzer_x 10.2.2.10 16003

TIMEOUT

Schließt die Sitzung, wenn der angegebene Zeitraum für TIMEOUT von dem Zeitpunkt, zu dem das vorherige Ereignis aufgetreten ist, bis zu dem Zeitpunkt, zu dem das aktuelle Ereignis eingetreten ist, abläuft. Das aktuelle Ereignis wird Teil einer neuen Sitzung. Der Wert für TIMEOUT wird in Millisekunden angegeben.

Im folgenden Abfragebeispiel wird der Ausdruck TIMEOUT verwendet.

Select sessionId, 
DATEFORMAT(starttime,'YYYY-MM-dd HH:mm:ss.SSS') 
start_time, username, sourceip, 
category from events into TR5 
where username='user_x' 
SESSION BY starttime username, sourceip 
BEGIN category=16001 
EXPLICIT END category=16003 
TIMEOUT 3600 
start '2016-12-10 16:00' 
stop '2016-12-10 23:30'

Die folgende Tabelle zeigt die Ergebnisse für die Abfrage, die den Ausdruck TIMEOUT verwendet.

Tabelle 6: TIMEOUT, Abfrageergebnisse
sessionID start_time Benutzername sourceip Kategorie
1 10.12.2016 16:00:06.716 Benutzer_x 10.2.2.10 16003
2 10.12.2016 16:00:10.328 Benutzer_x 10.2.2.10 16001

Sessionid 1 wird beendet und sessionid 2 wird gestartet, da das TIMEOUT von 3600 überschritten wird.

ZEITFENSTER

Verfolgt die Sitzungszeit. Schließt die Sitzung, wenn der angegebene TIMEWINDOW-Zeitraum von dem Zeitpunkt, zu dem das erste Ereignis aufgetreten ist, bis zu dem Zeitpunkt, zu dem das aktuelle Ereignis eingetreten ist, abläuft. Das aktuelle Ereignis wird Teil einer neuen Sitzung. Der Wert für TIMEWINDOW kann in Sekunden, Minuten, Stunden oder Tagen angegeben werden.

Im folgenden Abfragebeispiel wird der Ausdruck TIMEWINDOW verwendet.

Select sessionId, 
DATEFORMAT(starttime,'YYYY-MM-dd HH:mm:ss.SSS') 
start_time, username, sourceip, 
category from events into TR6 
where username='user_x' 
SESSION BY starttime username, sourceip 
BEGIN category=16001 
EXPLICIT END category=16003 
TIMEWINDOW 3000 
start '2016-12-10 16:00' 
stop '2016-12-10 23:30'

Die folgende Tabelle enthält die Ergebnisse für die Abfrage, die den Ausdruck TIMEWINDOW verwendet.

Tabelle 7: TIMEWINDOW Abfrageergebnisse
sessionID start_time Benutzername sourceip Kategorie
1 10.12.2016 16:00:06.415 Benutzer_x 10.2.2.10 16001
1 10.12.2016 16:00:06.433 Benutzer_x 10.2.2.10 16003
2 10.12.2016 16:00:06.716 Benutzer_x 10.2.2.10 16003
3 10.12.2016 16:00:10.328 Benutzer_x 10.2.2.10 16001
3 10.12.2016 16:00:06.328 Benutzer_x 10.2.2.10 16003

Sessionid 1 liegt innerhalb der Zeit des Ausdrucks TIMEWINDOW, aber sessionid 2 wird beendet, da der Wert 3600 für TIMEWINDOW überschritten wird.