Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Память Maximum Server < sum(Workspace) ?  [new]
tunknown
Member

Откуда:
Сообщений: 630
Что происходит, когда приходит несколько запросов, требующих в сумме workspace memory больше, чем дано серверу? Превышающие доступную память ждут, не накладывая блокировки на данные?
BOL
Degree of Parallelism (Integer Data)
The amount of "workspace memory" in kilobytes that the query has been granted to perform operations involving hashing, sorts or create index operations. The memory will be acquired during execution as needed.
11 фев 19, 17:27    [21806695]     Ответить | Цитировать Сообщить модератору
 Re: Память Maximum Server < sum(Workspace) ?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6142
tunknown,

Ну как я это понимаю:
Память выделяется исходя из "текущей"(ну практически) доступной.
Если запрос начал и памяти не хватило - в tempdb, если не хватает то будет висеть ожидание RESOURCE_SEMAPHORE. До выделения ресурсов ничего не блокирует. Но может я и не прав
11 фев 19, 17:42    [21806716]     Ответить | Цитировать Сообщить модератору
 Re: Память Maximum Server < sum(Workspace) ?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 6356
tunknown,

какие уж блокировки, если запрос не может получить затребованную память. Насколько я видел, картина такая: жирные запросы забирают грантами большую часть память, а мелкие запросы "толкаются локтями" и ждут очереди. При этом производительность для многих пользователей значительно снижается.
11 фев 19, 17:54    [21806730]     Ответить | Цитировать Сообщить модератору
 Re: Память Maximum Server < sum(Workspace) ?  [new]
tunknown
Member

Откуда:
Сообщений: 630
TaPaK
Память выделяется исходя из "текущей"(ну практически) доступной.
Если запрос начал и памяти не хватило - в tempdb, если не хватает то будет висеть ожидание RESOURCE_SEMAPHORE. До выделения ресурсов ничего не блокирует. Но может я и не прав

wait_typewaiting_tasks_countwait_time_msmax_wait_time_mssignal_wait_time_ms
RESOURCE_SEMAPHORE0000
SOSHOST_SEMAPHORE0000
CLR_SEMAPHORE0000
RESOURCE_SEMAPHORE_MUTEX0000
RESOURCE_SEMAPHORE_QUERY_COMPILE0000
DISPATCHER_QUEUE_SEMAPHORE1748749223652059261149131
DISPATCHER_PRIORITY_QUEUE_SEMAPHORE0000
PWAIT_RESOURCE_SEMAPHORE_FT_PARALLEL_QUERY_SYNC0000

Видно ли здесь что? К сожалению, сервер был перезагружен. Та ситуация пока не повторялась.

Владислав Колосов
какие уж блокировки, если запрос не может получить затребованную память. Насколько я видел, картина такая: жирные запросы забирают грантами большую часть память, а мелкие запросы "толкаются локтями" и ждут очереди. При этом производительность для многих пользователей значительно снижается.
Так и есть.
11 фев 19, 18:37    [21806789]     Ответить | Цитировать Сообщить модератору
 Re: Память Maximum Server < sum(Workspace) ?  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2208
tunknown,

Вы увидите большие ожидания RESOURCE_SEMAPHORE, это ни с чем не спутаешь. Ну и как уже сказали, блокировок данных не будет, процессы будут ждать выделения памяти перед тем как начнется выполнение. Быстро будут выполнятся только запросы попадающие в Small Resource Semaphore (стоимость меньше 3 и требующие памяти меньше 5МБ).

Если вам нужно увидеть что в общем происходит с памятью в настоящий момент, то попробуйте приаттаченный запрос. В вашем случае будет примерно следующее:
"Memory Grants Pending" > 0
"Granted Workspace Memory" будет приближаться к "Maximum Workspace Memory"
При этом, если сервер очень сильно переоценил количество строк то "Used Workspace Memory" может быть ощутимо меньше чем "Granted Workspace Memory". Но все равно процессы будут ждать, потому что уже выделенная память не вернется в пул пока не завершится запрос.

К сообщению приложен файл (sql-memory-20190108.sql - 20Kb) cкачать
12 фев 19, 03:55    [21806960]     Ответить | Цитировать Сообщить модератору
 Re: Память Maximum Server < sum(Workspace) ?  [new]
tunknown
Member

Откуда:
Сообщений: 630
Mind
Если вам нужно увидеть что в общем происходит с памятью в настоящий момент, то попробуйте приаттаченный запрос.
Благодарю, замечательный запрос.
12 фев 19, 09:31    [21807053]     Ответить | Цитировать Сообщить модератору
 Re: Память Maximum Server < sum(Workspace) ?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6142
tunknown,

кстати, если вы можете выделить запросы которые убивают вашу память, то вполне решение через resource governor выделить под них пул и пусть сами толкаются
12 фев 19, 09:42    [21807064]     Ответить | Цитировать Сообщить модератору
 Re: Память Maximum Server < sum(Workspace) ?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 6356
tunknown,

настройте resource governor, если гранты намного больше фактического использования и нет возможности заниматься микротюнингом запросов.
12 фев 19, 17:13    [21807667]     Ответить | Цитировать Сообщить модератору
 Re: Память Maximum Server < sum(Workspace) ?  [new]
tunknown
Member

Откуда:
Сообщений: 630
TaPaK
кстати, если вы можете выделить запросы которые убивают вашу память, то вполне решение через resource governor выделить под них пул и пусть сами толкаются
Поверхностно почитал на эту тему. Не уверен, что смогу. OLTP приложение гонит малотребующие и многотребующие запросы в одном действии. Эти действия выполняют почти все пользователи. Пока не ясно как разделить.

Кстати, что будет на Express, если запрос на Standard требует, например, 4.5ГБ памяти? Существуют ли запросы(без хинтов), которые Express не может выполнить, а Standard может, пусть и с другим автоматическим планом от оптимизатора.
13 фев 19, 10:10    [21808093]     Ответить | Цитировать Сообщить модератору
 Re: Память Maximum Server < sum(Workspace) ?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6142
tunknown,

oltp и 4,5Гб запросы :)

автор
Express не может выполнить, а Standard может, пусть и с другим автоматическим планом от оптимизатора.

почему не сможет? для всего остального есть mastercardtempdb
13 фев 19, 10:44    [21808130]     Ответить | Цитировать Сообщить модератору
 Re: Память Maximum Server < sum(Workspace) ?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 6356
tunknown,

требует и потребляет - две большие разницы.
13 фев 19, 11:26    [21808191]     Ответить | Цитировать Сообщить модератору
 Re: Память Maximum Server < sum(Workspace) ?  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2208
tunknown
Кстати, что будет на Express, если запрос на Standard требует, например, 4.5ГБ памяти? Существуют ли запросы(без хинтов), которые Express не может выполнить, а Standard может, пусть и с другим автоматическим планом от оптимизатора.

sys.dm_exec_query_memory_grants
required_memory_kb - Minimum memory required to run this query in kilobytes. requested_memory_kb is the same or larger than this amount. - Обычно это пара мегабайт, то без чего запрос вообще не сможет выполниться, все что не влезет просто будет "сливаться" в tempdb.

requested_memory_kb - Total requested amount of memory in kilobytes.

granted_memory_kb - Total amount of memory actually granted in kilobytes. Can be NULL if the memory is not granted yet. For a typical situation, this value should be the same as requested_memory_kb.

used_memory_kb - Physical memory used at this moment in kilobytes.

По дефолту, requested_memory_kb не может быть больше 25% от Maximum Workspace Memory. Чем меньше памяти на сервере тем меньше будет запрошено. При таких настройках на сервере не может одновременно выполнятся больше 4-х тяжелых запросов, на практике это обычно 3, остальные уже не влазят. Поменяйте в RG для дефолтного пула [Memory grant %] с 25% на 10% и у вас будет выполнятся одновременно 9-10 таких запросов и можно ничего не делить на разные пулы. Естественно если такие запросы реально потребляют столько памяти (used_memory_kb), то выполнятся они будут медленнее. Зато все остальное не встянет колом. Ну и ждите повышенной нагрузки на tempdb.
13 фев 19, 21:05    [21808948]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить