Использование памяти на сервере

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

Монитор отслеживает использование памяти сервера процессами, не относящимися к Analysis Services, чтобы службам Analysis Services всегда был доступен объем памяти, указываемый в параметре "Общий предел памяти".

Knowledge Base article:

Сводка

Использование памяти на сервере, где размещен экземпляр SSAS, может повлиять на работоспособность и производительность сервера из-за конкуренции за общие ресурсы, которые экземпляр также должен распределять. Это может привести к нехватке физической памяти на компьютере, что может заставить операционную систему использовать виртуальную память в файле подкачки на диске, которая работает во много раз медленнее физической памяти. Для любых критически важных для бизнеса приложений, зависящих от экземпляра SSAS, сервер следует настроить так, чтобы другие процессы (например, антивирусы, дефрагментация диска, другие экземпляры SSAS или ядро реляционной базы данных SQL Server и т. д.) не распределяли слишком большой объем памяти, что приводило бы к вышеописанной ситуации.

Причины

К наиболее распространенным процессам, которые активно конкурируют с экземплярами SSAS за использование памяти, в первую очередь относятся: другие экземпляры SSAS, компоненты ядра реляционной СУБД SQL Server и другие серверы баз данных, поскольку они имеют тенденцию к наиболее интенсивному использованию памяти на серверах, где также размещены экземпляры SSAS. Иногда программное обеспечение, не связанное с базами данных, также может использовать большие объемы памяти. Таким образом, соображения по использованию памяти часто влияют на конфигурацию сервера.

Кроме того, значение свободной незарезервированной памяти (параметр FreeUnreservedPercent) может стать отрицательным. Этот параметр вычисляется следующим образом: 100 % общего объема памяти минус высокий уровень использования памяти экземпляром (SSAS) и минус использование памяти другими процессами. Причины могут заключаться в следующем:

С помощью диспетчера задач можно исследовать использование памяти различными процессами на сервере. На вкладке "Процессы" в Windows Server 2008 R2 и на вкладке "Подробности" в Windows Server 2008 можно упорядочить процессы по столбцу "Память", чтобы найти процессы, использующие наибольшее количество памяти. Если экземпляры SSAS (msmdsrv.exe) или ядра реляционной СУБД SQL Server (sqlservr.exe) используют слишком много памяти, вы найдете их в этом списке и также сможете посмотреть, вносят ли свой вклад в потребление памяти другие процессы. Затем можно предпринять необходимые корректирующие действия (например, настроить использование памяти экземплярами SQL (это делает администратор SQL), установить дополнительное оборудование либо уменьшить или разделить рабочую нагрузку на компьютере).

Решения

Для решения проблем с общей загрузкой сервера администраторы должны понимать и учитывать множество факторов, в том числе требования к рабочей нагрузке, пользователей и расписание заданий, другие запланированные процессы на сервере и имеющиеся ресурсы. Действия по устранению чрезмерного выделения памяти на компьютере сервера могут включать любое из перечисленных ниже действий:

Внешнее

Документация TechNet по свойствам памяти служб Analysis Services

Настройка свойств сервера в службах Analysis Services

Руководство по настройке производительности многомерных служб SSAS

Переопределяемые параметры

Название

Описание

Значение по умолчанию

Критическое пороговое значение (в %)

Состояние работоспособности изменяется на "Критическое", если значение "Свободное незарезервированное (%)" становится ниже порогового значения.

5

Включено

Включает или отключает поток процесса

Да

Создает предупреждения

Определяет, создает ли рабочий процесс предупреждения

Да

Интервал (в секундах)

Повторяющийся интервал времени в секундах, по истечении которого запускается рабочий процесс.

900

Число выборок

Состояние работоспособности изменяется, если количество нарушений порогового значения больше или равно минимальному количеству нарушений.

4

Время синхронизации

Время синхронизации указывается в 24-часовом формате и может быть опущено.

 

Время ожидания (секунды)

Определяет время, в течение которого возможно выполнение рабочего процесса перед закрытием и пометкой как сбойный.

300

Пороговое значение предупреждения (%)

Состояние работоспособности изменяется на "Предупреждение", если значение счетчика "Свободное незарезервированное (%)" опускается ниже порогового значения, но все еще выше критического порогового значения (в %).

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: другие процессы распределили слишком много памяти
Объем памяти, указанный в параметре "Общий предел памяти", может быть недоступен для SSAS, так как другие процессы выделили слишком много памяти ({4} ГБ).
Общий объем памяти сервера: {2} ГБ
Общее использование памяти: {5} ГБ
Память, используемая процессами, не относящимися к SSAS: {4} ГБ
Память, используемая SSAS: {3} ГБ
Нижний предел памяти SSAS: {6} ГБ ({7} \%)
Верхний предел памяти SSAS: {0} ГБ ({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>