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

Откуда:
Сообщений: 2
Здравствуйте.
В течение нескольких месяцев использовал Change Data Capture для отлавливания изменений в 1С-овской базе на Microsoft SQL Server 2012 SP2 (точная версия - 11.0.5343.0) - работало как часы, никаких проблем не возникало. Недавно функция cdc.fn_cdc_get_net_changes_<capture_instance>, которую я использовал для получения изменений стала периодически зависать - там, где функция раньше возвращала результат за минуту, стала висеть часами. Причем результата дождаться не получалось - максимум прождал 14 часов, после чего остановил запрос. Слегка погуглив, наткнулся на вероятную причину:
FIX: Poor performance for cdc.fn_cdc_get_net_changes_<capture_instance> in SQL Server 2012 SP2
Assume that you have applied Microsoft SQL Server 2012 Service Pack 2 (SP2) on your computer. You call the cdc.fn_cdc_get_net_changes_<capture_instance> Change Data Capture (CDC) query in the sp_executesql stored procedure, and it may come from an application source such as SQL Server Management Studio Server (SSMS), CDC itself, or the SQL Server Integration Services (SSIS) packages. In this situation, you experience poor performance in SQL Server 2012.

Note The decrease in performance could be large. For example, a query can finish in a few seconds in SQL Server 2012 SP1. However, the same query can take several hours to run in SQL Server 2012 SP2. Additionally, statistics update does not help with the problem.


Показалось, что это именно мой случай.

В качестве фикса предлагалось установить Cumulative Update 3 for SQL Server 2012 SP2.

Ну я, чтоб не мелочиться, установил сразу сервис пак 3. Теперь версия SQL Server у меня такая - 11.0.6020.0.

После этого, заметил, что Change Data Capture вообще перестало работать. Выключил его для всей базы, потом включил заново и настроил отслеживание изменений для желаемой таблицы. Через некоторое время заметил, что опять не работает отслеживание - sys.fn_cdc_get_max_lsn - возвращает одно и то же значение в течение нескольких часов, хотя, данные в отслеживаемой таблице точно меняются.
Причина оказалась в том, что в агенте упал джоб cdc.<название базы данных>_capture. В хистори была куча ошибок, самая ранняя из которых была такой:
Entry Time 2016-02-24 12:02:55.200, Msg 2601, Level 14, State 1, Не удается вставить повторяющуюся строку ключа в объект "cdc.<capture instance>_CT" с уникальным индексом "<capture instance>_clustered_idx". Повторяющееся значение ключа: (0x00e3d41400001cc000d3, 0x00e3d41400001b68001f, 1). Чтобы получить дополнительные сведения, выполните запрос к динамическому административному представлению sys.dm_cdc_errors.
.
Т.е. почему-то предпринималась попытка вставить дубликат в таблицу изменений. Кластеризованный индекс там имеет такую структуру:
CREATE UNIQUE CLUSTERED INDEX [<capture instance>_clustered_idx] ON [cdc].[<capture instance>_CT]
(
	[__$start_lsn] ASC,
	[__$seqval] ASC,
	[__$operation] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]


Выключение/включение Change Data Capture не помогает, бэкап/шринк лога не помогает (конкретные значения ключа, вызывающие нарушение уникальности меняются, но ошибка происходит та же самая).
Ради интереса включил Change Data Capture на другой базе на том же сервере - все работает без проблем. Т.е., вероятно, причина все-таки в самой базе - что-то там работает неправильно, а проблемы с CDC - это симптом этой неправильности.
Как пофиксить пока не представляю.
Буду благодарен помощи.
26 фев 16, 05:53    [18865452]     Ответить | Цитировать Сообщить модератору
 Re: Падает Change Data Capture после перехода c Microsoft SQL Server 2012 SP2 на SP3  [new]
satai
Member

Откуда:
Сообщений: 4
Насколько помню такое у нас произошло при апгрейде версии скуля. Как раз ваш случай.
Решил удалением схемы cdc, отключением CDC на базе, и повторным включением + накат схемы.

Кстати другой вариант. Бэкапишь БД. Апдейтишь текущий серв. Ресторишь БД.
Имхо косяк в скриптах апгрейда версии БД при инсталле.
14 мар 16, 12:53    [18927676]     Ответить | Цитировать Сообщить модератору
 Re: Падает Change Data Capture после перехода c Microsoft SQL Server 2012 SP2 на SP3  [new]
pavel.b
Member

Откуда:
Сообщений: 2
satai,
Как-то не совсем понятно... удалить схему [cdc] до выключения CDC на уровне базы вы не смогли бы, т.к. этой схеме принадлежат различные объекты. Или имеется в виду, что все объекты тоже вручную удаляли?
Фактически схема [cdc] (со всеми объектами) удаляется в момент выключения CDC для базы и создается - в момент включения. Решение с простым выключением/включением CDC на уровне всей базы я пробовал - мне это не помогло.
Бэкап/накат новой версии/рестор сейчас уже тоже сложно осуществить, т.к. новую версию уже накатили. Можно попробовать просто полный бэкап/рестор сделать, и пока надежда только на этот вариант остается... но тут не все от меня зависит, надо ждать, когда появится время и возможность.
21 мар 16, 04:55    [18957119]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить