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

Откуда:
Сообщений: 129
Доброе время суток,

вопрос на вскидку:
надо затереть энное количество строчек из таблицы без создания больших помех пользователям.
Тереть надо по неуникальному полю т.е. заранее не известно сколько строк буду тереть.
Для этого хочу сделать цикл и тереть по кусочкам, скажем 4500, дабы не было эскаляции.
Теперь вопрос как лучше написать сие:
DELETE TOP ....
или
DELETE .... WHERE Field IN (SELECT TOP ....) ?


Спасибо.
7 сен 17, 18:24    [20779661]     Ответить | Цитировать Сообщить модератору
 Re: DELETE TOP как средство борьбы с эскаляцией  [new]
_human
Member

Откуда:
Сообщений: 560
Daba
дабы не было эскаляции.

Что это ?

Daba
DELETE TOP

+
7 сен 17, 18:41    [20779693]     Ответить | Цитировать Сообщить модератору
 Re: DELETE TOP как средство борьбы с эскаляцией  [new]
iap
Member

Откуда: Москва
Сообщений: 46981
_human
Daba
дабы не было эскаляции.

Что это ?

Daba
DELETE TOP

Правда не знаете?

https://msdn.microsoft.com/ru-ru/library/ms189835(v=sql.100).aspx
7 сен 17, 19:11    [20779752]     Ответить | Цитировать Сообщить модератору
 Re: DELETE TOP как средство борьбы с эскаляцией  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
Вопрос относился к
Daba
эскаляции
7 сен 17, 19:34    [20779783]     Ответить | Цитировать Сообщить модератору
 Re: DELETE TOP как средство борьбы с эскаляцией  [new]
Daba
Member

Откуда:
Сообщений: 129
Руслан Дамирович,

https://technet.microsoft.com/en-us/library/ms184286(v=sql.105).aspx
7 сен 17, 21:45    [20779972]     Ответить | Цитировать Сообщить модератору
 Re: DELETE TOP как средство борьбы с эскаляцией  [new]
Massa52
Member

Откуда:
Сообщений: 379
http://dbadiaries.com/how-to-delete-millions-of-rows-using-t-sql-with-reduced-impact
SELECT 1
WHILE @@ROWCOUNT > 0
BEGIN
DELETE TOP (1000)
FROM LargeTable
END
--And another way…
DoItAgain:
DELETE TOP (1000)
FROM ExampleTable
IF @@ROWCOUNT > 0
GOTO DoItAgain
8 сен 17, 02:34    [20780346]     Ответить | Цитировать Сообщить модератору
 Re: DELETE TOP как средство борьбы с эскаляцией  [new]
cossack5
Member

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

Наверное, стоит завернуть в транзакцию.
8 сен 17, 05:10    [20780371]     Ответить | Цитировать Сообщить модератору
 Re: DELETE TOP как средство борьбы с эскаляцией  [new]
Massa52
Member

Откуда:
Сообщений: 379
cossack5,
Зачем - не подскажете? Транзакция, чтоб откатиться в зад?
Тут вроде как идея в следующем - "умерла, так умерла".
8 сен 17, 05:57    [20780385]     Ответить | Цитировать Сообщить модератору
 Re: DELETE TOP как средство борьбы с эскаляцией  [new]
iii2
Member

Откуда:
Сообщений: 202
Мы примерно так и делаем.
У нас есть некая база, из которой нужно удалять по полмиллиона записей иногда из главной таблицы, а таблицы связаны с помощью декларативной ссылочной целостности, с опцией каскадного удаления/изменения.
Сделать ничего не можем, т.к. это разработчики, и вопрос не обсуждается.
В результате - помечаем записи как удаляемые, и начинаем прибивать их по 1000 штук (просто эмпирически подобрали это значение как наибольшее число, при котором база заметно не блокируется) в джобе. Ну и паузы, соответственно вставляем в скрипт, чтобы пользователи продолжали работать.
Пользователи, конечно, не в восторге, т.к. при удалении база блокируется секунд на 5-7, но, т.к. между удалениями пауза по 10 секунд - работать они могут.

Другого варианта - не нашли.
Если кто знает - подскажите.
8 сен 17, 09:42    [20780773]     Ответить | Цитировать Сообщить модератору
 Re: DELETE TOP как средство борьбы с эскаляцией  [new]
Daba
Member

Откуда:
Сообщений: 129
Massa52
cossack5,
Зачем - не подскажете? Транзакция, чтоб откатиться в зад?
Тут вроде как идея в следующем - "умерла, так умерла".


100% !
10 сен 17, 09:45    [20784477]     Ответить | Цитировать Сообщить модератору
 Re: DELETE TOP как средство борьбы с эскаляцией  [new]
Slava_Nik
Member

Откуда: из России
Сообщений: 888
Massa52
http://dbadiaries.com/how-to-delete-millions-of-rows-using-t-sql-with-reduced-impact
SELECT 1
WHILE @@ROWCOUNT > 0
BEGIN
DELETE TOP (1000)
FROM LargeTable
END
--And another way…
DoItAgain:
DELETE TOP (1000)
FROM ExampleTable
IF @@ROWCOUNT > 0
GOTO DoItAgain


ага, направление правильное, но не реализация не очень
Посмотрю, когда нужно удалить миллиарды строк , а вы будете удалять по 1000 строк.
Вообще, нужно исходить, что является помехой для пользователя?
Если пользователю устроит ожидание минут 5-10 то можно спокойно удалять по миллион или более строк, если ожидание в секунды кретично, то тут надо думать.
Возможно, да удалять по 4000-5000 строк, возможно создать на время удаления нужный индекс в оналайн, а может вообще фильтрованный и потом удалять.
Удалять, как выше указано в скрипте, только количество определить от задачи и влияния на процессы.
10 сен 17, 15:10    [20784831]     Ответить | Цитировать Сообщить модератору
 Re: DELETE TOP как средство борьбы с эскаляцией  [new]
iap
Member

Откуда: Москва
Сообщений: 46981
Slava_Nik,

зачем индекс, если надо удалять всё, я не понял?
Сразу миллиард удалять предлагаете? Лог чудовищно вырастет.
Небольшими порциями в своей транзакции лучше - проверено.

Так короче:
DoItAgain:
DELETE TOP (1000) LargeTable;
IF @@ROWCOUNT > 0 GOTO DoItAgain;
10 сен 17, 16:07    [20784869]     Ответить | Цитировать Сообщить модератору
 Re: DELETE TOP как средство борьбы с эскаляцией  [new]
iap
Member

Откуда: Москва
Сообщений: 46981
iap
Так короче:
Присмотрелся, а вы как раз это и предложили!
Прошу прощения.
10 сен 17, 16:09    [20784871]     Ответить | Цитировать Сообщить модератору
 Re: DELETE TOP как средство борьбы с эскаляцией  [new]
Slava_Nik
Member

Откуда: из России
Сообщений: 888
iap
Slava_Nik,

зачем индекс, если надо удалять всё, я не понял?
Сразу миллиард удалять предлагаете? Лог чудовищно вырастет.
Небольшими порциями в своей транзакции лучше - проверено.

Так короче:
DoItAgain:
DELETE TOP (1000) LargeTable;
IF @@ROWCOUNT > 0 GOTO DoItAgain;


Он удаляет без условия что-ли? тогда зачем удалять, переименовать таблицу, создать новую, старую DROP.
Если с условием и таблица большая, то что бы каждый раз не была выборка, создать на время для удаления индекс подходящий индекс, чтобы выборка быстрее была..
Но все как , я уже писал, не описано, что понимается под влиянием.
А лог, ну да будет большой на время, потом уменьшите
10 сен 17, 16:41    [20784903]     Ответить | Цитировать Сообщить модератору
 Re: DELETE TOP как средство борьбы с эскаляцией  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 33682
Блог
iii2
Другого варианта - не нашли.
Если кто знает - подскажите.


режим версионности пробовали?
10 сен 17, 16:43    [20784908]     Ответить | Цитировать Сообщить модератору
 Re: DELETE TOP как средство борьбы с эскаляцией  [new]
iap
Member

Откуда: Москва
Сообщений: 46981
Slava_Nik
тогда зачем удалять, переименовать таблицу, создать новую, старую DROP.
На таблицу может быть завязано столько всего, что не дай бог её дропать.
10 сен 17, 16:54    [20784920]     Ответить | Цитировать Сообщить модератору
 Re: DELETE TOP как средство борьбы с эскаляцией  [new]
Massa52
Member

Откуда:
Сообщений: 379
Slava_Nik
Massa52
http://dbadiaries.com/how-to-delete-millions-of-rows-using-t-sql-with-reduced-impact
SELECT 1
WHILE @@ROWCOUNT > 0
BEGIN
DELETE TOP (1000)
FROM LargeTable
END
--And another way…
DoItAgain:
DELETE TOP (1000)
FROM ExampleTable
IF @@ROWCOUNT > 0
GOTO DoItAgain


ага, направление правильное, но не реализация не очень
Посмотрю, когда нужно удалить миллиарды строк , а вы будете удалять по 1000 строк.
Вообще, нужно исходить, что является помехой для пользователя?
Если пользователю устроит ожидание минут 5-10 то можно спокойно удалять по миллион или более строк, если ожидание в секунды кретично, то тут надо думать.
Возможно, да удалять по 4000-5000 строк, возможно создать на время удаления нужный индекс в оналайн, а может вообще фильтрованный и потом удалять.
Удалять, как выше указано в скрипте, только количество определить от задачи и влияния на процессы.


Реализация и объяснение изложены в статье - ссылка на которую приведена.
Тоже хотелось бы посмотреть - как вы будете удалять миллионы строк - следуя вашим советам.
11 сен 17, 04:04    [20785537]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить