Boas Práticas para Alto Desempenho

De Qknow
Ir para: navegação, pesquisa

Visão Geral

Existem diversos aspectos atrelados a escalabilidade e desempenho de uma solução em Qlikview, que vão desde a configuração de hardware até as questões de desenho da aplicação. Sem exaurir todos os aspectos deste tema, é possível destacar quatro aspectos principais que afetam diretamente a quantidade de usuários simultâneos e o tempo de resposta das interações dos usuários com os painéis criados.

  • Tamanho do Dado: É um fato conhecido que as organizações coletam e analisam cada vez mais enormes volumes de informações. No Qlikview, o volume de dados e a capacidade de operação do servidor QVS (QlikView Server) estão diretamente relacionados à memória RAM disponível e capacidade de processamento (CPU). Na medida em que aumenta a quantidade de dados, a quantidade de memória e CPU devem aumentar de forma linear para manter o mesmo tempo de resposta e desempenho para o usuário, considerando, em hipótese, que o servidor esteja no limite de memória e CPU.
  • Número de Usuários Simultâneos: Fundamentalmente, é importante que o Qlikview responda à carga de novos usuários de maneira escalar. Ou seja, na medida em que o acesso simultâneo aumenta, o desempenho deve ser mantido. Cada usuário que se conecta ao servidor e abre um arquivo QVW para análise, aumenta o consumo de memória e CPU. O consumo de memória inicia no momento da conexão do usuário, enquanto o uso de CPU é mais evidente nas operações de driw-down, filtros e seleções.
  • Número de Aplicações no Servidor: O número mais elevado de aplicações no QVS pode significar uma melhora de desempenho considerável quando comparado a criação de uma única aplicação. Entende-se como aplicação, neste cenário, os arquivos .QVD e .QVW responsáveis (em última instância) pela apresentação dos dados aos usuários para tomadas de decisão. Tipicamente, aplicações segmentadas por assunto ou nível de detalhamento (mais alto, médio, baixo) são mais eficientes do que um único projeto contendo todas as visões.
  • Desenho da Aplicação: Como em qualquer desenvolvimento de soluções, o desenho (arquitetura) da aplicação é determinante para endereçar as questões envolvidas com desempenho e escalabilidade. Melhores práticas na construção da interface do usuário devem ser observadas (a seguir neste documento) para tratamento de grandes volumes de dados. Entende-se como grandes volumes, fontes de dados superiores a 100GB e/ou arquivos .QVW maiores que 2GB. No entanto, os valores mencionados são apenas referências, não se configurando uma regra para todos os casos.


Boas Práticas (Dicas de Desempenho)

Considerando os aspectos mencionados, este documento apresenta algumas linhas de base para melhoria de desempenho e aumento da escalabilidade dos projetos em Qlikview. As práticas recomendadas estão baseadas em documentos oficiais da Qlik e experiência de campo dos consultores da TOCCATO.

Cálculo de Memória

Em projetos QlikView deve-se assegurar que o sistema terá memória suficiente para comportar o projeto (QlikView Document), os dados carregados e a quantidade de usuários simultâneos. Em linhas gerais, para calcular o volume de memória a ser utilizado aplica-se o cálculo a seguir.

  RAM = (RAM_Usuário x Número_de_Usuários) + RAM_Inicial
Onde:
  RAM_Inicial = Tamanho_do_Arquivo_QVW x Multiplicador_de_Tamanho
   
  RAM_Usuário = RAM_Inicial x RAM_Usuário_Adicional
   
  Tamanho_do_Arquivo_QVW = Fonte_de_Dados x (1 - Taxa_de_Compressão)
Assumindo que:
  RAM_Usuário_Adicional é um fator que deve variar entre 1% e 10%. Após o primeiro usuário conectar-se ao Qlikview Server,                         
                              cada nova conexão utilizará entre 1% e 10% do total de memória alocado para o primeiro usuário.
                              O primeiro usuário a conectar-se carrega os componentes e recursos necessários para apresentação
                              dos dados e que podem ser re-utilizados pelas demais conexões dos demais usuários.
   
  Multiplicador_de_Tamanho equivale a um fator de multiplicação do tamanho do arquivo QVW com base nos estudos feitos em
                              laboratório. Os resultados alcançados demonstram que há uma variação entre 2 e 10 para este fator,
                              resultante das operações de compressão que variam de acordo com o tamanho da base, valores únicos,
                              etc. O multiplicador deve ser arbitrariamente inserido na fórmula preferencialmente a partir do
                              conhecimento que se tem sobre os dados.
   
  Taxa_de_Compressão que representa o quanto de compressão os dados que ocuparão a memória do servidor poderão ser
                              reduzidos. Tipicamente os valores variam entre 20% e 90%. Novamente, a métrica é baseada na taxa
                              de repetição dos dados carregados, quantidade de valores únicos, tipos de dados, entre outras
                              características. Quanto maiores forem os valores deste percentual menor será o resultado de 
                              memória necessário ao QVS.

Para maiores informações sobre a utilização de memória pelo QlikView, clique aqui.

Design da Aplicação

O termo Desenho da Aplicação refere-se a combinação de elementos que serão cruciais para o desempenho, funcionalidade e escalabilidade do projeto. Dentre os mais relevantes estão o modelo de dados, o uso de expressões, valores únicos, número de objetos por projeto, número de registros (dados), quantidade de variáveis, entre outras. Quando operando com grandes volumes de dados, é altamente recomendável que:

  • Evite (ou limite através de testes de desempenho) a quantidade de objetos do tipo LIST BOX em uma única TAB do arquivo QVW.
  • Reduza o uso de objetos do tipo TABLE ou PIVOT com grandes volumes de dados.
  • Evite o uso de expressões longas na camada de apresentação (operações do usuário na Interface Gráfica - UI).
  • Minimize o uso de MACROS.
  • Reduza o uso de variáveis usadas em expressões que controlam a camada de apresentação.
  • Evite o uso de objetos do tipo TEXT com complexos cálculos. Ao invés, utilize objetos gráficos ou mini-charts.
  • Minimize o tamanho do arquivo separando campos que teriam valores repetidos se permanecessem juntos. É o caso, por exemplo do DDD.
  • Carregue somente os campos necessários às operações, evitando carga de campos não utilizados para a memória.
  • Evite o uso do operador * (asterisco).
  • Se o uso de um objeto tabela for indispensável com grandes volumes de dados, acrescente uma condição de rolagem para carga parcial dos dados.


Em grandes volumes de dados é importante observar que a soma de pequenos ajustes resultam em grandes mudanças de consumo de memória e CPU. Um dos casos mais comuns é do uso do objeto do tipo TABLE (ou equivalentes). Mesmo para dados não agregados, a exibição de lista de valores exige uma quantidade de memória RAM considerável para soluções do tipo in-memory, como o QlikView. Por exemplo, assuma uma tabela com 5 campos, onde os 4 primeiros não superam 3000 ocorrências distintas. No entanto, o quinto campo corresponde a 50 milhões de registros. Neste cenário, o objeto será muito oneroso para ser exibido. A coluna de maior taxa de repetição (50 milhões de registros) forçará as demais a repetirem até alcançar o número total de 50 milhões de registros. Ou seja, o tamanho do objeto será muito maior (em termos de consumo de memória) do que os dados originalmente carregados, já que todas as colunas terão como base 50 milhões de linhas.

Um desenho alternativo da aplicação deve ser considerado sempre que o desempenho for alvo de melhorias, especialmente em grandes volumes de dados. Consolidar diferentes tabelas em uma concatenação de tabelas FATO melhora consideravelmente o desempenho do .QVW de grandes volumes.

QV Fact Table v1.png

Working Set

QlikView é executado sobre plataforma Microsoft Windows em dois conjuntos de chipsets, sendo x86 (32 bits) e x64 (64 bits). A plataforma Windows e o chipset correspondente trabalham integrados para prover recursos de memória para as aplicações e serviços, incluindo QlikView Server. Os recursos de memória são virtualizados impedindo que as aplicações e serviços façam acesso direto ao endereçamento físico da RAM. Ao invés, o sistema operacional provê uma camada denominada Virtual Memory. Desta forma, as aplicações e serviços (incluindo o QlikView Server ou Desktop Edition) requisitam memória ao sistema operacional sem ter acesso físico a mesma. O resultado de memória do sistema operacional Windows é a combinação da memória física com o arquivo de paginação. Na versão 64 bits, adicionalmente, o limite de memória é virtualmente infinito para os padrões atuais.

