Автор: Darren Gosbell
Дата публикации оригинала: 2007-04-24
Источник: Блог Darren Gosbell

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

Видели ли вы когда-либо ошибку «the operation has been cancelled» в длительных запросах (запросы, которые занимают более 30 секунд), в то время как куб или секция обрабатываются?

Что вы можете видеть в этом случае, так это поведение «по спецификации», когда ожидающая блокировка операции commit отменяет длительные запросы, что не позволяет завершить их. Существует свойство, которое может быть установлено как на сервере, так и в команде процессинга, и которое контролирует это поведение. Оно называется ForceCommitTimeout и имеет значение по умолчанию 30 секунд.

В Books Online содержится следующее описание ForceCommitTimeout

ForceCommitTimeout

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

По умолчанию в этом значении используется значение ноль (0), которое показывает, что другие команды не будут прекращены по тайм-ауту, когда текущая команда прекращается по тайм-ауту.

Как вы можете видеть на представленном ниже скриншоте, это не совсем верно. Значение по умолчанию, в действительности, составляет 30 секунд (30000 миллисекунд). Я не уверен, что это изменяется в SP2, но это может стать объяснением нескольких последних тем в группах новостей.



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

  • При процессинге объекта создается новая версия объекта, и эта новая версия находится там, где фактически происходит этот процессинг.

Возьмем, к примеру, измерение Дилер. Первый раз, когда вы процессируете это измерение, то видите в папке измерения файлы с такими названиями, как 1.(All).astore … 1 в этом случае обозначает версию измерения. При процессинге измерения вы увидите файлы с версией 2, в результате чего указанный выше файл изменится на 2.(All).astore. Таким образом, во время операции обновления старый набор объектных файлов отмирает и Analysis Server начинает использовать новые файлы.

Определение DDL измерения Дилер, которое содержится в файле измерения Reseller.1.dim.xml, исчезает и вы видите новое созданное файлом измерение Reseller.2.dim.xml. Если вы посмотрите внутрь этого файла, то вы увидите

<ObjectVersion>2</ObjectVersion>

  • Когда процессинг завершён, то на объект, который процессировался (а также на зависимые объекты) накладывается блокировка «pending commit». Если существуют текущие запросы, которые обрабатывают данный объект, то новые запросы помещаются в очередь до тех пор, пока текущая версия не будет заменена новой.
  • Если ForceCommitTimeout истекает и остаются незакончившиеся запросы, то они отменяются и старая версия меняется на новую, при этом все запросы, которые помещены в очередь, могут начать выполняться.

Это означает, что увеличение ForceCommitTimeout предоставит обрабатываемым в настоящее время запросам больше времени для завершения. Но это также означает, что запросы, которые были выполнены вскоре после снятия «pending commit», должны будут блокироваться на время тайм-аута, даже если они ещё не начали выполняться. Это приведёт к ощущению нестабильной производительности, так как запросы, выполняемые в данном интервале, могут потребовать почти в два раза больше времени для вывода результатов.

«Парой» к этой настройке является CommitTimeout, когда вы можете остановить операцию commit процессинга по тайм-ауту и выполнить откат, что позволяет продолжать выполнение текущих запросов до их завершения. Я не встречал людей, которые используют данную опцию так же часто, как ForceCommitTimeout, потому что при этом получается, что запросы являются более важными, чем операция процессинга.

(Если вы хотите ознакомиться со всей дискуссией по этой теме, то вы можете найти её здесь)

Спасибо Эдварду за его помощь с некоторыми деталями, представленными в этом посте.


Для удобства отслеживания новых публикаций рекомендуем подписаться на рассылку или на канал RSS.

Читайте также: