Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Почему sql сервер неравномерно вставляет временные штампы ?  [new]
antnkretv
Member

Откуда:
Сообщений: 13
Привет всем. Вообщем, в базу добавляются штампы времени раз в секунду. В таблице нужно хранить последние 1800 штампов, а первые удалять. Для эксперимента я создал бесконечный цикл:
while 1=1
insert into criticalHistory (time_stamp) values (GETDATE())

И по идее удалять я собирался таким образом:
delete top((select COUNT(*) from criticalHistory)-1800) from criticalHistory.

Но проблема в том, что сервер почему то не последовательно добавляет временные штампы.
Время в таком порядке:
21:01:28
...
21:01:29
...
21:01:50 !!! (резкий перескок)
а потом опять 21:01:30
потом 21:01:29
...
21:01:30
и так далее, местами опять отклонение на 1 секунду назад, затем вперед.
Почему так? Он же по идее должен вставлять последовательно.
Получается таким методом мою проблему уже не решить, т.к. в истории должны храниться сведения за последние 30 минут (1800 записей) о состоянии объекта. А если удалять первые 1800 как я собрался, то будут удаляться записи и с середины, и с начала и конца.
Скриншот прилагаю
18 май 15, 20:20    [17657853]     Ответить | Цитировать Сообщить модератору
 Re: Почему sql сервер неравномерно вставляет временные штампы ?  [new]
antnkretv
Member

Откуда:
Сообщений: 13
Картинка с другого сайта.

К сообщению приложен файл. Размер - 127Kb
18 май 15, 20:26    [17657876]     Ответить | Цитировать Сообщить модератору
 Re: Почему sql сервер неравномерно вставляет временные штампы ?  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
delete top
а где Order by ?
18 май 15, 20:31    [17657891]     Ответить | Цитировать Сообщить модератору
 Re: Почему sql сервер неравномерно вставляет временные штампы ?  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
Shakill
delete top
а где Order by ?
извините, поспешил
18 май 15, 20:35    [17657904]     Ответить | Цитировать Сообщить модератору
 Re: Почему sql сервер неравномерно вставляет временные штампы ?  [new]
antnkretv
Member

Откуда:
Сообщений: 13
а что если данные равномерно добавляются, а со временем просто сбой какой-нибудь? ведь по логике если посмотреть, то каждая следующая запись добавляется перед предыдущей, так как время идет только вперед. Отсюда и вопрос, почему в базу они добавляются не поочередно ?
18 май 15, 20:38    [17657915]     Ответить | Цитировать Сообщить модератору
 Re: Почему sql сервер неравномерно вставляет временные штампы ?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
antnkretv
Но проблема в том, что сервер почему то не последовательно добавляет временные штампы.
И каким образом вы заставили сервер что-то делать самостоятельно?
18 май 15, 20:43    [17657934]     Ответить | Цитировать Сообщить модератору
 Re: Почему sql сервер неравномерно вставляет временные штампы ?  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
antnkretv, примерно так. при условии корректности time_stamp, как верно заметили

declare @cnt int = (select COUNT(*) from criticalHistory)-1800;

with cte as (
  select top(@cnt) t.time_stamp
  from criticalHistory as t
  order by t.time_stamp 
)
delete cte
18 май 15, 20:43    [17657936]     Ответить | Цитировать Сообщить модератору
 Re: Почему sql сервер неравномерно вставляет временные штампы ?  [new]
antnkretv
Member

Откуда:
Сообщений: 13
Shakill,

Помогло, спасибо. Только я что-то в синтаксисе не могу разобраться. Что такое t )?
18 май 15, 21:11    [17658023]     Ответить | Цитировать Сообщить модератору
 Re: Почему sql сервер неравномерно вставляет временные штампы ?  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1836
antnkretv,

t это предикат для таблицы criticalHistory

вы в своем удалении не учитывали фактор того, что если вы удаляете данные с инструкцией TOP данные должны быть отсортированны, иначе вы удаляете рандомное количество строк
18 май 15, 21:23    [17658043]     Ответить | Цитировать Сообщить модератору
 Re: Почему sql сервер неравномерно вставляет временные штампы ?  [new]
o-o
Guest
felix_ff
t это предикат для таблицы criticalHistory

наверное, алиас?
18 май 15, 21:31    [17658058]     Ответить | Цитировать Сообщить модератору
 Re: Почему sql сервер неравномерно вставляет временные штампы ?  [new]
o-o
Guest
antnkretv
сервер почему то не последовательно добавляет временные штампы.
Время в таком порядке:
21:01:28
...
21:01:29
...
21:01:50 !!! (резкий перескок)
а потом опять 21:01:30
потом 21:01:29
...
21:01:30
и так далее, местами опять отклонение на 1 секунду назад, затем вперед.
Почему так? Он же по идее должен вставлять последовательно.

он-то последовательно вставляет,
а вот выводит без order by, т.к. вы его не написали.

если бы у вас было еще, например, поле identity,
то, отсортировав по нему результат, никаких "скачков назад, затем вперед"
вы бы не увидели
18 май 15, 21:39    [17658073]     Ответить | Цитировать Сообщить модератору
 Re: Почему sql сервер неравномерно вставляет временные штампы ?  [new]
antnkretv
Member

Откуда:
Сообщений: 13
o-o,

понял, спасибо. А в каком порядке тогда выводится результат ? у меня так то time_stamp с первичным ключом, я думал первоначальная сортировка будет по нему
18 май 15, 21:48    [17658099]     Ответить | Цитировать Сообщить модератору
 Re: Почему sql сервер неравномерно вставляет временные штампы ?  [new]
Glory
Member

Откуда:
Сообщений: 104751
antnkretv
я думал первоначальная сортировка будет по нему

Нет никакой ни первоначальной, ни второначальной сортировок
Порядок записей в результате запроса гарантирует только наличие order by
18 май 15, 21:53    [17658120]     Ответить | Цитировать Сообщить модератору
 Re: Почему sql сервер неравномерно вставляет временные штампы ?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31949
antnkretv
у меня так то time_stamp с первичным ключом
Странно, а почему тогда там одинаковые значения?
18 май 15, 23:09    [17658454]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить