Как сбалансировать память SQL Server с памятью служб аналитики SQL Server

11

У нас много систем с одинаковой конфигурацией

  • Один сервер (виртуальный или физический)
  • Запуск SQL Server (SQL) и SQL Server Analysis Server (AS)
  • несколько ядер
  • 16 ГБ ОЗУ

Каждую ночь SQL Server будет обрабатывать 2-3 часа, а затем - 2-3 часа обработки AS. Затем в течение дня запрашивается только AS.

Предполагая, что это выделенный сервер, и никакие другие приложения не вызывают беспокойства, и что эти два набора обработки являются полностью синхронными - нет перекрытий всегда один за другим - как я могу наилучшим образом установить ограничения памяти сервера SQL и AS.

Причина для того, чтобы спросить, состоит в том, что, если я не установлю ограничение для SQL, он захватит всю память, какую только может. Тем не менее, я понимаю, что SQL с радостью освободит эту память, если:

  • Это не использует его и

  • Другой сервис / программа запрашивает это.

Так что с логической точки зрения я считаю, что SQL может брать столько, сколько ему нужно, но я не уверен в AS » TotalMemoryLimit. Я не уверен, что AS откажется от памяти. На самом деле, чтение большего количества приводит меня к убеждению, что неправильно принимать все это.

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

Надеюсь, это имеет смысл.

Прит Сангха
источник

Ответы:

9

Я думаю, что выполнимо форсировать обе службы, имея запланированное задание или службу, которая:

(a) перед ночной обработкой SQL Server отключает службу SSAS и увеличивает объем памяти, выделенной для SQL Server

(b) после того, как SQL Server завершит свою обработку, сократит максимальную память сервера и перезапустит SQL Server

(c) запускает SSAS

Это предполагает, что SSAS не обязательно должен быть подключен к сети во время обработки SQL Server. В противном случае измените (a) с «выключается» на «перезагружается» ... до тех пор, пока SSAS не предпринимает активных действий во время обработки SQL Server, не должно быть никаких опасений, что он украдет память.

Это также предполагает, что вы хотите, чтобы каждый сервис перекрывал потребление памяти и использовал одну и ту же память в разное время - я уверен, что есть способы с помощью affinity / NUMA и т. Д., Чтобы полностью отделить рабочее пространство или, в худшем случае, разместить их на разных машинах.

Аарон Бертран
источник
Я думаю, что, возможно, нам следует перезапустить SQL и после обработки SASS - поскольку он выполняет большое чтение (хранилище данных).
Прит Сангха
На самом деле, думая об этом, не будет ли перезапуск сервера SQL повлиять на всю обработку SQL?
Прит Сангха
1
@ Привет, да, не в этом ли смысл?
Аарон Бертран
7

Нужно ли запускать SQL и SSAS одновременно? Если нет, вы уверены на 100%?

Я хотел бы взглянуть на настройку параметров памяти для SQL и SSAS, чтобы увидеть, могут ли они взаимодействовать друг с другом.

Нам нужно будет оставить немного памяти для ОС, других процессов и многостраничного размещения. Возможно 4G?

Попробуйте что-то вроде этого ...

На стороне SQL установите Max Server Memory на 12G и Min Server Memory на 6G.

На стороне SSAS установите для TotalMemoryLimit значение 12G, а для LowMemoryLimit - 6G.

Также не включайте блокировку страниц в памяти.

Попробуйте несколько итераций, корректируя эти числа вверх или вниз.

Если это просто не работает, и вы знаете, что SQL и SSAS не нужно запускать одновременно, я бы попробовал предложить Аарону планирование заданий для включения и выключения служб.

Стивен
источник