Поделиться через


Выполнение пакетных операций (XMLA)

В XML для аналитики (XMLA) команда Batch используется для выполнения нескольких команд XMLA при помощи одного метода XMLA Execute. Несколько команд, содержащихся в команде Batch можно выполнить либо как одну транзакцию, либо как отдельные транзакции для каждой команды, последовательно или параллельно. В команде Batch также можно указывать внешние привязки и другие свойства для обработки нескольких объектов служб MicrosoftSQL ServerAnalysis Services.

Выполнение транзакционных и нетранзакционных пакетных команд

Команда Batch выполняет команды одним из двух способов:

  • Транзакционная
    Если атрибуту Transaction команды Batch установлено значение TRUE, команда Batch выполняет все команды, содержащиеся в ней, в рамках одной транзакции — транзакционный пакет.

    Если одна из команд в транзакционном пакете завершается ошибкой, службы Analysis Services откатывают все команды, содержащиеся в команде Batch, которые были выполнены до завершившейся ошибкой команды, а команда Batch сразу же завершается. Все команды, содержащиеся в команде Batch, которые еще не запускались, выполняться не будут. После завершения команды Batch она сообщает обо всех ошибках, возникших для завершившейся неудачей команды.

  • Нетранзакционные
    Если атрибуту Transaction задано значение FALSE, команда Batch выполнит каждую команду, содержащуюся в ней в отдельной транзакции — нетранзакционный пакет. Если в нетранзакционном пакете одна из команд завершается ошибкой, команда Batch продолжает выполнение команд после той команды, которая завершилась неудачей. После того, как команда Batch попытается выполнить все содержащиеся в ней команды, она сообщит обо всех возникших ошибках.

Все результаты, возвращаемые командами, которые содержатся в команде Batch, возвращаются в том порядке, в котором эти команды расположены в команде Batch. В зависимости от того, является ли команда Batch транзакционной или нетранзакционной, она возвращает разные результаты.

ПримечаниеПримечание

Если команда Batch содержит команду, которая не возвращает выходные данные, например команда Lock, и ее выполнение завершается успешно, команда Batch возвращает в элементе результатов пустой элемент root. Пустой элемент root дает возможность сопоставить каждую команду, содержащуюся в команде Batch, с соответствующим элементом root для результатов этой команды.

Возвращение результатов из результатов транзакционного пакета

Результаты команд, выполняющихся в рамках транзакционного пакета, возвращаются только после завершения выполнения всей команды Batch. Результаты каждой команды в отдельности не возвращаются по мере их выполнения, потому что завершение любой команды в рамках транзакционного пакета ошибкой ведет к откату всей команды Batch и всех содержащихся в ней команд. Если все команды запустились и была выполнены успешно, элемент return элемента ExecuteResponse, который возвращается методом Execute для команды Batch, будет содержать один элемент results, который, в свою очередь, содержит по одному элементу root для каждой успешно выполненной команды, содержащейся в команде Batch. Если же одну из команд в команде Batch не удалось запустить или она завершилась ошибкой, метод Execute возвращает сбой SOAP для команды Batch, в котором содержится ошибка завершившейся неудачей команды.

Возвращение результатов из результатов нетранзакционного пакета

Результаты выполнения команд в рамках нетранзакционного пакета возвращаются в том порядке, в котором эти команды расположены в команде Batch и по мере их возвращения каждой командой. Если не удалось запустить ни одной команды, содержащейся в команде Batch, метод Execute возвращает сбой SOAP, который содержит ошибку для команды Batch. Если запустить удалось хотя одну команду, элемент return элемента ExecuteResponse, возвращаемого методом Execute для команды Batch будет содержать один элемент results, в котором, в свою очередь, будет по одному элементу root для каждой команды, находящейся в команде Batch. Если в рамках нетранзакционного пакета не удается запустить или завершить одну или несколько команд, элемент root для завершившейся неудачно команды будет содержать элемент error с описанием ошибки.

ПримечаниеПримечание

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

Использование последовательного и параллельного выполнения

