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

Откуда: Київ
Сообщений: 10428
есть таблица с 50 млн записей, есть внешнее приложение, которое идет по записям и обрабатывает, скажем - строит внешний индекс для каждой записи в таблице.

Но поскольку записей много, база в работе, да и таблица может меняться по ходу работы приложения - вопрос: как обрабатывать таблицу частями ?

Например, взять 1000, обработать, брать следующую необработанную и т.д.
Но надо учитывать, что в уже обработанную порцию юзер может внести изменения и измененная часть снова подлежит обработке...

как организовать процесс? ...
14 авг 09, 13:52    [7539326]     Ответить | Цитировать Сообщить модератору
 Re: гуру, как обработать большую таблицу по-умному  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Ну, например, навесить на таблицу столбец timestamp и выборку порций делать по возрастанию значений в нем.
Если какие-либо уже обработанные строки будут обновлены до окончания процесса обработки всей таблицы, они "поднимутся" версией строки снова кверху.
14 авг 09, 13:57    [7539372]     Ответить | Цитировать Сообщить модератору
 Re: гуру, как обработать большую таблицу по-умному  [new]
ТАРАКАН
Member

Откуда:
Сообщений: 439
может тригер поможет в итоге все обработаются.
14 авг 09, 13:57    [7539373]     Ответить | Цитировать Сообщить модератору
 Re: гуру, как обработать большую таблицу по-умному  [new]
Glory
Member

Откуда:
Сообщений: 104760
Winnipuh

как организовать процесс? ...

Что-то я не понял. Если уже есть "приложение, которое идет по записям и обрабатывает", то что вам еще нужно ?
Ну изменили уже обработанные запуси, ну так после окончания одного прохода запустите приложение заново.
14 авг 09, 13:59    [7539399]     Ответить | Цитировать Сообщить модератору
 Re: гуру, как обработать большую таблицу по-умному  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
tpg
Ну, например, навесить на таблицу столбец timestamp и выборку порций делать по возрастанию значений в нем.
Если какие-либо уже обработанные строки будут обновлены до окончания процесса обработки всей таблицы, они "поднимутся" версией строки снова кверху.


да, неплохо... и завести рабочую таблицу, где будут запоминаться текущие таймстампы.

А кстати, если таблица уже обработана (или пустая),
если повесить на неё .NET SqlDependency в приложении чтобы возбудить приложение - это нормально по производительности и т.д.? учитывая что записей до 100 млн может быть в непустой таблице
14 авг 09, 14:02    [7539431]     Ответить | Цитировать Сообщить модератору
 Re: гуру, как обработать большую таблицу по-умному  [new]
Сергей Мишин
Member

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

если дополнительное поле нельзя навесить(мало ли есть запросы типа insert table1 select), то повесить тригер который будет писать в отдельную таблицу primary key из первой для повторной обработки
14 авг 09, 14:06    [7539468]     Ответить | Цитировать Сообщить модератору
 Re: гуру, как обработать большую таблицу по-умному  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3197
Хм, а вы хорошо знаете механизм работы этого .NET SqlDependency? Стремно как-то, при таких объемах.
Я бы скорее смотрел в сторону нотификаций - триггер на инсерт/апдейт и из него слать алерты, или сообщения сервис-брокера, по вкусу.
14 авг 09, 14:08    [7539480]     Ответить | Цитировать Сообщить модератору
 Re: гуру, как обработать большую таблицу по-умному  [new]
Crimean
Member

Откуда:
Сообщений: 13148
а удаления будут? имхо timestamp + индекс на него "дешевле", чем триггер в "простых случаях"
17 авг 09, 14:28    [7546530]     Ответить | Цитировать Сообщить модератору
 Re: гуру, как обработать большую таблицу по-умному  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Crimean
а удаления будут? имхо timestamp + индекс на него "дешевле", чем триггер в "простых случаях"


удаления крайне редко делаются, в главной таблице записи только отмечаются флажком как удаленные, и потом когда-нибудь они физически удаляются.
17 авг 09, 14:45    [7546672]     Ответить | Цитировать Сообщить модератору
 Re: гуру, как обработать большую таблицу по-умному  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Glory
Winnipuh

как организовать процесс? ...

Что-то я не понял. Если уже есть "приложение, которое идет по записям и обрабатывает", то что вам еще нужно ?
Ну изменили уже обработанные запуси, ну так после окончания одного прохода запустите приложение заново.


мне хотелось бы и сам проход делать не по всей таблице, а по части, чтобы не было проблем с блокировками и т.д.., во время этой обработки другие приложения пишут в эту таблицу...меняют.
Похоже timestamp надо использовать для порций
17 авг 09, 14:51    [7546725]     Ответить | Цитировать Сообщить модератору
 Re: гуру, как обработать большую таблицу по-умному  [new]
Crimean
Member

Откуда:
Сообщений: 13148
> проход делать не по всей таблице, а по части, чтобы не было проблем с блокировками

RCSI вам в руки :) оч хорошо со стэмпом. и про min_active_rowversion() не забывать
17 авг 09, 15:07    [7546858]     Ответить | Цитировать Сообщить модератору
 Re: гуру, как обработать большую таблицу по-умному  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 33339
Блог
Что-то подобное можно использовать. Я так обработал таблицу в 1.6 мрд записей)

while (условие обработки)
begin

WAITFOR ...
  обработка с top (N) и READPAST
  

end
17 авг 09, 15:10    [7546888]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить