Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Память используемая сессией  [new]
Belkin
Member

Откуда: Рязань
Сообщений: 463
Коллеги, привет.

Подскажите пожалуйста, как узнать сколько памяти используется каждой сессией.

Есть представление sys.dm_exec_query_memory_grants в котором есть информация о памяти по сессиям, но там нет сессий, которым была выделена память и они в ней больше не нуждаются.

Есть представление sys.dm_os_buffer_descriptors в котором страницы объектов в памяти.

Можно ли как-то выйти на сессии?

Проблематика: Иногда заканчивается память и необходимо понять, кто и каким запросом/сессией использует больше всего памяти.

-----------
Андрей.
17 сен 19, 10:57    [21972260]     Ответить | Цитировать Сообщить модератору
 Re: Память используемая сессией  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 29304
Belkin
Иногда заканчивается память и необходимо понять, кто и каким запросом/сессией использует больше всего памяти.
Память в основном используется буферным пулом, а его невозможно разделить на сессии (то есть, если в 2х сессиях делается запрос к одним и тем же страницам данных, то получается, что обе сессии используют одну и ту же память)
В sys.dm_exec_query_memory_grants показывается память именно для выполнения запроса, так что туда смотреть нужно, если у вас не хватает памяти, например, для сортировки.
17 сен 19, 11:21    [21972297]     Ответить | Цитировать Сообщить модератору
 Re: Память используемая сессией  [new]
Belkin
Member

Откуда: Рязань
Сообщений: 463
alexeyvg
Belkin
Иногда заканчивается память и необходимо понять, кто и каким запросом/сессией использует больше всего памяти.
Память в основном используется буферным пулом, а его невозможно разделить на сессии (то есть, если в 2х сессиях делается запрос к одним и тем же страницам данных, то получается, что обе сессии используют одну и ту же память)
В sys.dm_exec_query_memory_grants показывается память именно для выполнения запроса, так что туда смотреть нужно, если у вас не хватает памяти, например, для сортировки.


Спасибо за ответ. Про буферный пул понятно.
Что касается sys.dm_exec_query_memory_grants , то на странице https://technet.microsoft.com/ru-ru/ms365393(v=sql.15) написано "Возвращает сведения обо всех запросах, которые запросили и ожидающих предоставления памяти или были присвоены предоставления памяти. В этом представлении не будут отображены запросы, которые не нуждаются в предоставлении памяти. "
Получается, что есть запросы, которые выполняются, но в том представлении не будут фигурировать. И как тогда узнать, например, что именно на той сессии, что не отображена в представлении, расходуется больше всего памяти?
17 сен 19, 11:37    [21972327]     Ответить | Цитировать Сообщить модератору
 Re: Память используемая сессией  [new]
Yasha123
Member

Откуда:
Сообщений: 1568
Belkin
И как тогда узнать, например, что именно на той сессии, что не отображена в представлении, расходуется больше всего памяти?

если запросу не нужна память, то он не может ее перерасходовать
17 сен 19, 11:59    [21972364]     Ответить | Цитировать Сообщить модератору
 Re: Память используемая сессией  [new]
Тяп-ляп
Member

Откуда: Москва
Сообщений: 795
Эта view показывает запросы, которые уже получили память и выполняются.
Выполните этот запрос на своем сервере и все увидите сами:
select * from sys.dm_exec_query_memory_grants
17 сен 19, 12:05    [21972379]     Ответить | Цитировать Сообщить модератору
 Re: Память используемая сессией  [new]
invm
Member

Откуда: Москва
Сообщений: 8805
Belkin
Проблематика: Иногда заканчивается память и необходимо понять, кто и каким запросом/сессией использует больше всего памяти.
Лучше бы показали оригинальное сообщение об ошибке.
17 сен 19, 12:51    [21972454]     Ответить | Цитировать Сообщить модератору
 Re: Память используемая сессией  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 29304
Belkin
И как тогда узнать, например, что именно на той сессии, что не отображена в представлении, расходуется больше всего памяти?
Вы же сами процитировали, что сессия расходует 0 памяти, и тогда она не отображается в представлении.
17 сен 19, 12:53    [21972458]     Ответить | Цитировать Сообщить модератору
 Re: Память используемая сессией  [new]
Yasha123
Member

Откуда:
Сообщений: 1568
invm
Belkin
Проблематика: Иногда заканчивается память и необходимо понять, кто и каким запросом/сессией использует больше всего памяти.
Лучше бы показали оригинальное сообщение об ошибке.

не покажет.
там наверняка все написано, просто кто-то не читатель.
например,

Error: 1204, Severity: 19, State: 4.
The instance of the SQL Server Database Engine cannot obtain a LOCK resource at this time.
Rerun your statement when there are fewer active users.
Ask the database administrator to check the lock and memory configuration for this instance, or to check for long-running transactions.
17 сен 19, 13:31    [21972502]     Ответить | Цитировать Сообщить модератору
 Re: Память используемая сессией  [new]
Belkin
Member

Откуда: Рязань
Сообщений: 463
alexeyvg
Belkin
И как тогда узнать, например, что именно на той сессии, что не отображена в представлении, расходуется больше всего памяти?
Вы же сами процитировали, что сессия расходует 0 памяти, и тогда она не отображается в представлении.

Я как такового сообщения не наблюдал. Видел, что запросы выполнялись минутами вместо секунд.
При этом в sys.dm_os_memory я видел доступных пару сотен мегабайт памяти из 51Гб и сообщение "Available physical memory is high"
Нет, чуток обманываю, пару раз при запуске запроса сам ловил, что-то типа того, что невозможно распределить память.

"Не нуждаются в предоставлении памяти" - я понимаю это так, им уже предоставлено все, что они требовали.

Тогда объясните мне пожалуйста, что за объем памяти для сессий указан в sys.dm_exec_query_memory_grants ? Сумма по колонке granted_memory_kb дает 2ГБ (это память именно на расчеты?), при этом в sys.dm_os_memory доступно около 10ГБ из 51ГБ
17 сен 19, 14:30    [21972574]     Ответить | Цитировать Сообщить модератору
 Re: Память используемая сессией  [new]
Yasha123
Member

Откуда:
Сообщений: 1568
Belkin
"Не нуждаются в предоставлении памяти" - я понимаю это так, им уже предоставлено все, что они требовали.

неправильно понимаете.
не нуждается, например, банальный селект из одной таблицы без сортировки.
зачем такому запросу memory grant?
у него ни соединений, ни сортировок.
читаешь и выплевываешь клиенту.
почитайте что ли Understanding SQL server memory grant
17 сен 19, 14:49    [21972597]     Ответить | Цитировать Сообщить модератору
 Re: Память используемая сессией  [new]
Yasha123
Member

Откуда:
Сообщений: 1568
Belkin
Видел, что запросы выполнялись минутами вместо секунд.

надо было смотреть ожидания.
может, ждал снятия блокировок.
может, ошибся в плане и пошел делать Nested Loops на миллионах строк.
тут вообще ни слова о памяти
17 сен 19, 14:51    [21972599]     Ответить | Цитировать Сообщить модератору
 Re: Память используемая сессией  [new]
Belkin
Member

Откуда: Рязань
Сообщений: 463
Yasha123
Belkin
Видел, что запросы выполнялись минутами вместо секунд.

надо было смотреть ожидания.
может, ждал снятия блокировок.
может, ошибся в плане и пошел делать Nested Loops на миллионах строк.
тут вообще ни слова о памяти


Проблема была с памятью!
Немного неверно написал в предыдущем сообщении
"При этом в sys.dm_os_memory я видел доступных пару сотен мегабайт памяти из 51Гб и сообщение "Available physical memory is LOW""
17 сен 19, 15:42    [21972641]     Ответить | Цитировать Сообщить модератору
 Re: Память используемая сессией  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 29304
Belkin
"Не нуждаются в предоставлении памяти" - я понимаю это так, им уже предоставлено все, что они требовали.
Нет, это значит, что им не нужна память для выполнения запроса.
17 сен 19, 16:02    [21972659]     Ответить | Цитировать Сообщить модератору
 Re: Память используемая сессией  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 29304
Belkin
"При этом в sys.dm_os_memory я видел доступных пару сотен мегабайт памяти из 51Гб и сообщение "Available physical memory is LOW""
Где сообщение, в sys.dm_os_memory, или на экране Windows?
17 сен 19, 16:03    [21972661]     Ответить | Цитировать Сообщить модератору
 Re: Память используемая сессией  [new]
Belkin
Member

Откуда: Рязань
Сообщений: 463
alexeyvg
Belkin
"При этом в sys.dm_os_memory я видел доступных пару сотен мегабайт памяти из 51Гб и сообщение "Available physical memory is LOW""
Где сообщение, в sys.dm_os_memory, или на экране Windows?

Сообщение, в sys.dm_os_memory
17 сен 19, 16:21    [21972681]     Ответить | Цитировать Сообщить модератору
 Re: Память используемая сессией  [new]
Yasha123
Member

Откуда:
Сообщений: 1568
Belkin
alexeyvg
пропущено...
Где сообщение, в sys.dm_os_memory, или на экране Windows?

Сообщение, в sys.dm_os_memory

виртуалочка?
у нас тоже было LOW,
когда виртуалка отгребала серверную память.
накажите системиста, выдайте серверной учетке LOCK PAGES IN MEMORY
17 сен 19, 16:34    [21972689]     Ответить | Цитировать Сообщить модератору
 Re: Память используемая сессией  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 29304
Yasha123
Belkin
пропущено...

Сообщение, в sys.dm_os_memory

виртуалочка?
у нас тоже было LOW,
когда виртуалка отгребала серверную память.
накажите системиста, выдайте серверной учетке LOCK PAGES IN MEMORY
Угу, это не "нехватка памяти", а ненужная борьба за физическую память между приложениями через менеджер виртуальной памяти.
Нужно просто правильно настроить.
17 сен 19, 16:42    [21972697]     Ответить | Цитировать Сообщить модератору
 Re: Память используемая сессией  [new]
Belkin
Member

Откуда: Рязань
Сообщений: 463
alexeyvg
Yasha123
пропущено...

виртуалочка?
у нас тоже было LOW,
когда виртуалка отгребала серверную память.
накажите системиста, выдайте серверной учетке LOCK PAGES IN MEMORY
Угу, это не "нехватка памяти", а ненужная борьба за физическую память между приложениями через менеджер виртуальной памяти.
Нужно просто правильно настроить.


Коллеги, спасибо за подсказки.
Что меня до сих пор не успокаивает, это то, что проблему решили перезагрузкой Агента SQL Server. Как такое может быть?
17 сен 19, 18:22    [21972808]     Ответить | Цитировать Сообщить модератору
 Re: Память используемая сессией  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 29304
Belkin
Что меня до сих пор не успокаивает, это то, что проблему решили перезагрузкой Агента SQL Server. Как такое может быть?
Возможно, он что то запускал, потребляющее память, и это "что то" зависло. Какой нибудь DTS пакет.
17 сен 19, 20:32    [21972859]     Ответить | Цитировать Сообщить модератору
 Re: Память используемая сессией  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2300
Belkin
alexeyvg
пропущено...
Угу, это не "нехватка памяти", а ненужная борьба за физическую память между приложениями через менеджер виртуальной памяти.
Нужно просто правильно настроить.


Коллеги, спасибо за подсказки.
Что меня до сих пор не успокаивает, это то, что проблему решили перезагрузкой Агента SQL Server. Как такое может быть?
Чтобы понять как такое может быть нужно сначала выяснить в чем реально была проблема, а вы пока что далеки от этого потому что у вас "Проблема была с памятью!". Вы посмотрели хоть на что-нибудь еще кроме sys.dm_os_memory? Cpu, ожидания, блокировки, нагрузку на диски... ?
17 сен 19, 22:29    [21972910]     Ответить | Цитировать Сообщить модератору
 Re: Память используемая сессией  [new]
tunknown
Member

Откуда:
Сообщений: 692
Belkin
Проблема была с памятью!

Если на недельку запустить профилер по Degree of Parallelism с фильтром по "Integer Data", например, в гигабайт, то, возможно, узнаете много интересного о потребителях памяти и почему помог перезапуск SQL Agent. А может, и не узнаете...
18 сен 19, 09:58    [21973019]     Ответить | Цитировать Сообщить модератору
 Re: Память используемая сессией  [new]
Yasha123
Member

Откуда:
Сообщений: 1568
tunknown
Belkin
Проблема была с памятью!

Если на недельку запустить профилер по Degree of Parallelism с фильтром по "Integer Data", например, в гигабайт, то, возможно, узнаете много интересного о потребителях памяти и почему помог перезапуск SQL Agent. А может, и не узнаете...

ага, тогда и гадать не надо будет, кто же пожрал ресурсы сервера: тот самый профайлер
18 сен 19, 10:30    [21973038]     Ответить | Цитировать Сообщить модератору
 Re: Память используемая сессией  [new]
tunknown
Member

Откуда:
Сообщений: 692
Yasha123
ага, тогда и гадать не надо будет, кто же пожрал ресурсы сервера: тот самый профайлер
Вы предполагаете, что у автора так много запросов на гигибайт, что профилер положит сервер? Ну, может быть...
18 сен 19, 17:19    [21973447]     Ответить | Цитировать Сообщить модератору
 Re: Память используемая сессией  [new]
Belkin
Member

Откуда: Рязань
Сообщений: 463
Всем спасибо за подсказки!

Будем пробовать. Но дело в том, что у меня не так много прав, а к виртуалке нет вообще.
Но, как обычно, к сожалению, проблемой занимаются разработчики, а не админы...
18 сен 19, 18:57    [21973546]     Ответить | Цитировать Сообщить модератору
 Re: Память используемая сессией  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 29304
Belkin
Всем спасибо за подсказки!

Будем пробовать. Но дело в том, что у меня не так много прав, а к виртуалке нет вообще.
Но, как обычно, к сожалению, проблемой занимаются разработчики, а не админы...
Это же чисто админские вопросы. Разработчик без прав пишет код, и не лазит в sys.dm_os_buffer_descriptors. А DBA решает проблемы с сервером.

"как обычно" - это всё слова, никто не заставит разработчика без прав ставить винды и настраивать маршрутизатор, попутно ругаясь с провайдером. Нет прав - нет администрирования.

Нужно просто сказать, что проблема решается такой то галочкой в настройках, но вы эту галочку крякать не имеете права, ибо на это есть специально уполномоченные Компанией сотрудники.
18 сен 19, 19:08    [21973560]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить