Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
tunknown Member Откуда: Сообщений: 768 |
Что происходит, когда приходит несколько запросов, требующих в сумме workspace memory больше, чем дано серверу? Превышающие доступную память ждут, не накладывая блокировки на данные?
|
||
11 фев 19, 17:27 [21806695] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
tunknown, Ну как я это понимаю: Память выделяется исходя из "текущей"(ну практически) доступной. Если запрос начал и памяти не хватило - в tempdb, если не хватает то будет висеть ожидание RESOURCE_SEMAPHORE. До выделения ресурсов ничего не блокирует. Но может я и не прав |
11 фев 19, 17:42 [21806716] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8350 |
tunknown, какие уж блокировки, если запрос не может получить затребованную память. Насколько я видел, картина такая: жирные запросы забирают грантами большую часть память, а мелкие запросы "толкаются локтями" и ждут очереди. При этом производительность для многих пользователей значительно снижается. |
11 фев 19, 17:54 [21806730] Ответить | Цитировать Сообщить модератору |
tunknown Member Откуда: Сообщений: 768 |
Видно ли здесь что? К сожалению, сервер был перезагружен. Та ситуация пока не повторялась.
|
||||||||||||||||||||||||||||||||||||||||||||||||||
11 фев 19, 18:37 [21806789] Ответить | Цитировать Сообщить модератору |
Mind Member Откуда: Лучший город на Земле Сообщений: 2322 |
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] Ответить | Цитировать Сообщить модератору |
tunknown Member Откуда: Сообщений: 768 |
|
||
12 фев 19, 09:31 [21807053] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
tunknown, кстати, если вы можете выделить запросы которые убивают вашу память, то вполне решение через resource governor выделить под них пул и пусть сами толкаются |
12 фев 19, 09:42 [21807064] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8350 |
tunknown, настройте resource governor, если гранты намного больше фактического использования и нет возможности заниматься микротюнингом запросов. |
12 фев 19, 17:13 [21807667] Ответить | Цитировать Сообщить модератору |
tunknown Member Откуда: Сообщений: 768 |
Кстати, что будет на Express, если запрос на Standard требует, например, 4.5ГБ памяти? Существуют ли запросы(без хинтов), которые Express не может выполнить, а Standard может, пусть и с другим автоматическим планом от оптимизатора. |
||
13 фев 19, 10:10 [21808093] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
tunknown, oltp и 4,5Гб запросы :)
почему не сможет? для всего остального есть |
||
13 фев 19, 10:44 [21808130] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8350 |
tunknown, требует и потребляет - две большие разницы. |
13 фев 19, 11:26 [21808191] Ответить | Цитировать Сообщить модератору |
Mind Member Откуда: Лучший город на Земле Сообщений: 2322 |
По дефолту, 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 | ![]() |