Utilização de Memória no Servidor

Microsoft.SQLServer.2008.AnalysisServices.UnitMonitor.Instance.MemoryUsageByOtherProcess (UnitMonitor)

O monitor observa o uso de memória pelos processos não Analysis Services no servidor para garantir que o Limite de Memória Total para o Analysis Services esteja sempre disponível.

Knowledge Base article:

Resumo

O uso de memória no servidor hospedando a instância do SSAS pode impactar a integridade e o desempenho do servidor competindo por recursos compartilhados nos quais a instância também deve realizar alocações. Isso pode levar ao esgotamento da memória física disponível no computador, que pode forçar o sistema operacional a mapear memória virtual para o arquivo de paginação no disco, solicitações de tamanho menor do que a memória física. Para qualquer aplicativo de negócios crítico que depende de uma instância do SSAS, o servidor deve ser configurado para que outros processos (por exemplo, antivírus, desfragmentação de disco, outras instâncias do SSAS ou o mecanismo do banco de dados relacional do SQL Server etc.) não aloque memória excessiva, levando a essa circunstância.

Causas

Os processos mais comuns para competir significativamente com instâncias do SSAS para memória incluem principalmente outras instâncias do SSAS, o mecanismo do banco de dados relacional do SQL Server ou outros servidores de banco de dados, porque eles tendem a consumir mais intensamente a memória hospedada em servidores em que o SSAS também está hospedado. Algumas vezes, software que não é do banco de dados também pode consumir muita memória. Sendo assim, as considerações de memória podem frequentemente impactar a configuração de um servidor.

Além disso, o valor da memória não reservada (parâmetro FreeUnreservedPercent) pode se tornar negativo. Esse parâmetro é calculado conforme descrito a seguir: 100% da memória total menos o uso de memória alta pela instância (SSAS) e menos o uso de memória por outros processos. Os motivos podem ser:

O Gerenciador de Tarefas pode ser usado para examinar o uso da memória por vários processos no servidor. Na guia Processos no Windows Server 2008 R2 e na guia Detalhes no Windows Server 2008, a pessoa pode classificar pela coluna Memória para encontrar os processos consumindo mais memória no sistema. Se as instâncias do SSAS (msmdsrv.exe) ou do mecanismo de banco de dados relacional do SQL Server (sqlservr.exe) consumirem memória excessiva, isso será uma maneira simples para identificar rapidamente o seu uso e, claro, também será possível ver se outros processos do sistema estão contribuindo para essa condição. Subsequentemente, ações corretivas (como ajustar o uso de memória das instâncias pelo administrador do SQL, adicionar hardware ou reduzir/dividir a carga de trabalho no computador) podem ser planejadas de acordo.

Resoluções

Resolver problemas de utilização total do servidor exige que os administradores compreendam e considerem vários fatores, incluindo, mas não se limitando, a requisitos da carga de trabalho, programações do usuário e de trabalho, outros processos agendados no computador servidor e os recursos disponíveis. Ações que solucionam alocações de memória total excessivas no computador servidor podem incluir qualquer uma das seguintes ações:

Externo

Documentação TechNet para as propriedades de memória do Analysis Services

Configurar propriedades do servidor no Analysis Services

Guia de Desempenho Multidimensional do SSAS

Parâmetros Substituíveis

Nome

Descrição

Valor padrão

Limite Crítico (%)

O Estado de Integridade mudará para Crítico quando o Espaço Livre não reservado (%) cair abaixo do limite.

5

Habilitado

Habilita ou desabilita o fluxo de trabalho

Sim

Gerar Alertas

Define se o fluxo de trabalho gera um Alerta

Sim

Intervalo em Segundos

O intervalo de tempo recorrente em segundos no qual executa-se o fluxo de trabalho.

900

Número de amostras

O Estado da Integridade muda se o número de violações do limite for maior ou igual ao Número Mínimo de Violações.

4

Hora da Sincronização

A hora da sincronização especificada usando um formato de 24 horas. Pode ser omitido.

 

Tempo limite (segundos)

Especifica o tempo que o fluxo de trabalho pode funcionar antes de ser fechado e marcado como com falha.

300

Limite de aviso (%)

O Estado de Integridade mudará para Aviso se o Espaço Livre Não Reservado (%) cair abaixo do limite, mas ainda for maior que o Limite Crítico (%).

10

Element properties:

TargetMicrosoft.SQLServer.2008.AnalysisServices.Instance
Parent MonitorSystem.Health.PerformanceState
CategoryPerformanceHealth
EnabledTrue
Alert GenerateTrue
Alert SeverityError
Alert PriorityNormal
Alert Auto ResolveTrue
Monitor TypeMicrosoft.SQLServer.2008.AnalysisServices.MonitorType.Instance.MemoryUsageByOtherProcessPercent
RemotableTrue
AccessibilityPublic
Alert Message
SSAS 2008: Outros processos alocaram muita memória
A quantidade de memória prescrita pela configuração Limite de Memória Total pode não estar disponível para o SSAS porque outros processos alocaram muita memória ({4} GB).
Memória total no servidor: {2} GB
Uso total de memória: {5} GB
Memória utilizada pelos processos não SSAS: {4} GB
Memória utilizada pelo SSAS: {3} GB
Limite de memória do SSAS baixo: {6} GB ({7}\%)
Limite de memória do SSAS alto: {0} GB ({8}\%)
RunAsDefault

Source Code:

<UnitMonitor ID="Microsoft.SQLServer.2008.AnalysisServices.UnitMonitor.Instance.MemoryUsageByOtherProcess" Accessibility="Public" Enabled="true" Target="SQLAS!Microsoft.SQLServer.2008.AnalysisServices.Instance" ParentMonitorID="SystemHealth!System.Health.PerformanceState" Remotable="true" Priority="Normal" TypeID="Microsoft.SQLServer.2008.AnalysisServices.MonitorType.Instance.MemoryUsageByOtherProcessPercent" ConfirmDelivery="false">
<Category>PerformanceHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.2008.AnalysisServices.UnitMonitor.Instance.MemoryUsageByOtherProcess.AlertMessage">
<AlertOnState>Error</AlertOnState>
<AutoResolve>true</AutoResolve>
<AlertPriority>Normal</AlertPriority>
<AlertSeverity>Error</AlertSeverity>
<AlertParameters>
<AlertParameter1>$Data/Context/Property[@Name='MemoryLimitHighGB']$</AlertParameter1>
<AlertParameter2>$Data/Context/Property[@Name='MemoryLeavesForOsGB']$</AlertParameter2>
<AlertParameter3>$Data/Context/Property[@Name='TotalPhysicalMemoryGB']$</AlertParameter3>
<AlertParameter4>$Data/Context/Property[@Name='MemoryUsageGB']$</AlertParameter4>
<AlertParameter5>$Data/Context/Property[@Name='MemoryUsageByOtherProcessGB']$</AlertParameter5>
<AlertParameter6>$Data/Context/Property[@Name='UsedPhysicalMemoryGB']$</AlertParameter6>
<AlertParameter7>$Data/Context/Property[@Name='MemoryLimitLowGB']$</AlertParameter7>
<AlertParameter8>$Data/Context/Property[@Name='MemoryLimitLowPercent']$</AlertParameter8>
<AlertParameter9>$Data/Context/Property[@Name='MemoryLimitHighPercent']$</AlertParameter9>
</AlertParameters>
</AlertSettings>
<OperationalStates>
<OperationalState ID="Error" MonitorTypeStateID="Below" HealthState="Error"/>
<OperationalState ID="Warning" MonitorTypeStateID="Between" HealthState="Warning"/>
<OperationalState ID="Success" MonitorTypeStateID="Above" HealthState="Success"/>
</OperationalStates>
<Configuration>
<WarningThreshold>10</WarningThreshold>
<CriticalThreshold>5</CriticalThreshold>
<IntervalSeconds>900</IntervalSeconds>
<SyncTime/>
<TimeoutSeconds>300</TimeoutSeconds>
</Configuration>
</UnitMonitor>