При помощи команды Batch включенные в нее команды можно выполнять последовательно или параллельно. При последовательном выполнении следующая команда из команды Batch может запуститься только после завершения выполнения текущей команды в команде Batch. При параллельном выполнении команд команда Batch может выполнять несколько команд одновременно.

Чтобы выполнять команды параллельно, необходимо добавить команды, которые требуется выполнить в этом режиме, в свойство Parallel команды Batch. В настоящее время параллельно службы Analysis Services могут выполнять только непрерывные, последовательные команды Process. Любые другие команды XMLA, например Create или Alter, включенные в свойство Parallel, выполняются последовательно.

Службы Analysis Services пытаются выполнить все команды Process, включенные в свойство Parallel, в параллельном режиме, однако гарантировать параллельное выполнение всех команд Process невозможно. Экземпляр анализирует каждую команду Process и, если он определяет, что выполнить команду в параллельном режиме невозможно, выполняет команду Process последовательно.

ПримечаниеПримечание

Чтобы команды можно было выполнять параллельно, атрибуту Transaction команды Batch необходимо установить значение TRUE, так как службы Analysis Services поддерживают только одну активную транзакцию на соединение, а нетранзакционные пакеты выполняют каждую команду в отдельной транзакции. В случае включения свойства Parallel в нетранзакционный пакет, возникнет ошибка.

Ограничение параллельного выполнения

Службы Analysis Services пытаются выполнить как можно большее число команд Process параллельно с учетом возможностей компьютера, на котором работает экземпляр служб. Ограничить число одновременно выполняющихся команд Process можно, установив атрибуту maxParallel свойства Parallel значение, указывающее максимальное число команд Process которые могут выполняться параллельно.

Например, в приведенной последовательности свойство Parallel содержит следующие команды:

  1. Create

  2. Process

  3. Alter

  4. Process

  5. Process

  6. Process

  7. Delete

  8. Process

  9. Process

Атрибут maxParalle свойства Parallel имеет значение 2. Это значит, что экземпляр выполнит приведенный ранее список команд в следующем порядке:

  • Команда 1 будет выполнена последовательно, так как это команда Create, а параллельно могут выполняться только команды Process.

  • Команда 2 выполняется последовательно за командой 1.

  • Команда 3 выполняется последовательно за командой 2.

  • Команды 4 и 5 выполняются параллельно после завершения команды 3. Несмотря на то, что команда 6 также является командой Process она не может выполняться параллельно с командами 4 и 5, поскольку свойство maxParallel имеет значение 2.

  • Команда будет выполнена последовательно после завершения команд 4 и 5.

  • Команда 7 выполняется последовательно за командой 6.

  • Команды 8 и 9 выполняются параллельно после завершения команды 7.

Использование пакетов команд для обработки объектов

Команда Batch содержит несколько дополнительных свойств и атрибутов, включенных в нее специально для поддержки обработки нескольких проектов служб Analysis Services:

  • Атрибут ProcessAffectedObjects команды Batch указывает, должен ли экземпляр также обрабатывать любые объекты, которым в результате команды Process, включенной в команду Batch, обрабатывающую указанный объект, требуется повторная обработка.

  • Свойство Bindings содержит коллекцию внешних привязок, которые используются всеми командами Process в команде Batch.

  • Свойство DataSource содержит внешнюю привязку к источнику данных, который используется всеми командами Process в команде Batch.

  • Свойство DataSourceView содержит внешнюю привязку к представлению источника данных, который используется всеми командами Process в команде Batch.

  • Свойство ErrorConfiguration указывает то, как команда Batch будет обрабатывать ошибки, обнаруженные всеми командами Process, содержащимися в команде Batch.

    Важное примечаниеВажно!

    Команда Process, если она находится в команде Batch, не может содержать свойств Bindings, DataSource, DataSourceView или ErrorConfiguration. Если эти свойства для команды Process задать необходимо, укажите требуемые сведения в соответствующих свойствах команды Batch, которая содержит команду Process.