Low memory windows server

Содержание
  1. Устранение проблем с производительностью кэша и диспетчера памяти Troubleshoot Cache and Memory Manager Performance Issues
  2. Счетчики для мониторинга Counters to monitor
  3. Системный кэш файлов содержит структуры данных метафайлов NTFS System file cache contains NTFS metafile data structures
  4. Системный кэш файлов содержит файлы, сопоставленные с памятью System file cache contains memory mapped files
  5. Освобождение оперативной памяти Windows Server 2008R2 без перезагрузки
  6. Очень важно без перезагрузки сервера суметь освободить оперативную память, особенно когда ее не много
  7. Наблюдение за использованием памяти Monitor memory usage
  8. Настройка максимального размера памяти для SQL Server SQL Server Configuring SQL Server SQL Server max memory
  9. Наблюдение за памятью операционной системы Monitor operating system memory
  10. Изоляция памяти, используемой SQL Server SQL Server Isolating memory used by SQL Server SQL Server
  11. Примеры Examples
  12. Определение текущего распределения памяти Determining current memory allocation
  13. Определение текущего объема памяти, используемого сервером SQL Server Determining current SQL Server memory utilization

Устранение проблем с производительностью кэша и диспетчера памяти Troubleshoot Cache and Memory Manager Performance Issues

До выхода Windows Server 2012 две основные потенциальные проблемы приводят к увеличению размера кэша системных файлов до тех пор, пока объем доступной памяти не будет почти исчерпан при определенных рабочих нагрузках. Before Windows Server 2012, two primary potential issues caused system file cache to grow until available memory was almost depleted under certain workloads. Если эта ситуация приводит к медленной работе системы, можно определить, является ли сервер одной из этих проблем. When this situation results in the system being sluggish, you can determine whether the server is facing one of these issues.

Счетчики для мониторинга Counters to monitor

\Время существования долгосрочного резервного кэша памяти (в байтах), Memory\Long-Term Average Standby Cache Lifetime (s)

\Нехватка доступной памяти, МБ Memory\Available Mbytes is low

\Резидентные байты в системном кэше памяти Memory\System Cache Resident Bytes

Если объем \ доступной памяти (в МБ) слишком мал и в течение одного \ байта память, резидентная в кэш, занимает значительную часть физической памяти, можно использовать раммап , чтобы узнать, для чего используется кэш. If Memory\Available Mbytes is low and at the same time Memory\System Cache Resident Bytes is consuming significant part of the physical memory, you can use RAMMAP to find out what the cache is being used for.

Системный кэш файлов содержит структуры данных метафайлов NTFS System file cache contains NTFS metafile data structures

Эта проблема обозначается очень большим числом активных страниц метафайлов в выходных данных РАММАП, как показано на следующем рисунке. This problem is indicated by a very high number of active Metafile pages in RAMMAP output, as shown in the following figure. Эта проблема могла быть замечена на занятых серверах, к которым обращаются миллионы файлов, что приводит к кэшированию данных метафайлов NTFS, которые не освобождаются из кэша. This problem might have been observed on busy servers with millions of files being accessed, thereby resulting in caching NTFS metafile data not being released from the cache.

Проблема, используемая для устранения проблемы с помощью средства динкаче . The problem used to be mitigated by DynCache tool. В Windows Server 2012 + архитектура была переработана, и эта проблема больше не должна существовать. In Windows Server 2012+, the architecture has been redesigned and this problem should no longer exist.

Системный кэш файлов содержит файлы, сопоставленные с памятью System file cache contains memory mapped files

Эта проблема обозначается очень большим числом активных страниц, сопоставленных с файлами, в выходных данных РАММАП. This problem is indicated by very high number of active Mapped file pages in RAMMAP output. Обычно это означает, что какое-либо приложение на сервере открывает много больших файлов с помощью API-интерфейса CreateFile с _FLAG_RANDOM_ACCESS. This usually indicates that some application on the server is opening a lot of large files using CreateFile API with FILE_FLAG_RANDOM_ACCESS flag set.

Эта проблема подробно описана в статье базы знаний 2549369. This issue is described in detail in KB article 2549369. _ _ Флаг случайного _ доступа к файлу — это указание для диспетчера кэша, которое сохраняет сопоставленные представления файла в памяти (до тех пор, пока диспетчер памяти не сообщит о нехватке памяти). FILE_FLAG_RANDOM_ACCESS flag is a hint for Cache Manager to keep mapped views of the file in memory as long as possible (until Memory Manager doesn’t signal low memory condition). В то же время этот флаг указывает диспетчеру кэша, что необходимо отключить предзагрузку файловых данных. At the same time, this flag instructs Cache Manager to disable prefetching of file data.

Эта ситуация была устранена в некоторой степени за счет улучшения работы с обрезками в Windows Server 2012 +, но сама по себе проблема должна быть решена поставщиком приложения без использования _ флага файла с _ произвольным _ доступом. This situation has been mitigated to some extent by working set trimming improvements in Windows Server 2012+, but the issue itself needs to be primarily addressed by the application vendor by not using FILE_FLAG_RANDOM_ACCESS. Альтернативным решением для поставщика приложения может быть использование приоритета нехватки памяти при доступе к файлам. An alternative solution for the app vendor might be to use low memory priority when accessing the files. Это можно сделать с помощью API сетсреадинформатион . This can be achieved using the SetThreadInformation API. Страницы, доступ к которым осуществляется с низким приоритетом памяти, более агрессивно удаляются из рабочего набора. Pages that are accessed at low memory priority are removed from the working set more aggressively.

Диспетчер кэша, начиная с версии Windows Server 2016, в дальнейшем устраняет эту возможность, игнорируя FILE_FLAG_RANDOM_ACCESS при выполнении обрезки, поэтому она обрабатывается так же, как и любой другой файл, Открытый без флага FILE_FLAG_RANDOM_ACCESS (диспетчер кэша по-прежнему учитывает этот флаг для отключения предварительной выборки данных файлов). Cache Manager, starting in Windows Server 2016 further mitigates this by ignoring FILE_FLAG_RANDOM_ACCESS when making trimming decisions, so it is treated just like any other file opened without the FILE_FLAG_RANDOM_ACCESS flag (Cache Manager still honors this flag to disable prefetching of file data). При наличии большого числа открытых файлов с этим флагом и доступе к ним по-настоящему случайным образом можно вызвать чрезмерное количество системных кэшей. You can still cause system cache bloat if you have large number of files opened with this flag and accessed in truly random fashion. Настоятельно рекомендуется FILE_FLAG_RANDOM_ACCESS не использовать приложения. It is highly recommended that FILE_FLAG_RANDOM_ACCESS not be used by applications.

Читайте также:  Windows сбросить настройки прокси

Освобождение оперативной памяти Windows Server 2008R2 без перезагрузки

Очень важно без перезагрузки сервера суметь освободить оперативную память, особенно когда ее не много

Вот, как это можно сделать:

Перейду сразу к решению проблемы:

Из сайта Microsoft скачиваете утилитку RAMMap:

При запуске она покажет все процесы, даже системние, которих не увидите в диспетчере задач:

Если какой-то софт не освобождает память после себя, чтобы не перегружать из-за этого сервер, в RAMMap нужно по очереди выбрать следуюющие функции:

Empty -> Standby List
Empty -> SystemWorkingSet

И нажать F5 чтобы увидить разницу.

Вот, что получиться после этого:

Видим, что системние ресурси (Metafile, Mapped File), которие использовались системой освободили память. На скриншоте из диспетчером задач видно, что освободилось больше, чем полтора ГБ на сервере, которий и так нре был загружен под завязку.
Собственно, что и было нужно!

Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.

Наблюдение за использованием памяти Monitor memory usage

Применимо к: Applies to: SQL Server SQL Server (все поддерживаемые версии) SQL Server SQL Server (all supported versions) Применимо к: Applies to: SQL Server SQL Server (все поддерживаемые версии) SQL Server SQL Server (all supported versions)

Проводите периодический мониторинг экземпляра SQL Server SQL Server для подтверждения того, что память используется в допустимых пределах. Monitor an instance of SQL Server SQL Server periodically to confirm that memory usage is within typical ranges.

Настройка максимального размера памяти для SQL Server SQL Server Configuring SQL Server SQL Server max memory

По умолчанию экземпляр SQL Server SQL Server может со временем использовать большую часть памяти, доступной операционной системе Windows на сервере. By default, a SQL Server SQL Server instance may over time consume most of the available Windows operating system memory in the server. После занятия памяти она не высвобождается, пока не будет обнаружена нехватка памяти. Once the memory is acquired, it will not be released unless memory pressure is detected. Такое поведение является нормальным и не свидетельствует об утечке памяти в процессе SQL Server SQL Server . This is by design and does not indicate a memory leak in the SQL Server SQL Server process. Чтобы ограничить объем памяти, который сервер SQL Server SQL Server может использовать в своих целях, задайте параметр max server memory. Use the max server memory option to limit the amount of memory that SQL Server SQL Server is allowed to acquire for most of its uses. Дополнительные сведения см. в статье Руководство по архитектуре управления памятью. For more information, see the Memory Management Architecture Guide.

В SQL Server на Linux установить ограничение памяти можно с помощью средства mssql-conf и параметра memory.memorylimitmb. In SQL Server on Linux, set the memory limit with the mssql-conf tool and the memory.memorylimitmb setting.

Наблюдение за памятью операционной системы Monitor operating system memory

Для отслеживания нехватки памяти используйте приведенные ниже счетчики Windows. To monitor for a low-memory condition, use the following Windows server counters. Значения многих счетчиков памяти операционной системы можно запрашивать с помощью динамических административных представлений sys.dm_os_process_memory и sys.dm_os_sys_memory. Many operating system memory counters can be queried via the dynamic management views sys.dm_os_process_memory and sys.dm_os_sys_memory.

Память: доступно байтов Memory: Available Bytes
Этот счетчик указывает на то, сколько байт памяти доступно на данный момент для использования процессами. This counter indicates how many bytes of memory are currently available for use by processes. Низкие значения счетчика Доступно байтов могут указывать на общую нехватку памяти операционной системы. Low values for the Available Bytes counter can indicate an overall shortage of operating system memory. Это значение можно запросить с помощью T-SQL из sys.dm_os_sys_memory.available_physical_memory_kb. This value can be queried via T-SQL using sys.dm_os_sys_memory.available_physical_memory_kb.

Память: страниц/с Memory: Pages/sec
Этот счетчик показывает число страниц, которые были или получены с диска из-за ошибок страниц физической памяти, или записаны на диск для освобождения пространства в рабочем множестве из-за ошибок страниц. This counter indicates the number of pages that either were retrieved from disk due to hard page faults or written to disk to free space in the working set due to page faults. Большое значение счетчика Страниц/с может означать излишнюю подкачку. A high rate for the Pages/sec counter could indicate excessive paging.

Память: ошибок страницы/с Этот счетчик показывает частоту ошибок страниц для всех процессов, включая системные. Memory: Page Faults/sec This counter indicates the rate of Page Faults for all processes including system processes. Низкий, но не нулевой уровень выгрузки на диск (и вызванные ею ошибки страниц) является нормальным, даже если у компьютера достаточно большое количество доступной памяти. A low but non-zero rate of paging to disk (and hence page faults) is typical, even if the computer has plenty of available memory. Диспетчер виртуальной памяти (VMM) Microsoft Windows берет страницы из SQL Server SQL Server и других процессов по мере того, как он урезает размеры рабочих множеств этих процессов. The Microsoft Windows Virtual Memory Manager (VMM) takes pages from SQL Server SQL Server and other processes as it trims the working-set sizes of those processes. Деятельность VMM может привести к ошибкам страниц. This VMM activity tends to cause page faults.

Читайте также:  Видеокодек для mac os

Процесс: ошибок страницы/с Этот счетчик показывает частоту ошибок страниц для определенного пользовательского процесса. Process: Page Faults/sec This counter indicates the rate of Page Faults for a given user process. С помощью счетчика Процесс: ошибок страниц/с можно определить, вызвана ли повышенная активность диска подкачкой, выполняемой сервером SQL Server SQL Server . Monitor Process: Page Faults/sec to determine if disk activity is caused by paging by SQL Server SQL Server . Чтобы определить, является ли SQL Server SQL Server или другой процесс причиной излишней подкачки, наблюдайте за счетчиком Процесс: ошибок страниц/с для экземпляра процесса SQL Server SQL Server . To determine whether SQL Server SQL Server or another process is the cause of excessive paging, monitor the Process: Page Faults/sec counter for the SQL Server SQL Server process instance.

Дополнительные сведения об устранении проблемы излишней подкачки см. в документации по операционной системе. For more information about resolving excessive paging, see the operating system documentation.

Изоляция памяти, используемой SQL Server SQL Server Isolating memory used by SQL Server SQL Server

Для мониторинга использования памяти сервером SQL Server SQL Server используйте приведенные ниже счетчики объектов SQL Server. To monitor SQL Server SQL Server memory usage, use the following SQL Server object counters. Значения многих счетчиков объектов SQL Server можно запрашивать с помощью динамических административных представлений sys.dm_os_performance_counters и sys.dm_os_process_memory. Many SQL Server object counters can be queried via the dynamic management views sys.dm_os_performance_counters or sys.dm_os_process_memory.

По умолчанию сервер SQL Server SQL Server управляет требованиями к памяти динамически исходя из доступных ресурсов системы. By default, SQL Server SQL Server manages its memory requirements dynamically, based on available system resources. Если SQL Server SQL Server нужно больше памяти, он производит запрос к операционной системе, чтобы определить, доступна ли свободная физическая память, и использует ее. If SQL Server SQL Server needs more memory, it queries the operating system to determine whether free physical memory is available and uses the available memory. Если в операционной системе недостаточно свободной памяти, SQL Server SQL Server будет освобождать память для операционной системы до тех пор, пока нехватка памяти не будет устранена или пока SQL Server SQL Server не достигнет предела min server memory. If there is low free memory for the OS, SQL Server SQL Server will release memory back to the operating system until the low memory condition is alleviated, or until SQL Server SQL Server reaches the min server memory limit. Однако можно отказаться от динамического использования памяти, задав значения для параметров конфигурации сервера min server memory и max server memory. However, you can override the option to dynamically use memory by using the min server memory, and max server memory server configuration options. Дополнительные сведения см. в разделе Параметры памяти сервера. For more information, see Server Memory Options.

Для мониторинга объема памяти, используемого SQL Server SQL Server , наблюдайте за следующими счетчиками производительности. To monitor the amount of memory that SQL Server SQL Server uses, examine the following performance counters:

SQL Server: Memory Manager: общая память сервера (КБ) SQL Server: Memory Manager: Total Server Memory (KB)
Этот счетчик показывает объем памяти операционной системы, выделенной в настоящее время серверу SQL Server SQL Server диспетчером памяти SQL Server SQL Server . This counter indicates the amount of the operating system’s memory the SQL Server SQL Server memory manager currently has committed to SQL Server SQL Server . Данное значение, как правило, увеличивается при повышении активности и растет после запуска SQL Server. This number is expected to grow as required by actual activity, and will grow following SQL Server startup. Получить этот счетчик можно из столбца committed_kb динамического административного представления sys.dm_os_sys_info. Query this counter using the sys.dm_os_sys_info dynamic management view, observing the committed_kb column.

SQL Server: Memory Manager: память целевого сервера (КБ) SQL Server: Memory Manager: Target Server Memory (KB)
Этот счетчик показывает идеальный объем памяти для SQL Server SQL Server в соответствии с рабочей нагрузкой за последнее время. This counter indicates an ideal amount of memory SQL Server SQL Server could consume, based on recent workload. Чтобы определить, выделен ли для сервера SQL Server SQL Server оптимальный объем памяти, сравните это значение со счетчиком Общая память сервера по истечении некоторого периода работы со стандартной нагрузкой. Compare to Total Server Memory after a period of typical operation to determine whether SQL Server SQL Server has a desired amount of memory allocated. Значения счетчиков Общая память сервера и Память целевого сервера должны быть примерно равны. After typical operation, Total Server Memory and Target Server Memory should be similar. Если значение Общая память сервера значительно меньше, чем значение Память целевого сервера, возможно, экземпляру SQL Server SQL Server не хватает памяти. If Total Server Memory is significantly lower than Target Server Memory, the SQL Server SQL Server instance may be experiencing memory pressure. Через некоторое время после запуска SQL Server SQL Server значение Общая память сервера возрастает. При этом значение Память целевого сервера должно быть больше, чем Общая память сервера. During a period after SQL Server SQL Server is started, Total Server Memory is expected to be lower than Target Server Memory, as Total Server Memory grows. Получить этот счетчик можно из столбца committed_target_kb динамического административного представления sys.dm_os_sys_info. Query this counter using the sys.dm_os_sys_info dynamic management view, observing the committed_target_kb column. Дополнительные сведения и рекомендации по настройке памяти см. в статье Параметры конфигурации памяти сервера. For more information and best practices configuring memory, see the Server memory configuration options.

Читайте также:  Windows movie maker mov файл

Процесс: рабочий набор Process: Working Set
Этот счетчик показывает объем физической памяти, используемой процессом в настоящее время, согласно данным операционной системы. This counter indicates the amount of physical memory that is in use by a process currently, according to the operating system. Обратите внимание на экземпляр этого счетчика для sqlservr.exe. Observe the sqlservr.exe instance of this counter. Получить этот счетчик можно из столбца physical_memory_in_use_kb динамического административного представления sys.dm_os_process_memory. Query this counter using the sys.dm_os_process_memory dynamic management view, observing the physical_memory_in_use_kb column.

Процесс: байт исключительного пользования Process: Private Bytes
Этот счетчик показывает объем памяти операционной системы, запрошенный процессом для использования в собственных целях. This counter indicates the amount of memory that a process has requested for its own use to the operating system. Обратите внимание на экземпляр этого счетчика для sqlservr.exe. Observe the sqlservr.exe instance of this counter. Так как этот счетчик учитывает все выделения памяти, запрошенные процессом sqlservr.exe, включая выходящие за пределы max server memory, его значение может превышать значение параметра max server memory. Because this counter includes all memory allocations requested by sqlservr.exe, including those not limited by the max server memory option, this counter can report values larger than the max server memory option.

SQL Server: Buffer Manager: страниц базы данных SQL Server: Buffer Manager: Database Pages
Этот счетчик указывает число страниц с содержимым базы данных в буферном пуле. This counter indicates the number of pages in the buffer pool with database content. Память, не относящаяся к буферному пулу процесса SQL Server, не учитывается. Does not include other nonbuffer pool memory within the SQL Server process. Запросить этот счетчик можно из динамического административного представления sys.dm_os_performance_counters. Query this counter using the sys.dm_os_performance_counters dynamic management view.

SQL Server: Buffer Manager: коэффициент попаданий в буферный кэш SQL Server: Buffer Manager: Buffer Cache Hit Ratio
Этот счетчик относится только к SQL Server SQL Server . This counter is specific to SQL Server SQL Server . Желательно, чтобы коэффициент был не меньше 90. A ratio of 90 or higher is desirable. Значение выше 90 указывает на то, что более 90 процентов всех запрошенных данных были получены из кэша данных в памяти без считывания с диска. A value greater than 90 indicates that more than 90 percent of all requests for data were satisfied from the data cache in memory without having to read from disk. Дополнительные сведения о диспетчере буферов SQL Server см. в статье SQL Server, объект Buffer Manager. Find more information on the SQL Server Buffer Manager, see the SQL Server Buffer Manager Object. Запросить этот счетчик можно из динамического административного представления sys.dm_os_performance_counters. Query this counter using the sys.dm_os_performance_counters dynamic management view.

SQL Server: Buffer Manager: ожидаемое время существования страницы SQL Server: Buffer Manager: Page life expectancy
Этот счетчик измеряет, сколько секунд самая старая страница находится в буферном пуле. This counter measures amount of time in seconds that the oldest page stays in the buffer pool. Для систем с архитектурой NUMA это среднее значение для всех узлов NUMA. For systems that use a NUMA architecture, this is the average across the all NUMA nodes. Чем больше это значение, тем лучше. A higher, growing value is best. Его резкое падение указывает на постоянное обновление данных в буферном пуле, из-за которого рабочая нагрузка недостаточно эффективно использует данные, уже находящиеся в памяти. A sudden dip indicates a significant churn of data in and out of the buffer pool, indicating the workload could not fully benefit from data already in memory. У каждого узла NUMA имеется собственный узел буферного пула. Each NUMA node has its own node of the buffer pool. На серверах с несколькими узлами NUMA узнать ожидаемое время существования страницы для каждого узла буферного пула можно с помощью счетчика SQL Server: узел буфера: ожидаемое время существования страницы. On servers with more than one NUMA node, view each buffer pool node’s page life expectancy using SQL Server: Buffer Node: Page life expectancy. Запросить этот счетчик можно из динамического административного представления sys.dm_os_performance_counters. Query this counter using the sys.dm_os_performance_counters dynamic management view.

Примеры Examples

Определение текущего распределения памяти Determining current memory allocation

Приведенные ниже запросы возвращают сведения о текущем распределении памяти. The following queries return information about currently allocated memory.

Определение текущего объема памяти, используемого сервером SQL Server Determining current SQL Server memory utilization

Приведенный ниже запрос возвращает сведения о текущем использовании памяти сервером SQL Server. The following query returns information about current SQL Server memory utilization.

Оцените статью