T server проверка памяти команды
Объект Диспетчер памяти в Microsoft SQL Server обеспечивает счетчики для контроля использования памяти всего сервера. Контроль над использованием памяти всего сервера для оценки действий пользователя и использования ресурсов может помочь идентифицировать нехватку производительности. Контроль над памятью, используемый экземпляром SQL Server , может помочь определить:
существуют ли нехватки в недостаточной физической памяти для хранения в кэше часто используемых данных. Если памяти недостаточно, SQL Server должен получить данные с диска;
может ли производительность запроса улучшиться, если будет добавлена память или увеличится объем доступной памяти для кэширования данных или внутренних структур SQL Server .
Сведения о пуле буфера
Подробные сведения о буферах буферных пулов для страниц баз данных можно получить с помощью sys.dm_os_buffer_descriptors DMV. Подробные сведения о страницах буферного пула, используемых для разных серверных целей, можно получить с помощью sys.dm_os_memory_clerks DMV.
В следующем разделе перечислены сведения о пуле буфера и дополнительные сведения.
Элементы в этом разделе следующие:
Определение текущего распределения памяти
Приведенные ниже запросы возвращают сведения о текущем распределении памяти.
Просмотр блокировок в SQL Server
После того как мы убедились, что серверу хватает ресурсов, можно переходить к просмотру блокировок.
Блокировки можно посмотреть через Activity Monitor в SSMS, но мы воспользуемся T-SQL, так как этот вариант более удобен и нагляден. Выполняем запрос:
Этот запрос возвращает список блокировок в виде дерева. Это удобно в работе, так как обычно, если возникает одна блокировка, она провоцирует за собой другие. Аналогично в Activity Monitor или в выводе sp_who2 можно увидеть поле “Blocked By”.
Если запрос ничего не вернул, то блокировок нет.
Если запрос вернул какие-то данные, то нужно проанализировать цепочку.
HEAD значит что этот запрос является причиной всех остальных блокировок ниже по дереву. 64 – это идентификатор процесса (SPID). После этого пишется тело запроса, который вызвал блокировку. Если у вас хватает ресурсов сервера, то скорее всего дело в самом запросе и во взаимном обращении к каким-то объектам. Для того чтобы сказать точнее, нужно анализировать конкретный запрос, который вызвал блокировку.
День Победы
Фотограф Анатолий Грахов
Дополнительные сведения
Команда предназначена для диагностики служб поддержки клиентов DBCC MEMORYSTATUS Майкрософт. Формат выпуска и уровень детализации могут изменяться между пакетами служб и выпусками продуктов. Функции, которые предоставляет команда, могут быть заменены другим DBCC MEMORYSTATUS механизмом в более поздних версиях продукта. Поэтому в более поздних версиях продукта эта команда может больше не функционировать. Никаких дополнительных предупреждений не будет сделано до изменения или удаления этой команды. Поэтому приложения, которые используют эту команду, могут нарушаться без предупреждения.
Выход команды DBCC MEMORYSTATUS изменился из более ранних выпусков SQL Server. Вывод содержит несколько разделов, недоступных в предыдущих версиях продукта.
Загрузка процессора в SQL Server
Нагрузку на процессор определить проще, так как это можно сделать в Диспетчере задач. Чтобы узнать текущую нагрузку на процессор, найдите в Диспетчере задач процесс sqlservr.exe
Если вы хотите узнать нагрузку за прошедшее время, можно воспользоваться запросом:
В результате мы получим поминутную статистику использования процессора.
Мерзкие хоббитцы
Настройка максимального размера памяти для SQL Server
По умолчанию экземпляр SQL Server может со временем использовать большую часть памяти, доступной операционной системе Windows на сервере. После занятия памяти она не высвобождается, пока не будет обнаружена нехватка памяти. Такое поведение является нормальным и не свидетельствует об утечке памяти в процессе SQL Server. Чтобы ограничить объем памяти, который сервер SQL Server может использовать в своих целях, задайте параметр max server memory. Дополнительные сведения см. в статье Руководство по архитектуре управления памятью.
В SQL Server на Linux установить ограничение памяти можно с помощью средства mssql-conf и параметра memory.memorylimitmb.
Анализ нагрузки на диск SQL Server
Посмотрим на загрузку дисков в операционной системе. Для этого запустите resmon.exe.
Нам нужна вкладка Disk. В секции Disk Activity отображаются файлы, к которым идёт обращение, и их скорость read/write на текущий момент. Отфильтруйте эту секцию по Total (кликните на Total). На самом верху будут файлы, которые на данный момент максимально используют диск. В случае с SQL Server это может быть полезно чтобы определить какая база больше всего нагружает диск на текущий момент.
В секции Storage отображаются все диски в системе. В этой секции нам нужны 2 параметра – Active Time и Disk Queue. Active Time в процентах отображает нагрузку на диск, то есть если вы видите на диске C:\ Active Time равный 90, это значит что ресурс чтения/записи диска на текущий момент используется на 90%. Столбец Disk Queue отображает очередь обращений к диску, и если значение очереди не равно нулю, то диск загружен на 100% и не справляется с нагрузкой. Так же если Active Time близок к 100, то диск используется практически на пределе своих возможностей по скорости.
Американцев обвинил в "открытом нацизме"
На одной из центральных "рекламных" улиц Нью-Йорка Таймс-сквер появился мультимедийный билборд, посвящённый России и Дню Победы в Великой Отечественной войне.
На мультимедийном постере 9 Мая названо "днём позора" России.
Согласно информации, кто конкретно стал инициатором размещения билборда, неизвестно. Однако пользователи соцсетей не оставили без внимания ситуацию и обвинили американцев в "открытом нацизме".
Диспетчер памяти
Первый раздел вывода — диспетчер памяти. В этом разделе показано общее потребление SQL Server.
Элементы в этом разделе следующие:
- VM Reserved. Это значение показывает общее количество виртуального адресного пространства (VAS), которое SQL Server зарезервировано.
- VM Committed: Это значение показывает общее количество ВАЗ, SQL Server было совершено. Зафиксированная ВАЗ связана с физической памятью.
- AWE Allocated: Это значение показывает общее количество памяти, выделяемой с помощью механизма AWE в 32-битной версии SQL Server. Или это значение показывает общее количество памяти, потребляемой заблокированными страницами в 64-битной версии продукта.
- Зарезервированная память. Это значение отображает память, зарезервированную для выделенного подключения администратора (DAC).
- Зарезервированная память в использовании. Это значение показывает зарезервированную память, которая используется.
Совокупная память
В следующем разделе содержится совокупная информация о памяти для каждого типа клерка и для каждого узла NUMA. В системе с поддержкой NUMA можно увидеть выход, аналогичный следующему.
В следующей таблице содержится только часть вывода.
Эти ID-узлы соответствуют конфигурации узлов NUMA на компьютере, который работает SQL Server. ID-узлы узла включают возможные узлы NUMA программного обеспечения, которые определяются поверх узлов NUMA оборудования или в верхней части системы SMP. Чтобы найти сопоставление между ID-узлами и процессорами для каждого узла, просмотреть ID события информационного события 17152. Это событие регистрируется в журнале Приложения в viewer событий при запуске SQL Server.
Для SMP-системы вы увидите только один раздел для каждого типа клерка. Этот раздел похож на следующий.
Другие сведения в этих разделах о совместной памяти:
SM Reserved. Это значение отображает ВАЗ, зарезервированный всеми клерков этого типа, которые используют API файлов с картой памяти. Этот API также известен как общая память.
SM Committed: Это значение отображает ВАЗ, который совершается всеми клерков такого рода, которые используют API файлов с картой памяти.
Вы можете получить сводную информацию для каждого типа клерка для всех узлов памяти с помощью sys. dm_os_memory_clerks динамическое представление управления (DMV). Для этого запустите следующий запрос:
Брокеры памяти
В следующих трех разделах покажут сведения о брокерах памяти, которые контролируют кэшную память, украденную и зарезервированную память. Сведения, которые предоставляют эти разделы, можно использовать только для внутренней диагностики. Поэтому эта информация здесь не описана.
Проводите периодический мониторинг экземпляра SQL Server для подтверждения того, что память используется в допустимых пределах.
Определение ожидаемого времени существования страницы
В приведенном ниже запросе с помощью представления sys.dm_os_performance_counters отслеживается текущее значение ожидаемого времени существования страницы для экземпляра SQL Server на уровне как всего диспетчера буферов, так и каждого узла NUMA.
23.03.2020
insci
SQL Server
комментария 3
В этой статье мы рассмотрим популярные инструменты, T-SQL запросы и скрипты для обнаружения и решения различных возможных проблем с производительностью SQL Server. Эта статья поможет вам разобраться, когда вашему SQL Server недостаточно ресурсов (памяти, CPU, IOPs дисков), найти блокировки, выявить медленные запросы. Посмотрим какие есть встроенные инструменты и бесплатные сторонние скрипты и утилиты для анализа состояния Microsoft SQL Server.
Обнаружение и решение проблем с производительностью SQL Server
Самой распространенной проблемой с которой сталкивается системный администратор, работающий с SQL Server, это жалобы пользователей на производительность запросов и самого сервера: “тормозит”, “долго выполняется запрос“, и так далее.
Прежде всего нужно убедиться, что серверу хватает ресурсов. Рассмотрим, как в SQL Server быстро проанализировать использование памяти, CPU, дисков и наличие блокировок.
Объекты глобальной памяти
В следующем разделе содержатся сведения о различных объектах глобальной памяти. В этом разделе также содержатся сведения о том, сколько памяти используют объекты глобальной памяти.
Элементы в этом разделе следующие:
- Ресурс. Это значение отображает память, которую использует объект Resource. Объект Resource используется в движке хранения и для различных структур на всей сервере.
- Блокировки. Это значение отображает память, которую использует диспетчер блокировки.
- XDES. Это значение отображает память, которую использует диспетчер транзакций.
- SETLS. В этом значении показана память, используемая для выделения структуры служба хранилища для каждого потока, использующей локальное хранилище потоков.
- SE данных. Это значение отображает память, используемую для выделения структур для доступа к таблицам с помощью параметра Access Methods.
- SubpDesc Allocators. Это значение показывает память, используемую для управления подпроцессами для параллельных запросов, операций резервного копирования, операций восстановления, операций базы данных, операций с файлами, зеркального и асинхронного курсоров. Эти подпроцессы также называются параллельными процессами.
- SE SchemaManager. Это значение показывает память, которую использует диспетчер схемы для хранения служба хранилища метаданных, определенных для двигателя.
- SQLCache. Это значение отображает память, которая используется для хранения текста ad hoc statements и подготовленных заявлений.
- Репликация. Это значение отображает память, которую сервер использует для внутренних подсистем репликации.
- ServerGlobal: Это значение отображает объект глобальной памяти сервера, который используется в общих масштабах несколькими подсистемами.
- XP Global. Это значение отображает память, используемую расширенными сохраненными процедурами.
- Таблицы сортировки. Это значение отображает память, используемую в таблицах сортировки.
Кэш процедуры
В следующем разделе описывается состав кэша процедуры.
Элементы в этом разделе следующие:
TotalProcs. Это значение показывает общее кэшировали объекты, которые в настоящее время находятся в кэше процедуры. Это значение будет соответствовать записям в sys.dm_exec_cached_plans DMV.
Из-за динамического характера этой информации совпадение может быть не точным. Вы можете использовать PerfMon для мониторинга объекта SQL Server: Планирование кэша и DMV для получения подробных сведений о типе кэшированных объектов, таких как триггеры, процедуры и объекты sys.dm_exec_cached_plans ad hoc.
TotalPages. Это значение отображает накопительные страницы, которые необходимо хранить во всех кэшных объектах в кэше процедуры.
InUsePages. Это значение отображает страницы в кэше процедуры, которые относятся к процедурам, которые в настоящее время запущены. Эти страницы не могут быть отброшены.
Праздник со слезами на глазах
Сводка
В этой статье обсуждаются результаты DBCC MEMORYSTATUS работы команды. Эта команда часто используется для устранения неполадок Microsoft SQL Server потребления памяти.
В этой статье описываются элементы вывода для диспетчера памяти, сводка об использовании памяти, совокупные сведения о памяти, сведения о распределении буфера, сведения о буферном пуле и сведения о кэше процедуры. В нем также описываются данные об объектах глобальной памяти, об объектах памяти запросов, об оптимизации и брокерах памяти.
Инструменты для диагностики SQL Server
Если вы правильно диагностировали проблему, то половина работы уже сделана. Рассмотрим какие инструменты обычно используются системным администратором для диагностики различных проблем в SQL Server:
Общие сведения
Команда DBCC MEMORYSTATUS предоставляет снимок текущего состояния памяти SQL Server. Вы можете использовать выход из этой команды для устранения проблем потребления памяти в SQL Server или устранения определенных ошибок из памяти. (Многие ошибки из памяти автоматически печатают этот вывод в журнале ошибок.) Службы поддержки клиентов Майкрософт также могут запрашивать, чтобы вы запускали эту команду во время определенного инцидента поддержки, если у вас возникли ошибки, которые могут быть связаны с состоянием с низкой памятью.
Монитор производительности (PerfMon) и диспетчер задач не учитывают память правильно, если включена поддержка масштабов адресного окна (AWE).
В этой статье описываются некоторые данные, которые можно получить из вывода DBCC MEMORYSTATUS команды. В нескольких разделах этой статьи содержатся несвободные сведения о реализации, которые здесь не объясняются. Службы поддержки клиентов Майкрософт не будут отвечать на любые вопросы или предоставлять дополнительные сведения о значении определенных счетчиков за пределами сведений, предоставленных в этой статье.
Пример
Вы начинаете изучать счетчики производительности запросов в этом объекте, используя этот запрос T-SQL в динамическом административном представлении sys.dm_os_performance_counters:
Работоспособность как операционной системы, так и компьютера в целом, зависит в том числе и от состояния оперативной памяти: в случае неисправностей будут наблюдаться проблемы. Проверку ОЗУ рекомендуется делать регулярно, и сегодня мы хотим познакомить вас с вариантами проведения этой операции на компьютерах под управлением Windows 10.
Проверка оперативной памяти в Windows 10
Множество диагностических процедур Windows 10 можно проделать как с помощью штатных средств, так и с задействованием сторонних решений. Тестирование RAM не является исключением, и начать хотим с последнего варианта.
Обратите внимание! Если вы осуществляете диагностику ОЗУ для определения сбойного модуля, процедуру следует проводить отдельно для каждого компонента: демонтируйте все планки и вставляйте их в ПК/ноутбук по одной перед каждым «прогоном»!
Способ 1: Стороннее решение
Существует достаточно много приложений для тестирования оперативной памяти, но наилучшим решением для Windows 10 будет MEMTEST.
Это маленькая утилита, которую даже не требуется устанавливать, поэтому распространяется она в виде архива с исполняемым файлом и нужными библиотеками. Распакуйте её любым подходящим архиватором, перейдите в полученный каталог и запустите файл memtest.exe.
Доступных настроек здесь не так уж много. Единственная настраиваемая функция – количество проверяемой оперативной памяти. Впрочем, рекомендуется оставлять значение по умолчанию — «All unused RAM» — поскольку в этом случае гарантируется самый точный результат.
Если же объём оперативной памяти компьютера составляет более 4 Гб, то этой настройкой придётся воспользоваться в обязательном порядке: в силу особенностей кода МЕМТЕСТ не может за раз проверять объём больше 3,5 Гб. В таком случае нужно запустить несколько окон программы, и в каждом вручную прописать нужное значение.
Прежде чем приступать к проверке, запомните две особенности программы. Первая – точность процедуры зависит от времени тестирования, поэтому проводить её следует не менее чем несколько часов, а потому сами разработчики рекомендуют запускать диагностику и оставлять компьютер на ночь. Вторая особенность вытекает из первой – в процессе тестирования компьютер лучше оставить в покое, поэтому вариант с диагностикой «на ночь» является лучшим. Для начала тестирования нажмите на кнопку «Start Testing».
Если потребуется, проверку можно остановить досрочно – для этого воспользуйтесь кнопкой «Stop Testing». Кроме того, процедура автоматически останавливается, если в процессе утилита столкнулась с ошибками.
Программа помогает обнаружить большинство проблем с оперативной памятью с высокой точностью. Само собой, есть и недостатки – отсутствует русская локализация, да и описания ошибок не слишком подробные. К счастью, у рассматриваемого решения есть альтернативы.
Способ 2: Системные средства
В ОС семейства Windows присутствует инструментарий для базовой диагностики оперативной памяти, который перекочевал и в десятую версию «окон». Данное решение не предоставляет таких подробностей, как сторонняя программа, однако подойдёт для начальной проверки.
Проще всего вызвать нужную утилиту через инструмент «Выполнить». Нажмите сочетание клавиш Win+R, впишите в текстовое поле команду mdsched и нажмите «ОК».
Доступны два варианта проверки, выбирать рекомендуем первый, «Выполнить перезагрузку и проверку» – кликните по нему левой кнопкой мыши.
Компьютер перезагрузится, и запустится средство диагностики RAM. Процедура начнётся немедленно, однако изменить некоторые параметры можно прямо в процессе – для этого нажмите клавишу F1.
Доступных опций не слишком много: настроить можно тип проверки (варианта «Обычный» достаточно в большинстве случаев), задействование кэша и число проходов теста (ставить значения больше 2 или 3 обычно не требуется). Перемещаться между опциями можно нажатием клавиши TAB, сохранить настройки — клавишей F10.
По завершении процедуры компьютер перезагрузится и отобразит результаты. Иногда, впрочем, этого может и не произойти. В таком случае нужно открыть «Журнал событий»: нажмите Win+R, введите в окошко команду eventvwr.mscи нажмите «ОК».
Дальше найдите информацию категории «Сведения» с источником «MemoryDiagnostics-Results» и ознакомьтесь с результатами внизу окна.
Данное средство, возможно, не столь информативно, как сторонние решения, однако недооценивать его не стоит, особенно начинающим пользователям.
Это фиаско братан! Тестить проще с загрузочной флешки и новым софтом.
какой эпический пиздец:-) особенно про регулярность проверок и запуск нескольких тестов. А вообще всем известно что тестировать компутнр нужно думом или квейком.
Что дичь какая то с мемтестом. Запустить несколько окон, указать объем тестируемой памяти, одновременно зарустить, пошевелить ушами, сделать сальто назад, потанцевать с бубном.
Всё кроме досовской версии мемтеста профанация и лажа.
Тестить ОЗУ, софтом, запускаемым из под УЖЕ работающей, высоко-уровневой ОС?
Быстрый вариант краш теста - это запустить 20-30 окон с ютубом, можно выесть так всю оперативку. Если будет висяк, то потом уже тестить утилитами.
Речь Путина на немецком ТВ
Немецкое ТВ транслируют парад победы на красной площади. Показали речь Путина полностью с переводом на немецкий. Я моряк идем транзитом через Германию.
Изоляция памяти, используемой SQL Server
Для мониторинга использования памяти сервером SQL Server используйте приведенные ниже счетчики объектов SQL Server. Значения многих счетчиков объектов SQL Server можно запрашивать с помощью динамических административных представлений sys.dm_os_performance_counters и sys.dm_os_process_memory.
По умолчанию сервер SQL Server управляет требованиями к памяти динамически исходя из доступных ресурсов системы. Если SQL Server нужно больше памяти, он производит запрос к операционной системе, чтобы определить, доступна ли свободная физическая память, и использует ее. Если в операционной системе недостаточно свободной памяти, SQL Server будет освобождать память для операционной системы до тех пор, пока нехватка памяти не будет устранена или пока SQL Server не достигнет предела min server memory. Однако можно отказаться от динамического использования памяти, задав значения для параметров конфигурации сервера min server memory и max server memory. Дополнительные сведения см. в разделе Параметры памяти сервера.
Для мониторинга объема памяти, используемого SQL Server , наблюдайте за следующими счетчиками производительности.
SQL Server: Memory Manager: общая память сервера (КБ)
Этот счетчик показывает объем памяти операционной системы, выделенной в настоящее время серверу SQL Server диспетчером памяти SQL Server. Данное значение, как правило, увеличивается при повышении активности и растет после запуска SQL Server. Получить этот счетчик можно из столбца committed_kb динамического административного представления sys.dm_os_sys_info.
SQL Server: Memory Manager: память целевого сервера (КБ)
Этот счетчик показывает идеальный объем памяти для SQL Server в соответствии с рабочей нагрузкой за последнее время. Чтобы определить, выделен ли для сервера SQL Server оптимальный объем памяти, сравните это значение со счетчиком Общая память сервера по истечении некоторого периода работы со стандартной нагрузкой. Значения счетчиков Общая память сервера и Память целевого сервера должны быть примерно равны. Если значение Общая память сервера значительно меньше, чем значение Память целевого сервера, возможно, экземпляру SQL Server не хватает памяти. Через некоторое время после запуска SQL Server значение Общая память сервера возрастает. При этом значение Память целевого сервера должно быть больше, чем Общая память сервера. Получить этот счетчик можно из столбца committed_target_kb динамического административного представления sys.dm_os_sys_info. Дополнительные сведения и рекомендации по настройке памяти см. в статье Параметры конфигурации памяти сервера.
Процесс: рабочий набор
Этот счетчик показывает объем физической памяти, используемой процессом в настоящее время, согласно данным операционной системы. Обратите внимание на экземпляр этого счетчика для sqlservr.exe. Получить этот счетчик можно из столбца physical_memory_in_use_kb динамического административного представления sys.dm_os_process_memory.
Процесс: байт исключительного пользования
Этот счетчик показывает объем памяти операционной системы, запрошенный процессом для использования в собственных целях. Обратите внимание на экземпляр этого счетчика для sqlservr.exe. Так как этот счетчик учитывает все выделения памяти, запрошенные процессом sqlservr.exe, включая выходящие за пределы max server memory, его значение может превышать значение параметра max server memory.
SQL Server: Buffer Manager: страниц базы данных
Этот счетчик указывает число страниц с содержимым базы данных в буферном пуле. Память, не относящаяся к буферному пулу процесса SQL Server, не учитывается. Запросить этот счетчик можно из динамического административного представления sys.dm_os_performance_counters.
SQL Server: Buffer Manager: коэффициент попаданий в буферный кэш
Этот счетчик относится только к SQL Server. Желательно, чтобы коэффициент был не меньше 90. Значение выше 90 указывает на то, что более 90 процентов всех запрошенных данных были получены из кэша данных в памяти без считывания с диска. Дополнительные сведения о диспетчере буферов SQL Server см. в статье SQL Server, объект Buffer Manager. Запросить этот счетчик можно из динамического административного представления sys.dm_os_performance_counters.
SQL Server: Buffer Manager: ожидаемое время существования страницы
Этот счетчик измеряет, сколько секунд самая старая страница находится в буферном пуле. Для систем с архитектурой NUMA это среднее значение для всех узлов NUMA. Чем больше это значение, тем лучше. Его резкое падение указывает на постоянное обновление данных в буферном пуле, из-за которого рабочая нагрузка недостаточно эффективно использует данные, уже находящиеся в памяти. У каждого узла NUMA имеется собственный узел буферного пула. На серверах с несколькими узлами NUMA узнать ожидаемое время существования страницы для каждого узла буферного пула можно с помощью счетчика SQL Server: узел буфера: ожидаемое время существования страницы. Запросить этот счетчик можно из динамического административного представления sys.dm_os_performance_counters.
Распределение буфера
В следующем разделе показано распределение буферов 8 килобайт (КБ) в пуле буферов.
Элементы в этом разделе следующие:
Бесплатно. Это значение отображает совершенные буферы, которые в настоящее время не используются. Эти буферы доступны для хранения данных. Или другие компоненты могут запрашивать эти буферы, а затем пометить эти буферы как украденные.
Кэш. Это значение отображает буферы, используемые для различных кэшей.
База данных (чистая): Это значение показывает буферы, которые имеют содержимое базы данных и которые не были изменены.
База данных (грязная): Это значение показывает буферы, которые имеют контент базы данных и которые были изменены. Эти буферы содержат изменения, которые необходимо смыть на диск.
I/O. Это значение отображает буферы, ожидающих ожидающих операции I/O.
Защелка. Это значение показывает защелковые буферы. Буфер защелкается при чтении или изменении содержимого страницы. Буфер также защелкется, когда страница читается с диска или пишется на диск. Защелка используется для поддержания физической согласованности данных на странице во время чтения или изменения. Блокировка используется для поддержания логической и транзакционной согласованности.
Объекты памяти запроса
В следующем разделе описываются сведения о предоставлении памяти запроса. В этом разделе содержится снимок использования памяти запроса. Память запроса также называется памятью рабочего пространства.
Если размер и стоимость запроса удовлетворяют "небольшие" пороги памяти запроса, запрос ставится в небольшую очередь запросов. Это поведение предотвращает задержку меньших запросов за более крупными запросами, которые уже находятся в очереди.
Элементы в этом разделе следующие:
- Гранты. Это значение отображает запущенные запросы, которые имеют гранты памяти.
- Ожидание. Это значение отображает запросы, ожидающих получения грантов на память.
- Доступно. Это значение отображает буферы, доступные для запросов для использования в качестве рабочего пространства с hash и в качестве рабочего пространства сортировки. Доступное значение обновляется периодически.
- Максимум. Это значение отображает общие буферы, которые могут быть предоставлены всем запросам для использования в качестве рабочего пространства.
- Ограничение. В этом значении показана цель выполнения запроса для большой очереди запросов. Это значение отличается от значения Maximum (Buffers), так как значение Maximum (Buffers) не обновляется до изменения очереди.
- Следующий запрос. Это значение отображает размер запроса памяти в буферах для следующего запроса ожидания.
- Ожидание: Это значение показывает объем памяти, который должен быть доступен для выполнения запроса, на которое ссылается значение Next Request. Значение Waiting For — это значение Next Request, умноженное на коэффициент запаса. Это значение эффективно гарантирует, что при запуске следующего запроса ожидания будет доступно определенное количество памяти.
- Стоимость. Это значение показывает стоимость следующего запроса ожидания.
- Время ожидания. Это значение показывает время ожидания в секундах для следующего запроса ожидания.
- Время ожидания. Это значение показывает прошлое время в миллисекунд, так как следующий запрос ожидания был поставлен в очередь.
- Последняя цель. Это значение отображает общее ограничение памяти для выполнения запроса. Это значение является комбинированным ограничением как для большой очереди запроса, так и для небольшой очереди запросов.
Определение текущего объема памяти, используемого сервером SQL Server
Приведенный ниже запрос возвращает сведения о текущем использовании памяти сервером SQL Server.
Счетчики диспетчера памяти
Эта таблица описывает счетчики SQL Server Диспетчер памяти.
SQL Server, счетчики диспетчера памяти | Описание |
---|---|
Память соединения (КБ) | Указывает общий объем динамической памяти, которую использует сервер для обслуживания соединений. |
Кэш-память базы данных (КБ) | Указывает объем памяти, который используется в настоящий момент сервером для кэша страниц базы данных. |
Внешнее преимущество памяти | Внутренняя оценка преимущества производительности из-за добавления памяти в конкретный кэш. Он применяется в подсистеме для балансировки использования памяти между кэшем и полезен при устранении неполадок в случаях непредвиденного увеличения размера кэша. Значение имеет вид целого числа, основанного на внутреннем вычислении. |
Свободная память (КБ) | Указывает объем общей зафиксированной памяти, не используемой в настоящий момент сервером. |
Выделенная память для рабочей области (КБ) | Указывает общий объем памяти, предоставленный в настоящее время для выполнения процессов, таких как хэширование, сортировка, массовое копирование и создание индекса. |
Блоки блокировки | Указывает текущее количество блоков блокировки, использующихся на сервере (периодически обновляется). Блок блокировки представляет конкретный ресурс блокировки, например таблицу, страницу или строку. |
Выделенные блоки блокировки | Указывает текущее количество выделенных блоков блокировки. При запуске сервера количество выделенных блоков блокировки и количество выделенных блоков владельца блокировки зависит от параметра конфигурации SQL Server Locks. Если необходимо большее количество блоков блокировки, значение увеличивается. |
Память блокировки (КБ) | Указывает общий объем динамической памяти, которую сервер использует для блокировок. |
Блоки владельца блокировки | Указывает количество блоков владельца блокировки, использующихся в настоящее время на сервере (периодически обновляется). Блокировки владельцев блоков представляют владение блокировки объекта отдельным потоком. Таким образом, если все три потока имеют общую (S) блокировку страницы, будет три блока владельца блокировки. |
Выделенные блоки владельца блокировки | Указывает текущее количество выделенных блоков владельца блокировки. При запуске сервера количество выделенных блоков владельцев блокировки и количество выделенных блоков блокировки зависит от параметра конфигурации SQL Server Locks. Если необходимо большее количество блоков владельца блокировки, значение увеличивается. |
Память пула журнала (КБ) | Общий объем динамической памяти, используемой сервером для пула журналов. |
Максимальный размер памяти рабочей области (КБ) | Указывает максимальный объем памяти, доступный для выполнения процессов, таких как хэширование, сортировка, массовое копирование и создание индекса. |
Необработанных запросов на предоставление памяти | Указывает общее число процессов, успешно получивших память рабочей области. |
Ожидающих запросов на предоставление памяти | Указывает общее число процессов, ожидающих предоставления памяти рабочей памяти. |
Память оптимизатора (КБ) | Указывает общий объем динамической памяти, которую использует сервер для оптимизации запросов. |
Зарезервированная память сервера (КБ) | Указывает общий объем памяти, зарезервированный для будущих нужд. Этот счетчик показывает неиспользуемую в данный момент долю изначально выделенного объема памяти, указанного в графе Выделенная память для рабочей области (КБ) . |
Кэш-память SQL (КБ) | Указывает общий объем динамической памяти, которую использует сервер для динамического кэша SQL. |
Заимствованная память сервера (КБ) | Указывает объем памяти, который используется в настоящий момент сервером не для страниц базы данных, а для других целей. |
Память целевого сервера (КБ) | Указывает идеальный объем памяти, необходимый серверу. |
Общая память сервера (КБ) | Указывает объем памяти, выделенный серверу диспетчером памяти. |
Озарение
Только что понял, зачем в жигулях делали такой тюнинг как на фото.
Всё потому что в ВАЗе должна быть роза.
Сводка использования памяти
В разделе Диспетчер памяти следует сводка об использовании памяти для каждого узла памяти. В системе с включенной системой доступа к единой памяти (NUMA) будет соответствующая запись узла памяти для каждого узла NUMA оборудования. В системе SMP будет одна запись узла памяти.
ID узла памяти может не соответствовать ИД аппаратного узла.
Эти значения показывают память, которая выделяется потоками, которые работают на этом узле NUMA. Эти значения не являются локальной памятью узла NUMA.
Элементы в этом разделе следующие:
VM Reserved. Это значение отображает ВАЗ, зарезервированный потоками, работающими на этом узле.
Значение VM Committed. Это значение отображает ВАЗ, который совершается потоками, работающими на этом узле.
Выделено AWE. Это значение отображает память, выделенную с помощью механизма AWE в 32-битной версии продукта. Или это значение показывает общее количество памяти, потребляемой заблокированными страницами в 64-битной версии продукта.
В системе с поддержкой NUMA это значение может быть неправильным или отрицательным. Однако общее значение AWE, выделенного в разделе Диспетчер памяти, является правильным. Для отслеживания памяти, выделяемой отдельными узлами NUMA, SQL Server: объекты производительности буферного узла. (Дополнительные сведения см. в SQL Server Books Online.)
MultiPage Allocator. Это значение отображает память, которая выделяется через многофайловой аллигатор потоками, работающими на этом узле. Эта память поступает из-за пределов буферного пула.
Allocator SinglePage. Это значение отображает память, которая выделяется через одношаговой аллигатор потоками, работающими на этом узле. Эта память украдена из пула буфера.
Суммы значений VM Reserved и значений VM Committed на всех узлах памяти будут немного меньше соответствующих значений, которые сообщаются в разделе Диспетчер памяти.
Примеры
Анализ использования оперативной памяти SQL Server
Для начала нужно определить сколько памяти доступно SQL Server. Для этого запустите SSMS (SQL Server Management Studio), зайдите на сервер и зайдите в свойства сервера (ПКМ по названию сервера в Обозревателе объектов).
Сам по себе доступный объём RAM вам ничего не скажет. Нужно сравнить это число с используемой памятью в Диспетчере Задач и самим движком SQL Server с помощью DMV.
В Диспетчере задач, во вкладке Подробности, найдите sqlservr.exe и посмотрите сколько оперативной памяти использует этот процесс.
- Если на сервере, например, 128 GB оперативной памяти, а процесс sqlservr.exe использует 60 GB и ограничений по RAM у SQL Server нет, то оперативной памяти вам хватает.
- Если SQL Server использует 80-90% RAM от заданной или максимальной, то в таком случае нужно смотреть DMV. Имейте в виду, что sqlservr.exe не сможет использовать всю оперативную память. Если на сервере 128 GB, то sqlservr.exe может использовать только 80-90% (100-110 GB), так как остальная память резервируется для операционной системы.
Имейте в виду, что процесс SQL Server’a не отдаёт оперативную память обратно в систему. Например, ваш SQL Server обычно использует 20 GB памяти, но при месячном отчете он увеличивает потребление до 100 GB, и даже когда вычисление отчета закончится и сервер будет работать в прежнем режиме, процесс SQL Server’a всё равно будет использовать 100 GB до перезагрузки службы.
Даже если вы уверены, что оперативной памяти серверу хватает, не будет лишним точно знать объём потребляемой RAM.
Узнать реальное использование RAM можно с помощью Dynamic Management Views. DMV это административные вьюверы (представления). С помощью DMV можно диагностировать практически любую проблему в SQL Server.
Посмотрим sys.dm_os_sys_memory, для удобства используем запрос:
Рассмотрим каждый выводимый параметр:
Все эти данные полезны, если вы хотите точно определить сколько ваш SQL Server потребляет RAM. Чаще всего это используют, если есть подозрения что для экземпляра выделено слишком много оперативной памяти.
Если Вам нужно убедиться, что серверу хватает RAM, вы можете смотреть только на поля system_low_memory_signal_state, system_high_memory_signal_state и system_memory_state_desc. Если system_low_memory_signal_state = 1, то серверу явно не хватает оперативной памяти.
Судьба человека, отрывок
Наверное многие читали и отрывок, и полностью произведение, и фильм смотрели, но каждый раз что-то щелкает внутри.
Cпpaшивaю:
- Гдe жe твой отeц, Baня?
Шeпчeт:
- Погиб нa фpонтe.
- A мaмa?
- Мaмy бомбой yбило в поeздe, когдa мы exaли.
- A откyдa вы exaли?
- Нe знaю, нe помню…
- И никого y тeбя тyт pодныx нeтy?
- Никого.
- Гдe жe ты ночyeшь?
- A гдe пpидeтcя.
Зaкипeлa тyт во мнe гоpючaя cлeзa, и cpaзy я peшил: "Нe бывaть томy, чтобы нaм поpознь пpопaдaть! Bозьмy eго к ceбe в дeти". И cpaзy y мeня нa дyшe cтaло лeгко и кaк-то cвeтло. Нaклонилcя я к нeмy, тиxонько cпpaшивaю: "Baнюшкa, a ты знaeшь, кто я тaкой? " Он и cпpоcил, кaк выдоxнyл: "Кто?" Я eмy и говоpю тaк жe тиxо. "Я — твой отeц".
Божe мой, что тyт пpоизошло! Кинyлcя он ко мнe нa шeю, цeлyeт в щeки, в гyбы, в лоб, a caм, кaк cвиpиcтeль, тaк звонко и тонeнько кpичит, что дaжe в кaбинкe глyшно: "Пaпкa pоднeнький! Я знaл! Я знaл, что ты мeня нaйдeшь! Bce paвно нaйдeшь! Я тaк долго ждaл, когдa ты мeня нaйдeшь!" Пpижaлcя ко мнe и вecь дpожит, бyдто тpaвинкa под вeтpом. A y мeня в глaзax тyмaн, и тожe вceго дpожь бьeт, и pyки тpяcyтcя… Кaк я тогдa pyля нe yпycтил, дивy можно дaтьcя! Но в кювeт вce жe нeчaянно cъexaл, зaглyшил мотоp. Покa тyмaн в глaзax нe пpошeл, — побоялcя exaть: кaк бы нa кого нe нacкочить. Поcтоял тaк минyт пять, a cынок мой вce жмeтcя ко мнe изо вcex cилeнок, молчит, вздpaгивaeт. Обнял я eго пpaвой pyкою, потиxонькy пpижaл к ceбe, a лeвой paзвepнyл мaшинy, поexaл обpaтно, нa cвою квapтиpy. Кaкой yж тaм мнe элeвaтоp, тогдa мнe нe до элeвaтоpa было.
Бpоcил мaшинy возлe воpот, нового cвоeго cынишкy взял нa pyки, нecy в дом. A он кaк обвил мою шeю pyчонкaми, тaк и нe отоpвaлcя до caмого мecтa. Пpижaлcя cвоeй щeкой к моeй нeбpитой щeкe, кaк пpилип. Тaк я eго и внec. Xозяин и xозяйкa в aкypaт домa были. Bошeл я, моpгaю им обоими глaзaми, бодpо тaк говоpю: "Bот и нaшeл я cвоeго Baнюшкy! Пpинимaйтe нac, добpыe люди! " Они, обa мои бeздeтныe, cpaзy cообpaзили, в чeм дeло, зacyeтилиcь, зaбeгaли. A я никaк cынa от ceбя нe отоpвy. Но коe-кaк yговоpил. Помыл eмy pyки c мылом, поcaдил зa cтол. Xозяйкa щeй eмy в тapeлкy нaлилa, дa кaк глянyлa, c кaкой он жaдноcтью ecт, тaк и зaлилacь cлeзaми. Cтоит y пeчки, плaчeт ceбe в пepeдник. Baнюшкa мой yвидaл, что онa плaчeт, подбeжaл к нeй, дepгaeт ee зa подол и говоpит: "Тeтя, зaчeм жe вы плaчeтe? Пaпa нaшeл мeня возлe чaйной, тyт вceм paдовaтьcя нaдо, a вы плaчeтe". A той — подaй бог, онa eщe пyщe paзливaeтcя, пpямо-тaки paзмоклa вcя!
Поcлe обeдa повeл я eго в пapикмaxepcкyю, поcтpиг, a домa caм иcкyпaл в коpытe, зaвepнyл в чиcтyю пpоcтыню. Обнял он мeня и тaк нa pyкax моиx и ycнyл. Оcтоpожно положил eго нa кpовaть, поexaл нa элeвaтоp, cгpyзил xлeб, мaшинy отогнaл нa cтоянкy — и бeгом по мaгaзинaм. Кyпил eмy штaнишки cyконныe, pyбaшонкy, caндaлии и кapтyз из мочaлки. Конeчно, вce это окaзaлоcь и нe по pоcтy и кaчecтвом никyдa нe годноe. Зa штaнишки мeня xозяйкa дaжe paзpyгaлa. "Ты, — говоpит, — c yмa cпятил, в тaкyю жapy одeвaть дитя в cyконныe штaны!" И момeнтaльно — швeйнyю мaшинкy нa cтол, поpылacь в cyндyкe, a чepeз чac моeмy Baнюшкe yжe caтиновыe тpycики были готовы и бeлeнькaя pyбaшонкa c коpоткими pyкaвaми. Cпaть я лeг вмecтe c ним и в пepвый paз зa долгоe вpeмя ycнyл cпокойно. Однaко ночью paзa чeтыpe вcтaвaл. Пpоcнycь, a он y мeня под мышкой пpиютитcя, кaк воpобeй под зacтpexой, тиxонько поcaпывaeт, и до того мнe cтaновитcя paдоcтно нa дyшe, что и cловaми нe cкaжeшь! Ноpовишь нe воpоxнyтьcя, чтобы нe paзбyдить eго, но вce-тaки нe yтepпишь, потиxонькy вcтaнeшь, зaжжeшь cпичкy и любyeшьcя нa нeго…
Пepeд paccвeтом пpоcнyлcя, нe поймy, c чeго мнe тaк дyшно cтaло? A это cынок мой вылeз из пpоcтыни и попepeк мeня yлeгcя, pacкинyлcя и ножонкой гоpло мнe пpидaвил. И бecпокойно c ним cпaть, a вот пpивык, cкyчно мнe бeз нeго. Ночью то поглaдишь eго cонного, то волоceнки нa виxpax понюxaeшь, и cepдцe отxодит, cтaновитcя мягчe, a то вeдь оно y мeня зaкaмeнeло от гоpя…
В этой статье описывается использование команды DBCC MEMORYSTATUS для мониторинга использования памяти.
Оригинальная версия продукта: SQL Server
Исходный номер КБ: 907877
Оптимизация
Следующий раздел — это сводка пользователей, которые одновременно пытаются оптимизировать запросы.
Запросы будут отправлены на сервер для компиляции. Процесс компиляции включает в себя разбор, алгебраизацию и оптимизацию. Запросы классифицируются в зависимости от количества памяти, которое будет потреблять каждый запрос во время процесса компиляции.
Эта сумма не включает память, необходимую для выполнения запроса.
Когда начинается запрос, не существует ограничений на количество запросов, которые можно компилировать. Так как потребление памяти увеличивается и достигает порогового значения, запрос должен пройти шлюз, чтобы продолжить. После каждого шлюза постепенно уменьшается ограничение одновременно компилировать запросы. Размер каждого шлюза зависит от платформы и нагрузки. Размеры шлюза выбираются для максимальной масштабируемости и пропускной способности.
Если запрос не может пройти шлюз, запрос будет ждать, пока память будет доступна. Или запрос возвращает ошибку времени (ошибка 8628). Кроме того, запрос не может получить шлюз, если пользователь отменяет запрос или обнаруживается тупик. Если запрос проходит несколько шлюзов, он не освобождает меньшие шлюзы до завершения процесса компиляции.
Такое поведение позволяет одновременно создавать только несколько компиляций с интенсивным объемом памяти. Кроме того, это поведение увеличивает пропускную способность для небольших запросов.
Политики SQL Server
Даже когда у вас всё работает хорошо и жалоб нет, на самом деле может быть много проблем, которые всплывут позже. Для этого в SQL Server есть политики.
Политика в SQL Server это, грубо говоря, проверка правила на соответствие заданному значению. Например, с помощью политик вы можете убедиться, что на всех базах на сервере выключен Auto Shrink. Рассмотрим пример импорта и выполнения политики
В SSMS, подключитесь к серверу, на котором хотите выполнять политики (Management -> раздел Policy Management).
Импортируем файл Database Auto Shrink.xml. Жмём Evaluate
На экземпляре node1 две базы данных, test1 и test2. На test2 включен autoshrink. Посмотрим детали.
Политика определила включенный параметр AutoShrink, в описании обычно пишется объяснения к правилам. В данном случае дается объяснение почему auto shrink лучше отключать.
Политики могут выполняться либо по расписанию, либо по требованию (разово). Результаты выполнения политики можно посмотреть в журнале политик.
При установке SQL Server нужно выбирать только используемые компоненты СУБД, и указывать настройки в соответствии с конфигурацией “железа” вашего сервера. Всегда следите чтобы серверу хватало ресурсов, и чтобы на сервере не было блокировок
Самым мощным инструментом для диагностики SQL Server является T-SQL и DMV. Так же рекомендуется построить круглосуточный мониторинг над SQL Server и над обслуживающей его инфраструктурой для обнаружения всех возможных проблем.
Наблюдение за памятью операционной системы
Для отслеживания нехватки памяти используйте приведенные ниже счетчики Windows. Значения многих счетчиков памяти операционной системы можно запрашивать с помощью динамических административных представлений sys.dm_os_process_memory и sys.dm_os_sys_memory.
Память: доступно байтов
Этот счетчик указывает на то, сколько байт памяти доступно на данный момент для использования процессами. Низкие значения счетчика Доступно байтов могут указывать на общую нехватку памяти операционной системы. Это значение можно запросить с помощью T-SQL из sys.dm_os_sys_memory.available_physical_memory_kb.
Память: ошибок страницы/с Этот счетчик показывает частоту ошибок страниц для всех процессов, включая системные. Низкий, но не нулевой уровень выгрузки на диск (и вызванные ею ошибки страниц) является нормальным, даже если у компьютера достаточно большое количество доступной памяти. Диспетчер виртуальной памяти (VMM) Microsoft Windows берет страницы из SQL Server и других процессов по мере того, как он урезает размеры рабочих множеств этих процессов. Деятельность VMM может привести к ошибкам страниц.
Процесс: ошибок страницы/с Этот счетчик показывает частоту ошибок страниц для определенного пользовательского процесса. С помощью счетчика Процесс: ошибок страниц/с можно определить, вызвана ли повышенная активность диска подкачкой, выполняемой сервером SQL Server. Чтобы определить, является ли SQL Server или другой процесс причиной излишней подкачки, наблюдайте за счетчиком Процесс: ошибок страниц/с для экземпляра процесса SQL Server.
Дополнительные сведения об устранении проблемы излишней подкачки см. в документации по операционной системе.
Читайте также: