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

Откуда: СПб
Сообщений: 522
Имеется 3 таблицы (хранилище чеков): Head(id, …), Pos(id, headed, …), Disc(id, posID, …). HeadID и PosID – «проиндексированные» внешние ключи с правилом каскадного удаления. Накопилось данных за 2.5 года, хочу «подрезать» год – сервер уходит в ступор с ростом лога – почему это происходит я понимаю и в ФАКе читал. Не нашел, как можно этого избежать, кроме способа с переливом данных, который здесь не очень то подходит. Помогите, как лучше организовать частичное (но очень большое) удаление.
10 дек 09, 10:12    [8044674]     Ответить | Цитировать Сообщить модератору
 Re: Помогите. Массовое удаление из БД  [new]
--__Александр__--
Member

Откуда:
Сообщений: 2631
1) Удалять по 100 записей.
2) Убить внешние ключи. Написать скрипт, правильно очищающий три таблички.Создать ключи обратно.
10 дек 09, 10:21    [8044739]     Ответить | Цитировать Сообщить модератору
 Re: Помогите. Массовое удаление из БД  [new]
Пилотажный
Member

Откуда: NGC 6137
Сообщений: 2771
так и truncate лог
данные при чем?
10 дек 09, 10:22    [8044757]     Ответить | Цитировать Сообщить модератору
 Re: Помогите. Массовое удаление из БД  [new]
pr0ger
Member

Откуда: Москва
Сообщений: 1933
Пилотажный
так и truncate лог
данные при чем?

А truncate лог чем поможет? Он удаляет только неативную часть лога транзакций.
10 дек 09, 11:05    [8045118]     Ответить | Цитировать Сообщить модератору
 Re: Помогите. Массовое удаление из БД  [new]
Пилотажный
Member

Откуда: NGC 6137
Сообщений: 2771
pr0ger,
написано было про рост лога

А какие вообще объемы-то? И лог сейчас какой?
Вообще места на дисках сервера хватает для БД?
10 дек 09, 11:12    [8045179]     Ответить | Цитировать Сообщить модератору
 Re: Помогите. Массовое удаление из БД  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 33338
Блог
по 10000 лучше удаляйте
10 дек 09, 11:17    [8045225]     Ответить | Цитировать Сообщить модератору
 Re: Помогите. Массовое удаление из БД  [new]
leonbn
Member

Откуда: СПб
Сообщений: 522
Пилотажный
А какие вообще объемы-то? И лог сейчас какой?
Вообще места на дисках сервера хватает для БД?

База около 30Гб, данных хочу удалить ~30-40%. Перестает хватать места под бэкап (на другом диске), да и вообще не нужна такая длина истории. Сейчас лог небольшой, т.к. идет только заливка данных.
Когда я запустил удаление "в лоб", за 1.5 часа лог вырос до 12Гб, я этот запрос остановил, лог "почистил".
10 дек 09, 11:21    [8045261]     Ответить | Цитировать Сообщить модератору
 Re: Помогите. Массовое удаление из БД  [new]
leonbn
Member

Откуда: СПб
Сообщений: 522
Критик
по 10000 лучше удаляйте

По 10000 чего?
Одному заголовку чека может соответствовать 20 позиций, а каждой позиции 2 скидки.

Может имеет смысл удалять начиная с нижней таблицы, используя подзапросы, что бы не задействовать каскадное удаление
10 дек 09, 11:23    [8045287]     Ответить | Цитировать Сообщить модератору
 Re: Помогите. Массовое удаление из БД  [new]
Glory
Member

Откуда:
Сообщений: 104760
leonbn
Критик
по 10000 лучше удаляйте

По 10000 чего?
Одному заголовку чека может соответствовать 20 позиций, а каждой позиции 2 скидки.

У команды DELETE есть параметр TOP, которым можно ограничить число затрагиваемых командой записей
10 дек 09, 11:29    [8045353]     Ответить | Цитировать Сообщить модератору
 Re: Помогите. Массовое удаление из БД  [new]
letefon
Member

Откуда:
Сообщений: 128
например в самом общем случае вот так:
set rowcount 500
while 1 = 1
begin
	delete from table_name where Date < 'YYYYMMDD'
	if @@rowcount = 0 break
	waitfor delay '00:00:02'
end
10 дек 09, 11:34    [8045403]     Ответить | Цитировать Сообщить модератору
 Re: Помогите. Массовое удаление из БД  [new]
leonbn
Member

Откуда: СПб
Сообщений: 522
Спасибо всем, вечером буду пытаться удалять.
10 дек 09, 11:43    [8045465]     Ответить | Цитировать Сообщить модератору
 Re: Помогите. Массовое удаление из БД  [new]
Masygreen
Member

Откуда: Москва
Сообщений: 558
вконце концов отключите лог ..

К сообщению приложен файл. Размер - 0Kb
10 дек 09, 12:45    [8046068]     Ответить | Цитировать Сообщить модератору
 Re: Помогите. Массовое удаление из БД  [new]
--__Александр__--
Member

Откуда:
Сообщений: 2631
Лог распухает так одна транзакция большая.
10 дек 09, 13:14    [8046350]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить