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

Откуда:
Сообщений: 517
День добрый!
Нужно обновить(update/insert или merge) DWH, речь идет об таблицах с тысячами строк, где-то 50 таблиц, процесс запускается каждые 2 минуты и добавляются/обновляются/удаляются порядка 100 строк в каждой таблице.

Сейчас в каждой таблице в корневой базе есть три триггера, на обновление, удалени или добавление строки, которые вносят имя таблицы, ID и код(изменение/удаление/добавление) строки в дополнительную таблицу AUDIT.

Процесс обновления DWH удаляет стоки с кодом удаления из соответствующих таблиц и добавляет/обновляет строки с соответствующим кодом согласно AUDIT.

Вопрос такой, стоИт ли изменить процесс, чтоб повысить производительнось?
Например добавить поле timestamp в каждую таблицу корневой базы, создать таблицу, содержащую последнее обновленное значение из каждой таблицы и в соответствии с этими данными обновлять DWH?
Тут проблема с удаленными записями, боюсь, что триггера не избежать :(

Или же добавить в каждую таблицу поле ModifiedDate(где по умолчанию CreatedDate), и делать выборку по этому полю с момента последнего сохраненного изменения для всех таблиц?

Какой способ будет самым эффективным в моей ситуации, в плане быстродействия?
Или же нет никакого криминала в использовании трех триггеров?

Огромное спасибо!
7 авг 13, 19:11    [14677812]     Ответить | Цитировать Сообщить модератору
 Re: Incremental loading  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Change Data Capture

хотя, возможно, будет достаточно и

Change Tracking

Сообщение было отредактировано: 7 авг 13, 19:35
7 авг 13, 19:33    [14677893]     Ответить | Цитировать Сообщить модератору
 Re: Incremental loading  [new]
lookat
Member

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

Если таблицы "с тысячами строк" (не с миллионами),
и задача такова, чтобы в DWH присутствовали такие же таблицы
с теми же данными, что и в базе-источнике, то можно просто
копировать таблицы целиком (bulk copy) из источника в DWH.

Триггеры при этом не нужны, производительность запросов
к базе-источнику как минимум не пострадает :-)
Так же как и производительность DWH.

Удачи
7 авг 13, 20:18    [14678008]     Ответить | Цитировать Сообщить модератору
 Re: Incremental loading  [new]
abrashka
Member

Откуда:
Сообщений: 517
pkarklin,
Спасибо! Уже курю матчасть.

lookat,
Да, речь идет о тысячах строк, но их не нужно тупо скопировать в DWH, идет копирование необходимых строк в mirror,
затем обработка в staging и дальнейшее обновление dwh.

На данный момент весь процесс занимает более полторы минуты и запускается каждые две минуты. Поэтому стал вопрос о повышении производительности. Даже миллисекунды играют роль в этом процессе.
7 авг 13, 23:05    [14678440]     Ответить | Цитировать Сообщить модератору
 Re: Incremental loading  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
abrashka
Даже миллисекунды играют роль в этом процессе.


Гм... Что за процесс, ибо всё предложенное выше не гарантирует требуемых временных характеристик?
7 авг 13, 23:43    [14678561]     Ответить | Цитировать Сообщить модератору
 Re: Incremental loading  [new]
abrashka
Member

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

сейчас процесс использует триггеры как описано выше, планируется переписать проект, вот думаю, какие могут быть альтернативы, ранее не использовал Change Tracking. сейчас изучаю по Вашему совету.
Если выиграю несколько процентов производительности- уже хорошо :)

Этот вопрос кстати в догонку к предидущему, стоит ли использовать merge вместо нынешнего insert/update.
7 авг 13, 23:51    [14678582]     Ответить | Цитировать Сообщить модератору
 Re: Incremental loading  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
abrashka,

Вы описываете выбранный Вами способ решения задачи, которая, к сожалению, не озвучена.
8 авг 13, 00:02    [14678626]     Ответить | Цитировать Сообщить модератору
 Re: Incremental loading  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
pkarklin
Вы описываете выбранный Вами способ решения задачи, которая, к сожалению, не озвучена.


Я не о "записи в DWH", а о получении данных из него, когда

автор
Даже миллисекунды играют роль
8 авг 13, 00:07    [14678645]     Ответить | Цитировать Сообщить модератору
 Re: Incremental loading  [new]
abrashka
Member

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

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

Сейчас речь идет об "выбрать измененные данные" с момента последнего запуска.
В каждой из таблиц сорса есть три триггера на удаление, обновление и добавление, которые вносят ID удалененной/измененной/добавленной строки и название таблицы в таблицу AUDIT, таким образом на этапе заполнения mirror делается данные из AUDIT связываются с соответствующими строками в соответствующих таблицах.

П.С. кажется накрылся план использования Change Tracking, речь идет о STANDARD версии
8 авг 13, 00:12    [14678676]     Ответить | Цитировать Сообщить модератору
 Re: Incremental loading  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
abrashka
Клиент хочет видеть репорты максимум с двухминутной задержкой.


Репорты настолько тяжелы, что их нельзя делать непосредственно над OLTP системой? Кстати, сколько сотен\тысяч транзакций в секунду она обеспечивает?
8 авг 13, 00:15    [14678690]     Ответить | Цитировать Сообщить модератору
 Re: Incremental loading  [new]
abrashka
Member

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

Думаю, что речь идет даже не о сотнях. (меньше)
В репортах много агрегаций, они достаточно тяжелы.
Кажется только Change Data Capture не работает в STANDARD, а Change Tracking да работает, буду пробовать

Спаибо!
8 авг 13, 00:25    [14678722]     Ответить | Цитировать Сообщить модератору
 Re: Incremental loading  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 34750
Блог
abrashka
Нужно обновить(update/insert или merge) DWH, речь идет об таблицах с тысячами строк, где-то 50 таблиц, процесс запускается каждые


тут не нужно хранилище,
запросы прямо поверх исходной базы,
только добавить нужные индексы
8 авг 13, 00:30    [14678747]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить