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

Откуда: Москва
Сообщений: 4727
господа есть таблица со множеством полей. (В основном INT (SMALL, BIG), DECIMAL, иногда короткие строки).

на ней происходит инкрементальный MERGE. Который затрагивает 0.1-1% записей. 20% INSERT 80% UPDATE. Нужно аккуратно, не мешая транзакциям на этой таблице залогировать какие именно поля как часто меняются.

Например, проверяя каждую 1000-ю запись.

Какие есть рекомендации по оптимальному решению такой задачи? Желательно, чтобы то логирование можно было бы включать и выключать.

SQL Server 2014 Ent
29 май 17, 12:51    [20519743]     Ответить | Цитировать Сообщить модератору
 Re: Отследить характер изменений в таблице  [new]
LSV
Member [заблокирован]

Откуда: Киев
Сообщений: 30817
Совсем не мешая не получится. Если считать по скорости.
Можно в апдейт-триггере записывать в лог XML значения по важным полям. Потом делать разбор этих XML.
Немного геморно конеш. Но зато универсально.
29 май 17, 13:55    [20519982]     Ответить | Цитировать Сообщить модератору
 Re: Отследить характер изменений в таблице  [new]
msLex
Member

Откуда:
Сообщений: 8091
А обычный output inserted.[нужные поля], deleted.[нужные] прям из мержа в отдельную таблицы с асинхронным разбором не решит вашу задачу?
29 май 17, 14:17    [20520066]     Ответить | Цитировать Сообщить модератору
 Re: Отследить характер изменений в таблице  [new]
invm
Member

Откуда: Москва
Сообщений: 9347
a_voronin
Нужно аккуратно, не мешая транзакциям на этой таблице залогировать какие именно поля как часто меняются.
Асинхронно через CDC.
29 май 17, 14:22    [20520088]     Ответить | Цитировать Сообщить модератору
 Re: Отследить характер изменений в таблице  [new]
-Гвоздь-
Guest
a_voronin,

или CDC или CDT (sys_change_columns)

или собирать уникальные наборы COLUMNS_UPDATED() и считать их количество.
29 май 17, 14:28    [20520106]     Ответить | Цитировать Сообщить модератору
 Re: Отследить характер изменений в таблице  [new]
iap
Member

Откуда: Москва
Сообщений: 46977
-Гвоздь-
a_voronin,

или CDC или CDT (sys_change_columns)

или собирать уникальные наборы COLUMNS_UPDATED() и считать их количество.
А что возвращает COLUMNS_UPDATED() ?
29 май 17, 14:30    [20520114]     Ответить | Цитировать Сообщить модератору
 Re: Отследить характер изменений в таблице  [new]
aleks2
Guest
iap
-Гвоздь-
a_voronin,

или CDC или CDT (sys_change_columns)

или собирать уникальные наборы COLUMNS_UPDATED() и считать их количество.
А что возвращает COLUMNS_UPDATED() ?


Вестимо, битмаску полей, упомянутых в SET.

update t set x = x 


вернет бит x.
29 май 17, 14:41    [20520165]     Ответить | Цитировать Сообщить модератору
 Re: Отследить характер изменений в таблице  [new]
LSV
Member [заблокирован]

Откуда: Киев
Сообщений: 30817
Если сами значения не нужно отслеживать, то COLUMNS_UPDATED() то что нужно.
Разве что биты неудобно пересчитывать...
29 май 17, 14:43    [20520172]     Ответить | Цитировать Сообщить модератору
 Re: Отследить характер изменений в таблице  [new]
iap
Member

Откуда: Москва
Сообщений: 46977
aleks2
iap
пропущено...
А что возвращает COLUMNS_UPDATED() ?


Вестимо, битмаску полей, упомянутых в SET.

update t set x = x 



вернет бит x.
Привет, Алекс!
Ты ж понимаешь, я не тебя спрашивал...
-Гвоздь-, небось, по-другому это себе представляет.
LSV
Если сами значения не нужно отслеживать, то COLUMNS_UPDATED() то что нужно
Вроде именно про изменения и говорится в стартовом посте.
29 май 17, 14:52    [20520248]     Ответить | Цитировать Сообщить модератору
 Re: Отследить характер изменений в таблице  [new]
-Гвоздь-
Guest
iap,

Ооо, сам граф Калиостро + супер вангователь пожаловал!

Слова ТС без конкретики можно рассматривать по разному.
ИМХО, Предложить ТС различные варианты - лучше, возможно постановка задачи будет уточнена с точностью до грамма.
29 май 17, 15:02    [20520300]     Ответить | Цитировать Сообщить модератору
 Re: Отследить характер изменений в таблице  [new]
iap
Member

Откуда: Москва
Сообщений: 46977
-Гвоздь-
iap,

Ооо, сам граф Калиостро + супер вангователь пожаловал!

Слова ТС без конкретики можно рассматривать по разному.
ИМХО, Предложить ТС различные варианты - лучше, возможно постановка задачи будет уточнена с точностью до грамма.
Неуместный сарказм.
COLUMNS_UPDATED(), так же как и UPDATE(), почти совсем бесполезна на практике.
29 май 17, 15:04    [20520310]     Ответить | Цитировать Сообщить модератору
 Re: Отследить характер изменений в таблице  [new]
-Гвоздь-
Guest
iap,

Угу- это вы любителям ORM-а расскажите.
29 май 17, 15:06    [20520313]     Ответить | Цитировать Сообщить модератору
 Re: Отследить характер изменений в таблице  [new]
iap
Member

Откуда: Москва
Сообщений: 46977
-Гвоздь-
iap,

Угу- это вы любителям ORM-а расскажите.
Зачем? Я никого ни к чему не призываю. Делайте, как хотите. Мне-то что?
29 май 17, 15:08    [20520329]     Ответить | Цитировать Сообщить модератору
 Re: Отследить характер изменений в таблице  [new]
CrazyDr1v3r
Guest
SELECT modification_counter FROM sys.dm_db_stats_properties(object_id,stats_id)
- не подойдет? По каждой же колонке создается автоматически статистика по умолчанию.
29 май 17, 15:17    [20520379]     Ответить | Цитировать Сообщить модератору
 Re: Отследить характер изменений в таблице  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
CrazyDr1v3r
SELECT modification_counter FROM sys.dm_db_stats_properties(object_id,stats_id)
- не подойдет? По каждой же колонке создается автоматически статистика по умолчанию.

главное не обновить статистику?
я бы подключал при необходимости полную таблицу истории в триггер, через настройку. Потом выключал и анализировал..
29 май 17, 15:24    [20520406]     Ответить | Цитировать Сообщить модератору
 Re: Отследить характер изменений в таблице  [new]
Mr. X
Guest
a_voronin,

Использую COLUMNS_UPDATED() и UPDATED() для малонагруженных баз.
29 май 17, 18:10    [20521078]     Ответить | Цитировать Сообщить модератору
 Re: Отследить характер изменений в таблице  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4727
-Гвоздь-
a_voronin,

или CDC или CDT (sys_change_columns)

или собирать уникальные наборы COLUMNS_UPDATED() и считать их количество.


База SIMPLE RECOVERY
29 май 17, 18:58    [20521185]     Ответить | Цитировать Сообщить модератору
 Re: Отследить характер изменений в таблице  [new]
invm
Member

Откуда: Москва
Сообщений: 9347
a_voronin
База SIMPLE RECOVERY
И?
CDC и в simple работает.
29 май 17, 19:06    [20521196]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить