Betrachten Sie eine Tabelle, die eine Warteschlange darstellt, mit einem Zeitstempel von datetime
, wenn ein Element hinzugefügt wurde, und einem Zeitpunkt, zu dem es abgeschlossen ist.Wie viele Artikel wurden zu irgendeinem Zeitpunkt nicht verarbeitet?
Die Frage: Wie kann ich effizient für jede gegebene Zeit abfragen, wie viele Elemente in der Warteschlange waren, dh. hinzugefügt, aber nicht abgeschlossen.
Eine Tabelle Probe Beispiel:
id value added completed
6 1 2016-01-01 00:00:12.345 2016-01-01 00:01:12.345
7 500 2016-01-01 01:12:12.345 2016-01-01 01:15:12.345
8 1 2016-01-01 01:12:12.345 2016-01-01 02:16:12.345
9 2 2016-01-01 01:33:12.345 NULL
10 2 2016-01-01 01:33:12.345 NULL
11 2 2016-01-01 01:33:12.345 NULL
Artikel jederzeit hinzugefügt werden können, aber es braucht Zeit für sie abgeschlossen sein.
In dem obigen Beispiel sind 9, 10 und 11 in Bearbeitung, so kann ich leicht abfragen, um zu finden, dass 3
Elemente gerade in der Warteschlange sind. Aber wie frage ich zum Beispiel nach, wie viele Objekte in der Warteschlange waren und zu keiner bestimmten Zeit abgeschlossen wurden?
Ich bin auf der Suche nach einem Ergebnis, das ungefähr so aussieht:
date time count sum value
2016-01-01 00:00:00.000 1 1
2016-01-01 00:12:00.000 2 501
2016-01-01 00:13:00.000 2 501
2016-01-01 00:14:00.000 2 501
2016-01-01 00:15:00.000 1 1
2016-01-01 00:33:00.000 3 6
Mein Ziel die Zeiten mit max Anzahl der Elemente in der Warteschlange zu finden ist. Von hier aus könnte ich sagen, dass die Größe des eingereihten Artikels bei 00:33 am höchsten war und dass die Größe des eingereihten Wertes die höchste 00: 12-00: 14 war.
Was ich versucht habe: ich mit WITH
experimentiert haben wie in this answer vorgeschlagen. Es funktioniert gut für nur ein Datum, aber wenn ich beide hs.added>= DATEADD(...
und hs.completed >= DATEADD(
Kriterien verwende, wird die Ausführung, die 0 Sekunden war, nie abgeschlossen. Ich verstehe den Hinrichtungsprozess hier nicht vollständig.
Diese große Tabelle ist in Produktion, und ich möchte eine Abfrage nicht zu lange ausführen lassen.
Edit: Statistik:
COLUMN_NAME DATA_TYPE CHARACTER_MAXIMUM_LENGTH IS_NULLABLE
ID int NULL NO
added datetime NULL NO
completed datetime NULL YES
value int NULL NO
CONSTRAINT_NAME
PK_Queue
name type_desc is_unique is_primary_key
PK_Queue CLUSTERED 1 1
IX_Queue_completed NONCLUSTERED 0 0
IX_Queue_added NONCLUSTERED 0 0
rows data
6 000 000 15 000 000 KB
Sie können immer den genauen Status der Warteschlange finden, indem Sie sie einfach sperren? Holen Sie sich die gewünschten Details und lassen Sie sie los. Zeigen Sie die Ergebnisse. Du bist fertig? Was ist das Problem, das Sie mit diesen genauen Ergebnissen haben? –
Ich möchte einen Überblick darüber erhalten, wie sich die Warteschlange im Laufe der Zeit verhalten hat. – JOG
Ja, Statistiken und Beispiele können gespeichert werden, sind es aber nicht. Ich analysiere vergangene Daten und suche nach Spitzen, die bereits passiert sind. Ich habe keine Admin-Rollen in dieser Produktionsdatenbank. – JOG