среда, 26 января 2011 г.

SQL Server 2005, AWE и странности с памятью.

Не далее чем вчера один мой коллега попросил помочь с включением режима AWE в MS SQL 2005. Этот режим позволяет SQL Server использовать память выше 4ГБ на 32х разрядных системах. Процедура конфигурации очень проста. Нужно включить привилегию Lock pages in memory для учетной записи пользователя, под которым стартует MS SQL Server. Затем включить режим AWE у сервера и задать параметры потребления памяти. Кроме того система должна быть загружена в PAE режиме. И вот тут возникли вопросы.

На самом деле вопросы возникли не только у моего коллеги. В интернет они тоже частенько возникают, причем с похожими симптомами. Даже на sql.ru очень много вопросов относительно этой конфигурации. Несомненно, этот вопрос уже довольно устарел, но, иногда еще встречается необходимость. Поэтому, давайте вкратце рассмотрим что как и почему.

Прежде всего про PAE. Это специальный режим, в котором механизм трансляции виртуальных адресов в реальные изменяется таким образом, что позволяет 32х разрядной системе использовать больше 4ГБ памяти. Однако, для того, чтобы приложения могли его использовать, они должны использовать специальный API. Те программы, которые не умеют этого – не получат ничего от этого механизма. SQL Server – умеет.

Теперь, собственно, сам вопрос. После применения всех настроек в task manager видно что сервер стал использовать совсем мало памяти. Как проверить, работает ли все это?

Прежде всего нам нужно проверить, включилась ли привилегия. Для этого вы можете использовать утилиту whoami /priv. Запустить ее нужно как раз от имени того пользователя, под которым стартует служба сервера. В ее выводе должна быть перечислена нужная нам привилегия. Если ее там нет- значит она не включена. Не пугайтесь, если ее состояние  - disabled. Приложение, которое умеет и будет использовать AWE, в нашем случае SQL Server – сам активирует эту привилегию, если она ему доступна. Для проверки вы можете воспользоваться Process Explorer. Для этого нужно выбрать в дереве процессов нужный вам процесс и на вкладке Security в нижнем списке вы увидите список доступных привилегий для процесса. SQL Server самостоятельно включает (enable) привилегию, если она disabled. Если ее нет – значит вы не включили ее. А что с памятью? Тут все просто. Память, выделяемая при помощи AWE не входит в рабочий набор (working set), не может быть сброшена на диск и разделена между несколькими процессами. Поэтому в колонках task manager вы не увидите ничего. Для того чтобы проверить этот момент можно воспользоваться счетчиком SQLServer:Memory Manager: Total Server Memory (KB). Он покажет вам сколько реально памяти употребил сервер.

Вот собственно и все. Но все же, советую, при больших объемах памяти используйте 64х разрядные версии ПО.

Отправить комментарий