Используйте awe для выделения памяти sql 2008 что это такое

Обновлено: 21.11.2024

В предыдущем блоге мы рассмотрели разницу между виртуальным адресным пространством в 32-разрядных и 64-разрядных системах. Мы также увидели, как работает виртуальная память и как можно использовать переключатель /3GB для увеличения ограничения режима доступа пользователя.

В этом модуле мы увидим, что такое переключатель AWE и /PAE для 32-битных систем.

Адрес к расширениям Windows

Как мы видели ранее, адреса ограничены 4 ГБ виртуального адресного пространства в 32-разрядной операционной системе. Однако на машинах может быть установлено более 4 ГБ оперативной памяти. Теперь виртуальная память состоит из оперативной памяти и файла подкачки. Так как же тогда эти пользовательские процессы имеют доступ к адресу, который выходит за рамки схемы адресации 4 ГБ. Этому способствует Windows с помощью механизма под названием AWE (Address Window Extension).

Это позволяет процессу зарезервировать адрес в VAS, который снова сопоставляется с другим диапазоном физических адресов в ОЗУ. Этот процесс называется оконным режимом и показан на диаграмме ниже.

Для использования преимуществ механизма AWE пользовательский процесс должен иметь разрешение «Блокировать страницы в памяти». AWE существует во всех выпусках Windows 2000 и более поздних версиях. Чтобы SQL Server мог использовать API-интерфейсы AWE, необходимо включить AWE. После включения при следующем запуске SQL Server попытается заблокировать страницы памяти, чтобы можно было использовать AWE.

  • В первую очередь очевидно, что AWE должен поддерживать объем памяти более 4 ГБ. Если вы включите эту опцию, если объем ОЗУ меньше 3 ГБ, она будет полностью проигнорирована. Приложению будет выделена память в соответствии с виртуальной памятью.
  • Преимущество AWE заключается в том, что он никогда не загружается на диск, что обеспечивает достаточно быстрый доступ. Управление памятью AWE отличается от управления виртуальной памятью. Это чисто физическая память и ее сопоставления.
  • Конструкция гарантирует, что любая память, выделенная с помощью API, не может использоваться совместно с каким-либо другим процессом и становится невыгружаемой или заблокированной.
  • В сопоставленной памяти AWE хранятся только страницы кэша данных. Кэш данных — это компонент области пула буферов SQL Server, который будет рассмотрен в последующих разделах этого блога.
  • Окно виртуальной памяти, используемое для буферизации физической памяти, предоставляемой AWE, требует доступа для чтения и записи.


1. Сначала нам нужно предоставить учетной записи SQL-сервера разрешение «БЛОКИРОВКА СТРАНИЦЫ В ПАМЯТИ», отредактировав локальные групповые политики.

<р>2. Включение AWE через графический интерфейс

sp_configure 'показать дополнительные параметры', 1
РЕКОНФИГУРАЦИЯ
ПЕРЕХОД
sp_configure 'включен благоговение', 1
РЕКОНФИГУРАЦИЯ
ПЕРЕХОД

Расширение физического адреса /PAE


Мы рассмотрели, как увеличить объем памяти для доступа в пользовательском режиме с помощью переключателя /3GB. Мы также видели, как использовать доступную физическую память более 4 ГБ с помощью AWE. Существует еще один переключатель, называемый переключателем расширения физических адресов /PAE, который позволяет получить доступ к ОЗУ объемом до 128 ГБ. Это усовершенствование, связанное с аппаратным обеспечением, где адресная шина является 36-битной. Таким образом, теперь количество поддерживаемых адресов составляет (2 ^ 26). С точки зрения управления памятью все еще существуют каталоги страниц и записи таблицы страниц для отображения виртуальной памяти. Кроме того, добавлен еще один уровень таблицы указателей каталогов страниц. Размер PTE составляет 4 КБ вместо 8 КБ. С помощью этого переключателя таблица каталогов страниц и записи таблицы страниц имеют длину 64 бита, поэтому можно сопоставить большее количество адресов. Таким образом, в отличие от AWE, здесь меняются структуры и карты памяти.

Как включить переключатель /PAE
Подобно переключателю /3GB, вы добавляете переключатель /PAE в файл BOOT.INI.

Microsoft рекомендует правило большого пальца следующим образом
Если в вашей системе 4 ГБ и 16 ГБ — используйте /PAE + AWE

Теперь, когда основы понятны в следующих блогах, мы увидим, как память и ЦП выполняют пользовательский процесс, такой как SQL-сервер.

Я унаследовал сервер с установленным SQL 2008 Enterprise. ОС - 32-битная Win 2008 Enterprise с установленной памятью 12 ГБ. Я заметил, что использование памяти составляет около 90%, что я считаю нормальным? Я также заметил, что опция «Использовать AWE для выделения памяти» не отмечена. Из того, что я погуглил, это следует проверить на 32-битных системах с> 4 ГБ ОЗУ, так что это относится к моей ситуации, так что есть ли причина не делать этого?

Популярные темы в Microsoft SQL Server

12 ответов

Я думаю, что лучше воздержаться от использования функции AWE, так как Microsoft может скоро отключить ее!

Хорошо, мне стоит понизить макс. настройка памяти, сейчас она по умолчанию. Пару раз я получал событие с идентификатором 701: в пуле ресурсов «по умолчанию» недостаточно системной памяти для выполнения этого запроса. Мне интересно, это потому, что SQL занимает всю память и, таким образом, генерирует эту ошибку?

Банни, можно использовать AWE в 32-разрядной ОС — для этого он и был разработан.

И вам не нужно беспокоиться о том, что SQL использует много памяти. В частности, если вы не установили максимальные ограничения по умолчанию, SQL Server будет использовать всю доступную память в данный момент. В зависимости от того, что делает эта машина, вы, возможно, захотите установить максимальное значение.

Вы говорите, что у вас 12 ГБ памяти. Например, можно указать SQL Server использовать максимум 10 ГБ, чтобы в ОС было доступно 2 ГБ. (Конечно, всегда следите за тем, чтобы при вводе МБ вы умножали на 1024, чтобы получить правильное число! Например, преобразование 5 ГБ в МБ равно 5 * 1024 = 5120)

Попался, мои настройки такие:

Поэтому отметьте опцию AWE и, возможно, если эти события с идентификатором 701 снова начнут появляться, мне следует настроить макс. настройка памяти?

Что ж, если вы оставите параметр MAX MEMORY как есть (с этим гигантским значением по умолчанию), тогда SQL Server просто будет использовать столько памяти, сколько сможет получить. Вы хотите изменить это и установить максимальное значение, если используете AWE.

В вашей 12-гигабайтной системе, если вы хотите, чтобы SQL Server использовал только 11 ГБ, оставив 1 ГБ свободным для ОС или чего-то еще, вы должны поместить 11 264 в поле максимального объема памяти (1024 МБ в гигабайте x 11 ГБ = 11 264).< /p>

Обязательно ознакомьтесь с этими темами, хотя бы «Использование AWE» и «Включение памяти AWE для SQL Server». Как упоминалось там, в зависимости от того, какую ОС вы используете, вам также необходимо предоставить учетной записи SQL Server привилегию операционной системы «Блокировать страницы в памяти». Взгляните на эти две страницы. я думаю, они должны ответить на другие ваши вопросы.

TS_DBA

Я бы посоветовал обновить ОС до 64-разрядной, если это вообще возможно. весь этот хлам AWE - лаваш ;)

У меня есть виртуальная машина Windows Server 2012 Standard Edition с 4 ГБ физической памяти, на которой размещен выделенный экземпляр SQL Server 2016. Максимальный объем памяти SQL Server установлен на 2,3 ГБ. С момента последней перезагрузки я выполнил запрос SELECT * для каждой таблицы в базе данных размером 20 ГБ. Это должно было заполнить буферный пул SQL Server.

Но когда я вхожу в виртуальную машину и запускаю диспетчер задач, он показывает, что процесс SQL Server sqlservr.exe использует только 54 МБ. Верен ли номер, сообщаемый диспетчером задач?

Решение

Сценарий, описанный выше, совершенно нормальный для виртуальной машины с SQL Server, для которой разрешена блокировка страниц в памяти (LPIM).

Нам нужно понимать, что память, отображаемая на панели сведений диспетчера задач, показывает значение только для рабочего набора памяти процесса.

Когда учетная запись службы SQL Server имеет привилегию LPIM, она использует другой API выделения памяти, который выделяет память вне памяти рабочего набора. Понятно, что это может ввести в заблуждение, как если бы большая часть памяти SQL Server пропала, но дело в том, что Диспетчер задач просто не сообщает о памяти, которая находится за пределами памяти рабочего набора.

API выделения памяти SQL Server

Все приложения пользовательского режима вызывают Windows API, когда им требуется служба из операционной системы (ОС). SQL Server, как и любое другое приложение, также вызывает Windows API, когда ему необходимо выполнить выделение памяти. SQL Server использует два API.

API VirtualAlloc

VirtualAlloc API вызывается, когда LPIM не предоставлен. Память, выделенная с помощью API VirtualAlloc, помещается в память рабочего набора и выгружается на диск в ответ на нехватку памяти ОС.

Адрес API оконного расширения (AWE)

AWE API вызывается при предоставлении LPIM. Память, выделенная с помощью этого API, выходит за пределы памяти рабочего набора, и Windows считает эту память заблокированной и недоступной для выгрузки на диск.

Важно отметить, что AWE API выделяет память только для буферного пула SQL Server. Память небуферного пула по-прежнему выделяется с помощью VirtualAlloc API.

Нужен ли нам AWE API на 64-разрядном SQL Server?

В прежние времена 32-разрядный SQL Server предоставлял возможность включения AWE для доступа к более чем 4 ГБ физической памяти. Любой, кто начинал свою карьеру администратора баз данных в те дни, был знаком с приведенной ниже командой T-SQL

Приведенная выше команда работает в сочетании с переключателем LPIM и PAE в файле boot.ini операционной системы. Конфигурация «awe enable» названа так потому, что она вызывает API AWE для включения доступа к памяти более 4 ГБ посредством стандартной 32-разрядной адресации.

В 64-разрядном SQL Server функция включения AWE недоступна. Если вы встретите его в неподдерживаемом 64-битном SQL Server в sp_configure, он все равно будет проигнорирован. Но каким-то образом слово AWE, кажется, вызывает путаницу, потому что оно применимо только к 32-разрядному SQL Server, потому что тогда оно было так широко распространено.

Суть в том, что да, AWE API используется в 64-разрядной версии SQL Server для выделения пула буферов в качестве заблокированной памяти.

Предоставить LPIM для SQL Server

Предоставить сервисному аккаунту SQL Server привилегию LPIM легко и просто. Вы добавляете NT SERVICE\MSSQLSERVER в Локальная политика безопасности > Локальные политики > Назначение прав пользователя > LPIM, а затем перезапускаете службу SQL Server, чтобы привилегия вступила в силу.

Используя виртуальную машину со спецификацией, указанной в нашем описании проблемы, мы также будем запускать Perfmon в фоновом режиме каждую секунду, чтобы зафиксировать два счетчика производительности: целевая память сервера (КБ) и общая память сервера (КБ).

Заполнить буферный пул SQL Server

Мы будем запускать запросы, выполняющие полное сканирование всех таблиц в базе данных размером 20 ГБ, чтобы убедиться, что объем памяти SQL Server соответствует целевому объему памяти, равному 2,3 ГБ.

Как показано на диаграмме Perfmon, отмеченной синим кругом ниже, выделение памяти SQL Server составляет 2 327 976 КБ, как показано счетчиком Total Server Memory (KB) на момент времени.

Мы сделали снимок экрана диспетчера задач Windows в тот же момент времени, и объем памяти (частный рабочий набор) для sqlservr.exe показывает только 62 МБ. Это лишь немного выше по сравнению со снимком экрана диспетчера задач в описании проблемы, который был сделан сразу после перезапуска службы SQL Server.

Помимо Perfmon, еще одним способом узнать объем заблокированной памяти является запрос динамического административного представления (DMV) sys.dm_os_process_memory. В момент времени, указанный в синем кружке выполнения, DMV показывает нам, что 2,28 ГБ были заблокированы. Как объяснялось, заблокированная память, выделенная с помощью AWE API, находится за пределами памяти рабочего набора, поэтому такой объем памяти не отображается в диспетчере задач.

С той же конфигурацией и повторным запуском полного теста без привилегий LPIM диспетчер задач ниже показывает, что процесс sqlserve.exe имеет 2,33 ГБ, как показано ниже.

Заключение

Привилегия LPIM изменяет API, который SQL Server использует для выделения памяти своему буферному пулу: когда предоставляется LPIM, вызывается API AWE, в противном случае вызывается API VirtualAlloc. AWE API выделяет память только для буферного пула SQL Server, а VirtualAlloc API выделяет память для буферного и небуферного пулов SQL Server.

Диспетчер задач сообщает о памяти, которая находится только в рабочем наборе (память, выделенная с помощью VirtualAlloc API). Поскольку самый большой кусок памяти в SQL Server — это пул буферов, это объясняет очень низкий номер рабочего набора в диспетчере задач при включенном LPIM.

Младший администратор базы данных задал мне вопрос: «Что такое AWE?». Для тех, кто знает, что такое AWE или где он находится, его можно найти в свойствах уровня SQL Server. AWE правильно объяснено в BOL, поэтому у нас будет простое объяснение.

API Address Windowing Extensions обычно известен как AWE. AWE используется SQL Server, когда он должен поддерживать очень большие объемы физической памяти. Функция AWE доступна только в выпусках SQL Server Enterprise, Standard и Developer с 32-разрядной версией SQL Server.

Сервер Microsoft Windows 2000/2003 поддерживает до 64 ГБ памяти. Если мы установили 32-разрядную версию SQL Server, которая может поддерживать максимум 3 ГБ памяти в Windows 2000/2003, мы можем включить функцию AWE, чтобы использовать доступную физическую память сервера для повышения производительности SQL Server. Проще говоря, AWE предоставляет функции управления памятью, которые позволяют Windows выделять более 3 ГБ памяти для стандартного 32-битного приложения.

Прежде чем можно будет использовать опцию AWE, необходимо выполнить множество других модификаций. Дополнительную информацию см. в разделе Использование SQL Server BOL с помощью AWE.

Похожие сообщения

Новости SQLAuthority — Я выступаю на SQL Saturday 116 — Бангалор, Индия, 7 января 2012 г. — Первая суббота SQL в Индии

Новости SQLAuthority – спасибо читателям блога

SQL SERVER — отсроченная долговечность, или История о том, как ускорить автотесты с 11 до 2,5 минут

11 комментариев . Оставить новый

Какой у вас опыт использования AWE?
Я обнаружил, что он вообще не использует больше памяти….

Без AWE я запускаю набор запросов и запускаю процесс, используя до 1,5 ГБ памяти, файл подкачки занимает около 2,3 ГБ.
С AWE я выполняю тот же набор запросов, и процесс использует только 200 МБ, но файл подкачки занимает около 10 ГБ.

Имейте в виду, что это пейджинг в ОЗУ, а у меня отключен пейджинг на диск.

У меня 32-разрядная версия 2003 Enterprise, 64 ГБ ОЗУ, SQL 2005 Enterprise 32-разрядная

Моя ОС и SQL 64-битные, мне не нужно использовать AWE, мой сервер имеет 250 ГБ памяти и 6 процессоров Octa.

Выполняются некоторые задания, которые заставляют SQL Server занимать 240 ГБ памяти, и SQL, похоже, не справляется с этой занятой памятью и хочет выделять все больше и больше, чем мои задания начинают давать сбой из-за этого. Есть ли какие-либо идеи, почему sql пытается занять больше памяти вместо того, чтобы управлять выделенным объемом?

@Marcos,
Вы решили проблему с памятью? Похоже, у нас та же проблема с нашим SQL Server.

На самом деле мы обнаружили проблемы со службами SSIS. Когда задания, использующие пакеты DTS, запускаются, процесс dts запускается на сервере и никогда не закрывается. В этом была проблема. чтобы обойти это, службы SSIS следует время от времени перезапускать. Я передал проблему в Microsoft и с этого момента не мог решить проблему, но я получаю от них эту информацию. до сих пор у нас не было постоянного исправления.

Здравствуйте, я вижу, что функция AWE доступна в версии для рабочих групп. это будет работать, если я включу его? Спасибо.

Мы обновились до SP4 14 января 13 года и с тех пор обнаруживаем множество блокировок таблиц при использовании Navision. Может ли SP4 повлиять на производительность

У меня есть одно сомнение: AWE разрешает использование более 3 ГБ, в чем польза \PAE? Я твердо верю, что AWE с функцией «блокировка страницы памяти» будет полезна для блокировки страниц и предотвращения нехватки памяти.

В Windows Server 2008 и более поздних версиях, особенно при использовании 64-разрядной версии или версии R2, это больше не проблема. Вут 32 Битная Windows Server 2003 Standard позволяла только 4 Гб физической памяти. Datacenter и Enterprise могут обрабатывать больше, но по умолчанию они ограничены 4 ГБ.
Они могут быть распределены как 1 ГБ Win, 3 ГБ все приложения. В параметрах загрузки для этого дистрибутива была опция /3GB (дистрибутив по умолчанию будет 2GB Kernel:2 GB User). Кроме того, в параметрах загрузки вы можете включить «Расширение физических адресов» /PAE, что для центров обработки данных и предприятий должно позволить адресовать более 4 ГБ памяти. Это работает только для систем под управлением 2003 и более новых и некоторых более старых версий, которые позволяют приложениям использовать более 2 ГБ, если они могут с этим справиться.
В 64-битных системах ОС автоматически не видит всю память, а приложения получают до 4 ГБ. 2008 и новее имеют другие ограничения, намного выше 4 ГБ и не используют/не нуждаются в этом.
Для AWE в SQL это позволило адресовать больше памяти, чем приложения могли бы обрабатывать в старых системах. Для 64-битных систем это не влияет на объем используемой памяти, но для выделения памяти используется другой API. (Что-то более сложное в отношении страниц блокировки и т. д.)

Читайте также: