Рассмотрите таблицу, представляющую очередь, с отметкой времени datetime
для того, когда элемент был добавлен, и один для того, когда он будет завершен.В любой момент времени, сколько предметов не обрабатывалось?
Вопрос: Как я могу эффективно запрашивать в течение заданного времени, сколько элементов было в очереди, т.е. добавлен, но не завершен.
Пример из таблицы выборки:
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
Элементы могут быть добавлены в любое время, но это требует времени, чтобы они были завершены.
В приведенном выше примере 9, 10 и 11 находятся в процессе, поэтому я могу легко запросить, чтобы 3
элементов находятся в очереди прямо сейчас. Но как я могу запросить, чтобы найти, например, сколько элементов было в очереди и не было выполнено в любой момент времени?
Ищу результат, который выглядит примерно так:
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
Моя цель состоит в том, чтобы найти время с максимальным количеством элементов в очереди. Отсюда я мог бы сказать, что размер поставленного в очередь был самым высоким в 00:33 и что размер очереди в очереди был самым высоким 00: 12-00: 14.
Что я пытаюсь: Я экспериментировал с WITH
, как предлагалось в this answer. Он отлично работает только на одну дату, но когда я использую как критерии hs.added>= DATEADD(...
, так и hs.completed >= DATEADD(
, выполнение, которое было 0 секунд, теперь считается невозможным. Я не совсем понимаю процесс исполнения здесь.
Этот большой стол находится в производстве, и я не хочу, чтобы запрос выполнялся слишком долго.
Edit: статистика:
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
Вы всегда можете найти точное состояние очереди, просто заблокировав его? Получите детали, которые вы хотите, и отпустите. Покажите результаты. Вы сделали? Какая у вас проблема с этими точными результатами? –
Я хочу получить обзор того, как очередь вела себя со временем. – JOG
Да, статистика и образцы могут быть сохранены, но они не являются. Я анализирую прошлые данные и просматриваю пики, которые уже произошли. У меня нет роли администратора на этом производстве. – JOG