На прошлой неделе мне по электронной почте задали вопрос о странных сообщениях в журнале ошибок, похожих на эти:
[DbId:12]. Removing xdes id: 0000:8112c9d0 from aborted xdes map.
[DbId:12]. Removing xdes id: 0000:8112b45e from aborted xdes map.
[DbId:12]. Removing xdes id: 0000:8112b403 from aborted xdes map.
Прежде всего, XDES — это структура данных (и класс C++) в механизме хранения (Storage Engine), представляющий транзакцию; это сокращение от «transaction descriptor» (дескриптор транзакции). Идентификатор XDES — это тот же самый идентификатор, который вы видите в столбце Transaction ID в выводе функции fn_dblog для изучения содержимого журнала транзакций (см. примеры здесь).
Эти сообщения безвредны и связаны с внутренней работой функции Ускоренного восстановления баз данных (Accelerated Database Recovery, ADR), которая позволяет мгновенно откатывать транзакции с помощью умного механизма версионности.
Карта прерванных транзакций (Aborted Transaction Map, ATM) содержит список транзакций, которые были откачены (внутренне называются «прерванными»), но их эффекты ещё не были «удалены» из базы данных. ATM используется:
- когда запрос читает строку, чтобы определить, является ли текущая версия строки результатом транзакции, которая впоследствии была откачена, и поэтому следует использовать предыдущую версию строки;
- когда запрос обновляет строку, чтобы определить, является ли текущая версия строки результатом транзакции, которая впоследствии была откачена, и тогда обновлённая строка должна перезаписать текущую версию строки.
Когда эффекты откаченной транзакции больше не нужно учитывать, её идентификатор удаляется из ATM.
Вы можете прочитать отличную статью, объясняющую внутреннее устройство Ускоренного восстановления баз данных, здесь.

Комментариев нет:
Отправить комментарий