Dentro deste contexto, o Working Set é a definição criada pela Microsoft para o uso de memória sobre a plataforma Windows 32 e 64bits. Presente no QVS, esta configuração permite que o QlikView Server informe ao sistema operacional Windows Server que este o atenda somente com memória física (RAM), evitando o oneroso processo de SWAP em disco. No entanto, não há garantia de que exclusivamente o QVS irá operar somente em memória RAM, já que o esgotamento de memória para o próprio QVS forcará o sistema operacional a realizar as operações de SWAP. Ainda assim, para melhorar o desempenho em grandes volumes de dados, é recomendável as seguintes ações:

  • Defina o tamanho do arquivo de paginação do Sistema Operacional Windows em 150% do tamanho da memória física (RAM). Esta recomendação é oriunda do fabricante do sistema operacional (Microsoft) e otimiza o processo de endereçamento da memória.
  • Alternativamente, o arquivo de SWAP pode ser movido para um disco dedicado, com recomendação de que não haja serviços de redundância (RAID) que possam comprometer a velocidade de acesso ao arquivo.
  • Nas configurações do QlikView Management Console, dentro das configurações do sistema (System), Setup, Performance, configure o Working Set para o mínimo que se deseja manter em memória física, por meio do parâmetro Low. Valores típicos estão entre 60% e 80%, conforme imagem a seguir.


QVS - Working Set - v1 0.png

Para maiores informações sobre as configurações de Working Set pelo QMC, clique aqui.

Arquivos de Log

O QVS permite que operações sejam gravadas em arquivos de LOG para posterior análise pelas equipes técnicas. Típicas operações de LOG incluem informações sobre as sessões dos usuários, eventos e auditoria. Existe ainda o LOG de desempenho que é utilizado para investigação de problemas de performance e escalabilidade. Em grandes volumes de acesso e dados, os recursos destinados a estas operações podem ser necessários em outras funções, como por exemplo a própria carga de arquivos QVW ou o atendimento a novas requisições de acesso. Portanto, é altamente recomendável que, ao menos, o LOG de performance seja desabilitado se nenhuma investigação neste tema estiver ocorrendo. Para desabilitar o LOG de desempenho (ou qualquer um dos demais mencionados), realize o seguinte procedimento:

No QlikView Management Console, desmarque as opções referentes aos LOGs, no seguinte caminho:

  Acesse a TAB System
  Escolha a SUB-TAB Setup
  No painel a direita, escolha a TAB Logging e desmarque as opções a seguir:
   
  - Enable Session Logging
  - Enable Performanece Logging Every [x] Minutes
  - Enable Event Logging
  - Enable Audit Logging
  Obs: Arquivos de Log são gravados por padrão na pasta C:\ProgramData\QlikTech\QlikViewServer

Configurações do BIOS

Extensivos testes foram realizados na plataforma QVS (QlikView Server) para avaliar o comportamento da solução sobre diversas configurações de Hardware. Em média, concluiu-se que algumas configurações do BIOS do equipamento promovem alterações significantes no desempenho, principalmente no que tange a velocidade de acesso a memória RAM.

O QlikView não opera sobre modelo NUMA (Non-Uniform Memory Access). Desta forma, este recurso de hardware deve ser desabilitado no BIOS do equipamento para fins de aceleração do desempenho do QVS. Ao habilitar a opção Node Interleave a configuração de NUMA é desabilitada, o que eleva a velocidade de operações do QVS na memória RAM.

O resumo das configurações de BIOS que devem ser aplicadas para melhor desempenho em grandes volumes de dados estão apresentadas a seguir:

  Hyper Threading .......... Disable
  Node Interleave .......... Enable
  Hardware pre-fetch ....... Disable
  Turbo Boost Technology.... Enable
  HP Power Profile.......... Max Performance

Em termos de sistema operacional, é recomendável que o balanceamento de energia esteja configurado para desempenho. No Windows Server, as configurações de energia estão presentes no Control Painel e devem ser ajustadas para High Performance. Esta configuração, embora consuma mais energia, aumenta a capacidade de processamento para grandes volumes.

  NUMA (Non-Uniform Memory Access) é uma arquitetura de memória dos computadores usado para Multi-Processamento,
  onde o tempo de acesso a memória depende da localização do endereçamento. Com a NUMA, um processador pode ler
  e gravar dados em sua própria memória local, o que se torna mais rápido do que a leitura e gravação em outro
  segmento pertencente a outro processador ou à memória compartilhada. No entanto, o QlikView geralmente executa
  de maneira menos performática quando NUMA está habilitado. 

Em muitos dos equipamentos IBM este recurso não pode ser desabilitado. Desta forma, se faz necessário alterar o arquivo Settings.ini. Os valores válidos para a seção [Settings 7] são:

EnableNumaRoundRobin = 1 que indica que a funcionalidade está habilitada (NUMA ON)

EnableNumaRoundRobin = 0 que indica que a funcionalidade está desabilitada (NUMA OFF)

O arquivo pode ser encontrado no seguinte endereço:

C:\Document and Settings\All Users\Application Data\QlikTech\QlikViewServer for Windows 2003

C:\ProgramData\QlikTech\QlikViewServer for Windows 2008

  Nota: Nunca mescle pentes de memórias de tamanhos e velocidades diferentes, sob pena de perda acentuada de
        desempenho.

Outra configuração importante diz respeito a economia de energia. Em modernos processadores, a eficiência da redução do consumo de energia reduz a freqüência máxima dos processadores para cerca de 60%. Ao ativar Turbo Boost eleva a quantidade de ciclos de CPU entre 3% e 9%. Tanto Energy quanto Turbo Boost são configurações disponíveis am algumas versões de BIOS.

  Nota: Habilitar os recursos de Turbo Boost aumenta o consumo de energia.

Serviços Concorrentes

Para maior quantidade possível de dados em memória, é altamente recomendável que o QlikView Server não concorra com outros produtos instalados no mesmo equipamento. Desta forma, em linhas gerais, é importante que:

  • O QlikView Server seja instalado em um equipamento dedicado a este fim.
  • O QlikView Publisher, se utilizado, deve ser instalado em um equipamento separado.
  • Serviços de banco de dados, servidores de aplicação Web e outros, devem ser instalados em equipamentos separados do QVS.
  • Alternativamente, o ISS pode ser utilizado como servidor de acesso aos QlikView Documents. Porém, apenas para esse fim.
  • Se instalado no mesmo servidor do QVS, o IIS deve ser utilizado apenas para substituir o QlikView HTTP Server.
  • No caso do sistema operacional Windows Server, certifique-se de que serviços desnecessários não estão em execução.
  Nota: O QVS utiliza memória de maneira diferenciada em relação ao QlikView Publisher. Portanto, é uma prática
        recomendada separar os produtos em diferentes equipamentos.

Considere ainda parar os seguintes serviços do S.O. Windows, caso não esteja sendo utilizado no ambiente em questão:

  • Distributed Transaction Coordinator
  • Group Policy Client
  • Microsoft Antimalware Service
  • Print Spooler
  • Remote Registry
  • Task Scheduler
  Obs.: Certifique-se com a equipe de gestão do sistema operacional que os serviços acima não estão em uso e que podem
        ser desabilitados. A lista contendo todos os serviços executados sobre o S.O. Windows Server pode ser visualizada
        pelo Server Manager.

Detectando Gargalos

Interface Gráfica (GUI)

Quando há suspeitas de problemas de desempenho relacionados a um ou mais objetos na Interface Gráfica do Usuário (GUI), tipicamente a investigação de qual destes componentes apresenta a pior performance é uma tarefa difícil, especialmente quando há dezenas de componentes em diferentes Sheets. Neste caso, a análise de memória por meio de estatísticas coletadas dos objetos pode orientar na descoberta do componente mais oneroso. Para realizar uma análise de memória dos componentes, siga o seguinte procedimento:

  (1) - Abra o documento que se deseja analisar o desempenho utilizando o QlikView Developer.
  (2) - Acione a Sheet que será alvo da análise.
  (3) - No menu Settings, escolha Document Properties. Em seguinda, escolha a guia General.
  (4) - Acione o botão Memory Statistics.

Este procedimento fará com que um arquivo de estatística de memória e processamento seja criado para a aplicação. As estatísticas serão coletadas a partir do uso do arquivo .QVW. Portanto, ao acionar o botão, navegue pela Interface, em especial nos objetos e agregações que há suspeita de problemas de desempenho.

Uma vez que o arquivo é criado, este é salvo com a extensão *.MEM e pode ser lido dentro de um novo .QVW criado apenas para este fim. O arquivo conterá o consumo de memória e CPU para os objetos navegados. Algumas razões comuns para baixo desempenho da interface gráfica do usuário quando este navega pelo painel criado, incluem:

  • Uso da função Count(Distinct <nome_do_campo). O uso do parâmetro distinct onera excessivamente o tempo de processamento. Na medida do possível, carregue os dados distintos a partir das operações de load ao invés de utilizar o parâmetro mencionado.
  • Dimensões calculadas. Em grandes volumes, dimensões calculadas oneram o tempo de processamento. É possível calcular as dimensões via script de carga ao invés de usar dimensões calculadas. Na medida do possível, evite o uso de dimensões calculadas em grandes volumes de dados.
  • Ordenação de grandes volumes (Sort). O exemplo mais comum é o objeto TABLE BOX. O recurso de ordenação é ativado por padrão (default) e exige grande quantidade de recursos computacionais e memória para realização da operação de ordenação em grandes volumes.

Hardware e o QlikView

Para grandes volumes de dados, é importante manter separados os equipamentos (hardware) responsáveis pelo QlikView Server e QlikView Publisher. O uso da memória pelo QVS (QlikView Server) e QVP (QlikView Publisher) são totalmente diferentes. Para ótimo desempenho em grandes volumes de dados, todos os componentes precisam estar ajustados, configurados e construídos para máxima performance. Dentre os componentes principais estão:

  • Configurações de Hardware
  • Aplicação construída no QlikView
  • Configurações do QlikView Server
  • Otimização no Sistema Operacional Windows

Configurações de Desempenho

As configurações recomendadas para máximo desempenho são:

  Intel Hyper Threadning Options ........... Disable
  Intel Turbo Boost Technology ............. Enable
  HP Power Profile ......................... Max Performance
  HW Prefetch .............................. Disable
  Node Interleaving ........................ Enable

Outros componentes de hardware igualmente importantes a configuração do BIOS são a memória, CPU, Inter Socket Connection, Memory Bus e o Storage. Nos dias atuais, a maior parte dos equipamentos servidores possuem memórias internas para cada CPU, no passado chamadas de Internal Cache. As memórias são integradas às CPUs por meio das Memories Bus. O Inter Socket Connection liga as várias CPUs entre elas, ligando também as memórias de cada conjunto.

Quando há grandes volumes de dados, o processamento em várias CPUs exige a troca de informações entre estas, aumentando demasiadamente a complexidade de controle e acesso aos dados. Ao prever equipamentos servidores para o QlikView com grandes volumes de dados, é recomendável avaliar a especificação do fabricante quanto a velocidade do Bus (canal) de comunicação entre os processadores.

  Obs.: Em ambientes onde a tecnologia Intel Turbo Boost Techonology estiver disponível, considere habilitar o
        recurso e avaliar o resultado.

Virtualização (Máquinas Virtuais)

Uma constante pergunta sobre a plataforma QlikView refere-se ao uso de máquinas virtuais. O QlikView Server é certificado para uso com máquinas virtuais do software VMWARE.

Isso significa que o QlikView Server trabalha 100% em ambientes virtualizados, com o mesmo suporte que tem em ambientes físicos. É recomendável o uso da versão 5.0 em diante, do software VMWARE, uma vez que este possui recursos que tratam de maneira mais eficiente o uso de memória e CPU. O QlikView Publisher também trabalha bem com o ambiente virtual, embora sua segmentação (separação) do QlikView Server continue sendo uma regra a ser seguida. O recurso de Cloud Computing é baseado na idéia de virtualização, portanto opera tranquilamente com o QlikView Server.

Note que a máquina virtual é uma camada extra entre o sistema operacional Windows e o Hardware. Portanto, existe uma degradação de desempenho na casa de 10% a 40%. Geralmente o acesso à memória é um dos fatores de perda de performance, pois em máquinas virtuais esse acesso é mais lento do que em máquinas físicas. Para um produto in-memory, como o QlikView, essa diferença pode ser importante para grandes volumes.

Esteja certo de que a configuração de Memory Balloon está desabilitado para a máquina virtual onde o QlikView Server estiver operando. O recurso de Memory Balloon permite ao host identificar memória não utilizada dentro do sistema operacional hospedado (virtualizado) e solicitar os recursos disponíveis para outras finalidades.

Envelope01.jpg
Procurando Algo? Fale Conosco!

Voltar | Página Principal