SQL Server 2012. Диспетчером памяти

SQL Server 2012. Диспетчером памятиПо материалам статьи Juergen Thomas: Memory Manager surface area changes in SQL Server 2012 в блоге SQLOS Team
Автор: G Bowerman
Перевод: Александр Гладченко
Технический редактор: Ирина Наумова

Множество изменений было внесено в компоненты диспетчера памяти SQLOS новой версии SQL Server 2012. Эти изменения можно обнаружить в динамических административных представлениях (DMV) объектов памяти, в команде выдачи статуса объектов памяти DBCC и в счётчиках производительности. Изменения в диспетчере памяти позволяют теперь получать более точную информацию о потреблении памяти сервером и помогают SQL Server более эффективно управлять распределением страниц, а также существенно улучшают обработку и отслеживание распределения памяти между узлами NUMA. Задача этой статьи собрать эти изменения в одном месте, чтобы можно было быстро найти ссылки на подробную информацию о деталях, относящихся к новшествам диспетчера памяти.
Некоторые из этих изменений призваны были стандартизировать измерения счётчиков памяти в килобайтах, а не в байтах или страницах, логически продолжая тот процесс, который уже был начат в более ранних версиях. Сами процедуры подсчёта использования памяти теперь стали более релевантными и достоверными, поскольку модули, отвечающие за одностраничные и многостраничные распределения, были заменены одним модулем, который теперь заведует распределением страниц любого размера и любого числа этих страниц. Также консолидация распределения страниц разного размера в одном модуле позволила придать целостный и законченный вид счётчикам производительности, отражающим распределение страниц.
Другие изменения относятся к изменению места диспетчера памяти в модели интерфейсов взаимодействия с операционной системой. Он теперь играет центральную роль, обеспечивая распределение страниц практически для всех компонент. На картинке ниже показаны модульные схемы новой и старой архитектуры SQLOS:

Новшества в DMV

sys.dm_os_memory_nodes

В этом представлении, консолидация одностраничного и многостраничного распределения отражена в колонке pages_kb. Новый счётчик foreign_committed_kb позволяет лучше управлять памятью в архитектуре NUMA и предоставляет в распоряжение SQL Server 2012 информацию о величине оперативной памяти, которая не попала в наиболее оптимальный с точки зрения задачи NUMA узел. Значение этого счётчика может быть полезным для определения причин медленного доступа к памяти. Сервер всегда будет пытаться использовать сначала ближнюю по отношению к узлу память, по крайней мере, пока не будет полностью занята локальная память этого узла.

SQL Server 2012 SQL Server 2008 R2
pages_kb single_pages_kb + multi_pages_kb
foreign_committed_kb

 

sys.dm_os_sys_info

В этом представлении, как и в большинстве изменений в диспетчере памяти, приняты меры к стандартизации результатов измерений счётчиков производительности, относящихся к памяти.

SQL Server 2012 SQL Server 2008 R2
physical_memory_kb physical_memory_in_bytes
virtual_memory_kb virtual_memory_in_bytes
committed_kb bpool_committed
committed_target_kb bpool_commit_target
visible_target_kb bpool_visible

 

sys.dm_os_memory_cache_counters

SQL Server 2012 SQL Server 2008 R2
pages_kb single_pages_kb + multi_pages_kb
pages_in_use_kb single_pages_in_use_kb + multi_pages_in_use_kb

 

sys.dm_os_memory_cache_entries

SQL Server 2012 SQL Server 2008 R2
pages_kb pages_allocated_count

 

sys.dm_os_memory_clerks

SQL Server 2012 SQL Server 2008 R2
pages_kb single_pages_kb + multi_pages_kb
page_size_in_bytes page_size_bytes

 

sys.dm_os_memory_objects

SQL Server 2012 SQL Server 2008 R2
pages_in_bytes pages_allocated_count
max_pages_in_bytes max_pages_allocated_count

 

Изменения в DBCC MEMORYSTATUS

Многие счётчики производительности команд DBCC, которые раньше относились к буферному пулу, теперь относятся к диспетчеру памяти, что стало следствием пересмотра архитектуры. Кроме этого, появились новые, дополнительные информационные поля, которые отражают ошибки OS и влияние топологии NUMA. В фазе роста используемой NUMA узлами памяти можно видеть рост использования памяти ещё до того, как будет достигнуто расчётное значение. Счётчик использования страниц (Pages In Use) показывает число используемых страниц, включая оборванные страницы, страницы базы данных и страницы зарезервированной памяти. Счётчик дальних распределений (Away Committed) показывает, сколько памяти узел взял у других узлов.

SQL Server 2012 SQL Server 2008 R2
Memory Manager \Large Pages Allocated
Memory Manager \Emergency Memory Memory Manager \Reserved Memory
Memory Manager \ Emergency Memory In Use Memory Manager \Reserved Memory In Use
Memory Manager \Target Committed (KB) Buffer Pool \Target (Pages)
Memory Manager \Current Committed (KB) Buffer Pool \Committed (Pages)
Memory Manager \Pages Allocated (KB) Buffer Pool \Stolen (Pages) + Buffer Pool \ Database (Pages)
Memory Manager \Pages Reserved (KB) Buffer Pool \Reserved (Pages)
Memory Manager \Pages Free (KB) Buffer Pool \ Free (Pages)
Memory Manager \Pages In Use
Memory Manager \Page Alloc Potential (KB) Buffer Pool \Stolen Potential (Pages)
Memory Manager \NUMA Growth Phase
Memory Manager \Last OOM Factor Buffer Pool \ Last OOM Factor
Memory Manager \Last OS Error

 

SQL Server 2012 SQL Server 2008 R2
Memory Manager \Large Pages Allocated
Memory Manager \Emergency Memory Memory Manager \Reserved Memory
Memory Manager \Emergency Memory In Use Memory Manager \Reserved Memory In Use
Memory Manager \Target Committed (KB) Buffer Pool \Target (Pages)
Memory Manager \ Current Committed (KB) Buffer Pool \ Committed (Pages)
Memory Manager \Pages Allocated (KB) Buffer Pool \Stolen (Pages) + Buffer Pool \ Database (Pages)
Memory Manager \Pages Reserved (KB) Buffer Pool \Reserved (Pages)
Memory Manager \Pages Free (KB) Buffer Pool \ Free (Pages)
Memory Manager \Pages In Use
Memory Manager \Page Alloc Potential (KB) Buffer Pool \Stolen Potential (Pages)
Memory Manager \NUMA Growth Phase
Memory Manager \Last OOM Factor Buffer Pool \ Last OOM Factor
Memory Manager \Last OS Error

 

SQL Server 2012 SQL Server 2008 R2
Memory node Id = n\ Pages Allocated Memory node Id = n\ MultiPage Allocator + Memory node Id = n \ SinglePage Allocator
Memory node Id = n\ Target Committed
Memory node Id = n\ Current Committed
Memory node Id = n\ Foreign Committed
Memory node Id = n\ Away Committed
Memory Clerks \Pages Allocated Memory Clerks \SinglePage Allocator + Memory Clerks \ MultiPage Allocator

 

Счётчики производительности

Изменения в счётчиках производительности тоже связаны с консолидацией счётчиков под объектом диспетчера памяти и стандартизацией измерения счётчиков в килобайтах. Кроме того, несколько бесполезных счётчиков, относящихся к AWE, были удалены.

SQL Server 2012 SQL Server 2008 R2
Object — SQLServer:Memory Manager Object — SQLServer:Buffer Manager
Database Cache Memory (KB) Database pages
Free Memory (KB) Free pages
Reserved Server Memory (KB) Reserved pages
Stolen Server Memory (KB) Stolen pages
Target Server Memory (KB) Target pages
Total Server Memory (KB) Total pages
AWE lookup maps / sec
AWE stolen maps / sec
AWE write maps /sec
AWE unmap calls / sec
AWE unmap pages / sec

 

SQL Server 2012 SQL Server 2008 R2
Object — SQLServer:Memory Node Object — SQLServer:Buffer Node
Database Node Memory (KB) Database pages
Free Node Memory (KB) Free pages
Foreign Node Memory (KB) Foreign pages
Stolen Node Memory (KB) Stolen pages
Target Node Memory (KB) Target pages
Total Node Memory (KB) Total pages

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

Запись опубликована в рубрике В помощь администратору с метками . Добавьте в закладки постоянную ссылку.

Добавить комментарий

Войти с помощью: