Как постепенно обработать куб SSAS для ускорения? - PullRequest
0 голосов
/ 20 декабря 2018

Мне нужно сократить время обработки куба SSAS с помощью AMO при добавлении данных в таблицу фактов в хранилище данных.

Согласно документу Microsoft по SSAS:

ПроцессДобавить

"Для измерений добавляет новые элементы и обновляет заголовки и описания атрибутов измерения. Для групп мер и разделов добавляет новые доступные данные фактов и обрабатывает только соответствующие разделы."

Process Full

"Обрабатывает объект служб Analysis Services и все содержащиеся в нем объекты. При выполнении Process Full для объекта, который уже был обработан, службы Analysis Services удаляют все данные вобъект, а затем обрабатывает объект. Этот вид обработки требуется, когда структурное изменение было внесено в объект, например, когда иерархия атрибутов добавлена, удалена или переименована. "

Таким образом, со следующимкод, я мог бы иметь по крайней мере аналогичное время обработки для записи независимо от количества данных в data warehouse.

var start = DateTime.Now;
var query = "SELECT [dbo].[FactGradingResult].* FROM [dbo].[FactGradingResult]  WHERE ([Id] = "+ grading2.Id+")";
ptn.Process(ProcessType.ProcessAdd,
    new QueryBinding(dsv.DataSourceID, query));
var end = ptn.LastProcessed;
swch2 = (end - start).TotalMilliseconds;

Но ProcessAdd по-прежнему требуется около 900 мс для обновления куба одной таблицей фактов.Это типичное время ProcessAdd для SSAS на 8-ядерном компьютере с тактовой частотой 2,5 ГГц в Windows Server 2012?Если нет, то как я могу улучшить время обработки куба для каждой таблицы в таблице фактов?

Ответы [ 2 ]

0 голосов
/ 31 декабря 2018

Исходя из вашего пояснения, что вы пытаетесь обновить куб в режиме реального времени, я бы порекомендовал вам взвесить, что для вас важнее.Производительность запросов важнее?Затем продолжите то, что вы делаете, так как производительность запросов MOLAP будет лучше, чем мое предложение ROLAP ниже.

Однако, если более важно иметь нулевую задержку при получении новых данных в куб, то я бы предложил вам перейти на некоторый подход, который включает ROLAP.

Для дальнейшего описания подхода ROLAP,Я бы порекомендовал создать один раздел MOLAP, который будет содержать все данные в вашей таблице фактов до вчерашнего дня.Затем создайте второй раздел с установленным StorageMode = ROLAP и отфильтрованный по всем строкам, поступившим сегодня.Затем каждую ночь изменяйте определения разделов соответствующим образом и повторно обрабатывайте первый раздел.Убедитесь, что все ваши измерения MOLAP, так как я предполагаю, что они не должны изменяться в реальном времени.(Я бы избегал измерений ROLAP по соображениям производительности.)

Возможно, вам придется установить свойство "Real Time OLAP = true" в строке подключения, как описано здесь .

0 голосов
/ 21 декабря 2018

Я считаю, что процесс add с правильным разделением сделает это за вас.Не эксперт в этом, но вот презентация о том, как сделать это из SQL субботы, к которой я шел некоторое время назад.http://www.sqlsaturday.com/SessionDownload.aspx?suid=3708

...