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

Откуда:
Сообщений: 46
Удаляю запросом из таблицы данные за прошлый год. При этом пользователи с этой таблицей работать практически не могут. Можно тут что-то сделать, чтобы не блокировать таблицу?
18 июн 09, 15:29    [7316051]     Ответить | Цитировать Сообщить модератору
 Re: Ка почистить старые записи в таблице не блокируя его?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Term2
Удаляю запросом из таблицы данные за прошлый год. При этом пользователи с этой таблицей работать практически не могут. Можно тут что-то сделать, чтобы не блокировать таблицу?

А зачем пользователи обращаются к данным за прошлый год ?
Или зачем вы блокируете данным не за прошлый год ?
18 июн 09, 15:31    [7316065]     Ответить | Цитировать Сообщить модератору
 Re: Ка почистить старые записи в таблице не блокируя его?  [new]
Term2
Member

Откуда:
Сообщений: 46
Из таблицы удаляю старые данные, пользователи обращаются к этой таблице за свежими данными.
18 июн 09, 15:34    [7316083]     Ответить | Цитировать Сообщить модератору
 Re: Ка почистить старые записи в таблице не блокируя его?  [new]
Proga
Member

Откуда: МО
Сообщений: 3042
Glory,

там видимо акромя кластерного индекса ничего нету
18 июн 09, 15:40    [7316126]     Ответить | Цитировать Сообщить модератору
 Re: Ка почистить старые записи в таблице не блокируя его?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Term2
Из таблицы удаляю старые данные, пользователи обращаются к этой таблице за свежими данными.

И как же вы и они задаете в запросах критерии, что есть свежее, а что старое ?
18 июн 09, 15:46    [7316151]     Ответить | Цитировать Сообщить модератору
 Re: Ка почистить старые записи в таблице не блокируя его?  [new]
Term2
Member

Откуда:
Сообщений: 46
А там есть такая колонка "Дата"
18 июн 09, 15:52    [7316195]     Ответить | Цитировать Сообщить модератору
 Re: Ка почистить старые записи в таблице не блокируя его?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Term2
А там есть такая колонка "Дата"

И по ней есть индекс ?
18 июн 09, 15:55    [7316213]     Ответить | Цитировать Сообщить модератору
 Re: Ка почистить старые записи в таблице не блокируя его?  [new]
Term2
Member

Откуда:
Сообщений: 46
Есть. И что делать?
19 июн 09, 10:55    [7319381]     Ответить | Цитировать Сообщить модератору
 Re: Ка почистить старые записи в таблице не блокируя его?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Term2
Есть. И что делать?

Делать так, чтобы он использовался вами и вашими пользователями
19 июн 09, 10:58    [7319400]     Ответить | Цитировать Сообщить модератору
 Re: Ка почистить старые записи в таблице не блокируя его?  [new]
Term2
Member

Откуда:
Сообщений: 46
Glory
Делать так, чтобы он использовался вами и вашими пользователями

Можно разъяснить подробнее? А то из вашего ответа я так и не понял, что собственно надо сделать.
19 июн 09, 14:14    [7320755]     Ответить | Цитировать Сообщить модератору
 Re: Ка почистить старые записи в таблице не блокируя его?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Term2
Glory
Делать так, чтобы он использовался вами и вашими пользователями

Можно разъяснить подробнее? А то из вашего ответа я так и не понял, что собственно надо сделать.

Ваши запросы должны быть написаны так,чтобы при их выполнении не происходило сканирования всей таблицы. Потому что как раз при сканировании всей таблицы один запрос будет блокировать все другие
19 июн 09, 14:24    [7320824]     Ответить | Цитировать Сообщить модератору
 Re: Ка почистить старые записи в таблице не блокируя его?  [new]
iljy
Guest
Term2,
приведите скрипт таблицы и индексов, и план запроса DELETE (и сам запрос кстати тоже не помешает)
19 июн 09, 14:26    [7320839]     Ответить | Цитировать Сообщить модератору
 Re: Ка почистить старые записи в таблице не блокируя его?  [new]
Deff
Member

Откуда: Пермь
Сообщений: 18323
Тут и так понятно, что индекс по дате не используется(если он не клястерный). При удалении по плану будет фулл скан. Данных за прошлый год больше, чем за этот. Оптимизатор выберет фулл скан.
Могу предложить удалять данные в цикле не большими порциями по 100 записей.
19 июн 09, 16:08    [7321647]     Ответить | Цитировать Сообщить модератору
 Re: Ка почистить старые записи в таблице не блокируя его?  [new]
iljy
Guest
можно указать индекс явно - вдруг поможет

delete
from table
from table with(index(IX_Table_ByDate))
where date > @Date

19 июн 09, 16:23    [7321773]     Ответить | Цитировать Сообщить модератору
 Re: Ка почистить старые записи в таблице не блокируя его?  [new]
sp
Member

Откуда:
Сообщений: 3947
использовать цикл while - да, медленновато, но зато без блокировок и никому не мешает )
19 июн 09, 23:25    [7323461]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить