Назад | Перейти на главную страницу

Сильная нехватка памяти в SSAS 2008 в Windows Server 2008

У меня есть единственный экземпляр служб аналитики SQL Server 2008, работающий на Windows Server 2008 x64 с 8 ГБ ОЗУ на сервере. Для всех настроек памяти оставлены значения по умолчанию.

Когда служба SSAS запускается, она работает нормально. Однако всякий раз, когда к экземпляру выполняется запрос, служба SSAS будет постоянно использовать всю память на сервере до такой степени, что сервер необходимо перезагрузить. В настоящее время для параметров TotalMemoryLimit и LowMemoryLimit установлено значение 80% и 75% соответственно. По умолчанию HardMemoryLimit равен 0.

Почему SSAS использует всю память на сервере, несмотря на установленные ограничения? Нужно ли устанавливать HardMemoryLimit?

Из технет Свойства сервера служб SQL Server 2005 Analysis Services (SSAS)

SSAS имеет специальный фоновый поток «очистки» памяти, который постоянно определяет, нужно ли ему очистить память. Уборщик проверяет объем используемой памяти. Следующие основные процессы используются очистителем для управления объемом физической памяти, используемой сервером Analysis Server:

Если используемая память превышает значение, установленное в свойстве TotalMemoryLimit, очиститель очищает до этого значения.

Если используемая память меньше значения, установленного в свойстве LowMemoryLimit, очиститель ничего не делает.

Если используемая память находится между значениями, заданными в свойствах LowMemoryLimit и TotalMemoryLimit, очиститель очищает память по мере необходимости.

Если значение, указанное в любом из этих свойств, находится в диапазоне от 0 до 100, SSAS обрабатывает это значение как процент от общей физической памяти. Если указанное значение больше 100, SSAS обрабатывает это значение как абсолютное значение памяти (в байтах). Обратите внимание, что во время обработки Analysis Server, если ему требуется дополнительная память сверх значения, указанного в TotalMemoryLimit, он попытается зарезервировать эту сумму независимо от значения TotalMemoryLimit.

Обратите внимание, что MaxTotalMemory не определяет жестких ограничений на объем памяти, используемый службами Analysis Services. Скорее, это мягкое ограничение, которое используется для определения ситуаций, когда сервер испытывает нехватку памяти. Для некоторых операций, например обработки, если службам Analysis Services требуется дополнительная память, превышающая значение Memory \ TotalMemoryLimit, сервер служб Analysis Services пытается зарезервировать эту память независимо от значения свойства.

Короче говоря, TotalMemoryLimit можно не использовать при больших нагрузках.

Из SSASPerfGuide:

[W] При параллельной обработке нескольких разделов или обработке всего куба за одну транзакцию необходимо убедиться, что общий объем требуемой памяти не превышает значения параметра Memory \ TotalMemoryLimit. Если службы Analysis Services достигают значения Memory \ TotalMemoryLimit во время обработки, это не позволяет буферу агрегирования увеличиваться и может вызвать использование временных файлов во время обработки агрегирования.

Также большинство людей запускают SSAS на компьютере с SQL. Не забудьте оставить 1,5-2 ГБ для ОС и легких служб, установите и затем добавьте туда минимум памяти SQL (1 ГБ? 2?) Плюс около 0,5 ГБ для накладных расходов SQL (память устанавливает размер буферного кеша, а не всю память, которую использует sql ). Теперь установите процент ограничения памяти на основе этого. 100- (100 * (os + sql) / всего).

Если у вас есть 4 ГБ, используемые для SQL и os, установите TotalMemoryLimit на 50 (100- (100 * 4/8)). Помните о проблеме с временным файлом ... если он захватил всю память на вашем компьютере, то для обработки полного куба действительно может потребоваться столько рабочего места!

Я бы проверил счетчики perfmon, чтобы подтвердить, что именно использует память - неясно, используете ли вы диспетчер задач для определения использования. Служба Analysis Service должна максимально использовать свою память на уровне общего лимита памяти. Запросы продолжают выполняться? - зачем перезагружать? это убить текущие запросы? Я бы проверил счетчики очистки, чтобы увидеть, есть ли проблема - в конечном итоге вам может просто потребоваться добавить больше памяти для запросов, которые вы выполняете, или взглянуть на дизайн ваших кубов.