Thiago Zavaschi R2 www.zavaschi.com

24Apr/125

Gestão de Memória no Reporting Services

Olá pessoal :)

Uma dúvida muito comum que recebo é: posso por o meu servidor de relatórios (Reporting Services) no mesmo servidor de base de dados (database engine). A resposta é: claro que pode…. tecnicamente, mas dependendo da demanda, não é uma boa estratégia quando o objetivo é performance.

O foco aqui será a questão da gestão da memória RAM, mas o fato de usar o mesmo servidor também tem impacto na parte de processamento (vamos deixar isso para um post futuro abordando arquitetura :) ).

É fato que a engine relacional do SQL Server utiliza toda a memória disponível para ele, seja com cache de dados, planos e etc. A questão é que o Reporting Services também tenta fazer isso. E a velha máxima persiste: dois corpos não podem ocupar o mesmo local no espaço ao mesmo tempo.

Ok.. ok… traduzindo: a mesma porção de memória não pode ser ocupada por dois processos ao mesmo tempo.

Ambos são grandes consumidores de memória, mas se mesmo assim você quer colocar no mesmo servidor, ou então quer garantir que o funcionamento do SSRS ocorra sem pressionar a memória de outros processos ou do SO, a solução é configurar os thresholds de uso de memória.

Para a engine relacional, você consegue configurar os limites mínimos e máximos do consumo de memória (MinServerMemory e MaxServerMemory). No SSRS existem 4 parâmetros para isso e é importante além de conhece-los, saber qual o impacto no servidor.

Estes 4 parâmetros são configurados no arquivo de configuração chamado: RSReportServer.config.

A figura abaixo (extraída do BOL) mostra os limites e os parâmetros.

Configuration settings for memory state

WorkingSetMaximum: Define o máximo de memória (em KBs) que o Reporting Services pode usar.

WorkingSetMinimum: Define o mínimo de memória (em KBs)  que o Reporting Services pode usar.

MemoryThreshold: Define o limite superior (percentual) da sessão de média pressão de memória.

MemorySafetyMargin: Define o limite superior (percentual) da sessão de baixa pressão de memória.

Um exemplo do arquivo de configuração (extraído do BOL) pode ser:

<MemorySafetyMargin>80</MemorySafetyMargin>
<MemoryThreshold>90</MemoryThreshold>
<WorkingSetMaximum>4000000</WorkingSetMaximum>
<WorkingSetMinimum>2400000</WorkingSetMinimum>

O importante de saber ANTES de se configurar/alterar estes parâmetros é entender como o SSRS funciona quando está em uma destas três zonas de pressão: baixa (low), média (medium) ou alta (high).

Baixa (Low): Todas as requisições são processadas, inclusive novas requisições também são aceitas. Requisições que necessitam de processamento em background continuam com uma menor prioridade.

Média (Medium): As requisições que estão executando continuam com seu processamento, enquanto que novas conexões são aceitas caso a caso. Alocações de memória de todos os application domains são reduzidas com grandes reduções dos processamentos em background. É dado prioridade maior aos requests gerados via web services e pela URL.

Alta (High): Não aceita novas requisições, e requisições por memória começam a ser negadas. O servidor inicia o processo de swap do estado para disco e as requisições atuais demoram mais.

Se por ventura atingir o teto máximo, o SQL Server Reporting services vai emitir erro HTTP 503. Em casos extremos o SSRS pode ter que reciclar o application domain.

Maiores informações sobre estas configurações podem ser encontradas aqui:
http://msdn.microsoft.com/en-us/library/ms159206.aspx


E era isso por hoje!

[]s!
Thiago Zavaschi

Comments (5) Trackbacks (0)
  1. Show de bola o artigo.

    Uma duvida Zavaschi. Assim como existe esse controle de memoria para o SSRS existe também para o SSAS? Digo isso pois tenho uma instancia de SSAS e nao sei como poderia melhorar o gerenciamento de memoria.

    Obrigado.

  2. Oi Freccia, obrigado!

    Existe sim, porém há algumas considerações quanto ao seu uso (mecanismos de limpeza de memória, etc.).
    Por enquanto sugiro que veja o Operations Guide do SSAS 2008 R2 na sessão de gestão de memória.
    Lembrando qeu para o modelo tabular (BISM) do 2012 há parâmetros adicionais e considerações adicionais também.

    Farei um post sobre ambos em breve.

    []s

  3. Esqueci de comentar, pouca gente sabe ou utiliza, mas o arquivo de configuração é o msmdsrv.ini. Todas as propriedades de configuração de servidor ficam nele.
    Não é que nem o SSRS que tem diversos arquivos de configuração.

  4. Zavaschi,

    Post muito bom. Eu não sabia dessa configuração de memória. Felizmente até hoje não precisei fazer esse tipo de intervenção, mas isso já havia me passado pela cabeça. O mesmo para o caso do Analysis. Vou pesquisar mais sobre o assunto.
    Vc comentou no inicio sobre colocar o Reporting em outro servidor. Tem situações em que isso pode ser inevitável, porém isso cria um outro problema. A licença só é válida para a mesma máquina. Se eu instalar o Reporting ou o Analysis em máquinas diferentes eu preciso licenciar também essas máquinas. Se estivermos falando de licenças Enterprise por processador (ou por core no 2012), a solução fica absurdamente cara. Acho que para lidar com situações assim, é mais viável ter uma boa máquina que permita virtualizar instâncias separadas de Reporting e Analysis para gerir o consumo de processador e memória.

    []s

  5. Ola,

    Poderia me esclarecer uma dúvida? Desculpe, estou um pouco aflita

    O cliente necessita que o relatório seja exportado em pdf. O relatório possui uma table com 41 coluas largas.

    Quando gerado, ele virá com aprox. 11.000 linhas.

    Seria necessário que eu aumentasse a largura (paisagem) para 100 cm, pois o cliente quer que as colunas não sejam quebradas. É como se fosse impresso numa plotter.

    Eu também coloquei a propriedade da tabela como keep together is possible.

    O problema é na hora de carregar no browser. Como não tem quebras, fica extremamente pesado ao ponto de travar.

    Já deparou com uma situação dessas? A resposta que eu iria dar ao cliente que não seria possível, mesmo com reinderização, etc…

    Muito obrigada,


Leave a comment


No trackbacks yet.