===== Настройка выделения памяти опциями "Maximum server memory" и "Minimum server memory" =====
{{:1c:setting-up-microsoft-sql-server-for-1c-enterprise-8-3:pasted:20190417-165901.png }} Учитывая то, что требуется отдельный объём ОЗУ для работы самой ОС и инфраструктурных приложений, таких как всевозможные агенты мониторинга и управления, антивирусного ПО и т.п., крайне желательно задавать верхний порог потребления памяти процессом экземпляра SQL Server. В противном случае, при хорошей нагрузке на БД, сервер может со временем вычерпать всю доступную память и нарушить работу других приложений.
\\
==== Опция Maximum server memory ====
Принцип расчёта опции **Maximum server memory** возьмём из статьи [[https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/server-memory-server-configuration-options?view=sql-server-2016|Server Memory Server Configuration Options]]
В общем случае максимальный объём памяти, который можно выдать экземпляру SQL Server рассчитывается так:
stack size * calculated max worker threads + -g startup parameter (or 256MB by default if -g is not set).где: * Значение **stack size** рассчитывается согласно документа [[https://docs.microsoft.com/en-us/sql/relational-databases/memory-management-architecture-guide?view=sql-server-2017#stacksizes|Memory Management Architecture Guide]]. На 64-битной ОС с 64-битной SQL Server stack size равен **2048KB** * Значение **calculated max worker threads** рассчитывается согласно документа [[https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/configure-the-max-worker-threads-server-configuration-option?view=sql-server-2016|Configure the max worker threads Server Configuration Option]]. В этом документе приводится таблица расчётных значений в зависимости от количества процессоров и битности сервера. \\ В нашем случае используется 64-битный сервер с 12 ядрами, поэтому расчёт будет выполняться по формуле 512 + ((logical CPU’s - 4) * 16) = 640. Итак, в нашем примере накладные расходы SQL Server составят 2MB * 640 + 256MB = 1536MB = **1,5GB**. \\ \\ Обратите внимание на то, что если на сервере SQL Server планируется использовать более одного экземпляра SQL Server, то расчёт накладных расходов нужно выполнять по аналогии отдельно для каждого экземпляра. Например, в нашем случае планируется использование двух инстансов SQL Server, поэтому значение, которое нужно зарезервировать на накладные расходы SQL Server будет увеличено до **3GB** (1,5GB * 2) === Итоговый расчёт Maximum server memory === Согласно нашего примера, итоговый расчёт памяти, который можно указать в качестве **Maximum server memory** будет выглядеть так: Всего ОЗУ на сервере (72GB) - ОЗУ под нужды ОС (4GB) - ОЗУ под сторонние приложения (2GB) - ОЗУ накладные расходы SQL Server (3GB) = **63GB**. Теперь, учитывая то, что у нас на сервере будет 2 экземпляра SQL Server, остаётся только разделить полученную величину между экземплярами в зависимости от их потребностей и задать соответствующие значения в параметре. Одному из двух экземпляров SLQ Server, который в нашем случае будет использоваться разными мелкими служебными приложениями, мы разрешим использовать лишь малую часть расчётного максимального значения - **3GB**, а экземпляру SQL Server, который будет обслуживать базы **1C:Предприятие** мы отдадим оставшиеся **60GB** в качестве **Maximum server memory**. \\ ==== Опция Minimum server memory ==== Параметр **Minimum server memory** определяет нижнюю границу невысвобождаемой экземпляром SQL Server памяти. При запуске экземпляра эта память не занимается сразу, однако добравшись до этой нижней границы, указанный объём памяти закрепляется за работающим экземпляром SQL Server. Найти каких-то чётких рекомендаций относительно этого показателя для 1С не удалось, поэтому воспользуемся простым примером из документа [[https://its.1c.ru/db/metod8dev/content/5904/hdoc|1С:ИТС - Настройки Microsoft SQL Server для работы с 1С:Предприятием]] и установим значение **Minimum server memory** в виде половины от рассчитанного выше значения **Maximum server memory**. {{ :1c:setting-up-microsoft-sql-server-for-1c-enterprise-8-3:pasted:20190213-105916.png }} ---- Дополнительные источники информации: * [[https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/server-memory-server-configuration-options?view=sql-server-2016|Server Memory Server Configuration Options]] * [[https://docs.microsoft.com/ru-ru/sql/database-engine/configure-windows/server-memory-server-configuration-options?view=sql-server-2016|Параметры конфигурации сервера "Server Memory"]] ---- Проверено на следующих конфигурациях: ^ Версия ОС ^ Версия SQL Server ^ | Microsoft Windows Server 2012 R2 Standard EN (6.3.9600) | Microsoft SQL Server 2016 SP2 CU4 (13.0.5233.0) | ---- {{:user:blogroot.png?50&nolink |}} Автор первичной редакции:\\ [[user:blogroot|Алексей Максимов]] \\ Время публикации: 13.02.2019 10:57 {{tag>"SQL Server" "SQL Server 2016" "1C 8.3" "1C" Sizing "Server Memory" Perfomance}} ~~DISCUSSION~~ ~~NOTOC~~