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

Откуда:
Сообщений: 23
Достался мне по наследству сервачек isa. Который пишет логи в бд mssql 2005 standart. Пользователей 1500, бд растет очень бытро. В mssql висит задание, видимо на очистку бд, ниже строка:
delete from WebProxyLog where logTime<DATEADD(week,-6,getdate());

Сейчас проблема в том что при выполнении задания БД подвисает и рвется связь с isa, следствии чего падает служба Isa и инет.

Подскажите пожалуйста что делает эта строка?
21 май 12, 15:35    [12589478]     Ответить | Цитировать Сообщить модератору
 Re: Очистка БД ISA server 2006  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34705

> Сейчас проблема в том что при выполнении задания БД подвисает и рвется связь с
> isa, следствии чего падает служба Isa и инет.
>
> Подскажите пожалуйста что делает эта строка?

Удаляет из таблицы WebProxyLog
все записи, в которых поле logTime меньше, чем DATEADD(week,-6,getdate()), т.е.
шесть недель назад. Удаляются записи, которые старше чем шесть недель назад.

Лучше вычислить эту дату "шесть недель назад" и подставить в запрос, в виде

delete from WebProxyLog where logTime < 'YYYYMMDD'

если по полю logTime есть индекс и кол-во таких записей относительно
небольшое. Или форсануть индекс хинтом в запросе.

Posted via ActualForum NNTP Server 1.5

21 май 12, 16:02    [12589751]     Ответить | Цитировать Сообщить модератору
 Re: Очистка БД ISA server 2006  [new]
HuppeR
Member

Откуда:
Сообщений: 23
MasterZiv
> Сейчас проблема в том что при выполнении задания БД подвисает и рвется связь с
> isa, следствии чего падает служба Isa и инет.
>
> Подскажите пожалуйста что делает эта строка?

Удаляет из таблицы WebProxyLog
все записи, в которых поле logTime меньше, чем DATEADD(week,-6,getdate()), т.е.
шесть недель назад. Удаляются записи, которые старше чем шесть недель назад.

Лучше вычислить эту дату "шесть недель назад" и подставить в запрос, в виде

delete from WebProxyLog where logTime < 'YYYYMMDD'

если по полю logTime есть индекс и кол-во таких записей относительно
небольшое. Или форсануть индекс хинтом в запросе.


т.е. чтобы были удаленны данные до 1 апреля то - delete from WebProxyLog where logTime < 20120401'
а сам апрель и май не тронет, всё верно?

Модератор: Тема перенесена из форума "Проектирование БД".


Сообщение было отредактировано: 21 май 12, 16:37
21 май 12, 16:18    [12589895]     Ответить | Цитировать Сообщить модератору
 Re: Очистка БД ISA server 2006  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34705
HuppeR,

да.
21 май 12, 17:21    [12590426]     Ответить | Цитировать Сообщить модератору
 Re: Очистка БД ISA server 2006  [new]
HuppeR
Member

Откуда:
Сообщений: 23
MasterZiv
HuppeR,

да.


Спасибо! ! !
21 май 12, 17:26    [12590462]     Ответить | Цитировать Сообщить модератору
 Re: Очистка БД ISA server 2006  [new]
pochemu?
Guest
MasterZiv, а чем плохо

delete from WebProxyLog where logTime<DATEADD(week,-6,getdate());

?
21 май 12, 18:56    [12590828]     Ответить | Цитировать Сообщить модератору
 Re: Очистка БД ISA server 2006  [new]
RubinDm
Member

Откуда:
Сообщений: 461
pochemu?
MasterZiv, а чем плохо
delete from WebProxyLog where logTime<DATEADD(week,-6,getdate());
?

тем, что оно выражение, а не константа. Хотя, возможно, серверу в данном конкретном случае хватает ума интерпретировать результат выражения как константу, и в таком случае эффекта от использования константы не будет.
21 май 12, 19:16    [12590907]     Ответить | Цитировать Сообщить модератору
 Re: Очистка БД ISA server 2006  [new]
pochemu?
Guest
RubinDm
pochemu?
MasterZiv, а чем плохо
delete from WebProxyLog where logTime<DATEADD(week,-6,getdate());
?

тем, что оно выражение, а не константа. Хотя, возможно, серверу в данном конкретном случае хватает ума интерпретировать результат выражения как константу, и в таком случае эффекта от использования константы не будет.


и что с того, что выражение?
это ж не поле, засунутое в выражение, по которому не будет использоваться индекс.
вот пишу запрос как был и с константой.
планы одинаковые, что на 2005, что на 2008.
в обоих Index Seek,

в случае my_schema.my_table.my_date_field <DATEADD(week,-6,getdate())
Seek Predicates
End: my_schema.my_table.my_date_field < Scalar Operator DATEADD(week,-6,getdate())


в случае my_schema.my_table.my_date_field < '20120410'
Seek Predicates
End: my_schema.my_table.my_date_field < Scalar Operator (CONVERT_IMPLICIT(datetime, [@1], 0))


ну и в чем разница-то?
22 май 12, 14:33    [12594847]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить