Thiago Zavaschi R2 www.zavaschi.com

10May/131

Analysis Services Internals – Formula e Storage Engines (e como funciona o cache?)

Olá pessoal!

O tópico de hoje é para servir de base a todos que desejam conhecer um pouco mais de como o servidor do Analysis Services (SSAS) trabalha por trás dos panos.

Existem diversos mecanismos internos que são responsáveis / interagem no processamento de uma query que é enviada ao servidor de análise (o processo detalhado de execução de uma query vou abordar em um tópico futuro específico): XMLA Listener, Formula Engine, Storage Engine e assim por diante.

Esse post abordará sobre o que é e para que servem a Formula e a Storage Engine.

Formula Engine

Toda computação e calculo que uma query precisa realizar é feita pela Formula Engine (FE). Ela faz o processamento de todos os dados e também determina quais dados serão necessários para responder a query que foi enviada.

A FE é single threaded. Isso significa que se for identificado que a sua query está com gargalo na FE, então a solução seria utilizar máquinas/servidores com clock de processamento mais elevado.

Os dados que a FE precisa para responder a uma query são requisitados para a Storage Engine.

Storage Engine

A Storage Engine (SE) é a responsável pela devolução dos dados para as requisições feitas pela Formula Engine. As requisições de dados feitas são chamadas de Subcube Requests (e podem ser observadas através de um trace ou xEvents (no 2012)).

A SE é multi threaded e faz a requisição de dados (subcube requests) em paralelo. É responsável também por verificar se os dados necessários não estão disponíveis em agregações já criadas.

No caso da identificação de que o gargalo no tempo de execução da query é na SE, é possível minimizar com uso mais eficiente de agregações (para mais técnicas de otimização, consultar o Performance Guide do SSAS).

E o cache?

Toda vez que eu disparo uma query contra meu servidor de análise é necessário passar por todas essas etapas?

Não!

Existem diversos níveis de cache internos ao SSAS (fora o cache que pode existir na camada NTFS).

A ordem (simplificada) é a seguinte:

  1. Existe um cache para a Formula Engine: A query pode ser respondida usando ele? Se sim, retorna.
  2. Existe um cache para a Storage Engine: A FE fez uma requisição que está em cache? Se sim, retorna ela. (Se houverem outros subcube requests – muito comum – o processo é o mesmo).
  3. Verifica agora se há uma agregação que responde ao subcube request: Se sim, retorna da agregação.
  4. Caso contrário lê dos dados do measure group (opção mais custosa, principalmente se utilizado ROLAP, onde a leitura é contra um servidor externo).

 

Por hoje era isso. Estes conceitos serão bastante importantes para entender meu próximo post: “Posso utilizar o Query Log – já visto aqui no blog – para fazer auditoria ou contabilização de acesso de usuários?”

Obrigado e até a próxima!

Comments (1) Trackbacks (0)
  1. Bom dia Zavaschi, tudo bom?

    Cara teria como você me disponibilizar o material (ou o link) do webcast que você fez sobre o tema Analysis Services Internals que palestrou no aniversário do codificando?

    Obrigado!!


Leave a comment


No trackbacks yet.