За чтение книг по внутренним компонентам и поиску и устранению неисправностей в SQL Server 2008 (заимствовано из локальной библиотеки в Иллинойсе) Кристианом Болтоном, Брентом Озаром и т. Д. Я пытаюсь найти понимание и подтверждение на SQL-сервере и провести много поисков в Интернете, и я был бы признателен, если бы кто-то можете подтвердить или исправить мое понимание.
Каждый запрос или операция, которая требует предоставления памяти запроса, будет нуждаться в памяти рабочего пространства. В общем запросе, использующем Sort, Hash Match Join, Parallelism (не уверен в этом), Bulk Insert (не уверен), Rebuild Index и т. Д. Потребуется память рабочей области запроса.
Память рабочей области является частью буферного пула SQL Server (она выделяется как часть пула буферов), а максимальная память рабочей области составляет 75% памяти, выделяемой для пула буферов. По умолчанию один запрос не может получить более 25% памяти рабочей области (в SQL 2008 / SQL 2012 - контролируется группой рабочей нагрузки по умолчанию Resource Governor из коробки).
Ищу подтверждение моего понимания
1) Рассматривая систему с 48 ГБ ОЗУ и максимальной памятью сервера, настроенной на 40 ГБ, означает ли это, что максимальная память рабочей области ограничена 30 ГБ, и один запрос не может получить память рабочей области (память запросов) более 10 ГБ. Так что, если у вас неверный запрос, работающий с миллиардом строк, выполняющих массивное хеш-соединение, и вам требуется более 10 ГБ памяти (памяти рабочего пространства), будет ли вам все равно пройти через эту очередь предоставления памяти или сразу же пролить на диск?
2) Если запросу, выполняющему массивную операцию сортировки, было выделено 5 МБ памяти рабочей области, и во время выполнения запроса оптимизатор запросов осознает, что из-за неверной статистики или отсутствующих индексов этому запросу фактически потребуется 30 МБ памяти рабочей области, немедленно выльется в базу данных. Даже если во время выполнения в системе будет достаточно оперативной памяти, если запрос превысил выделенную рабочую память во время выполнения, он должен будет пролить ее на диск. Правильно ли мое понимание?
источник