среда, 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х разрядные версии ПО.

3 комментария:

Unknown комментирует...

Вот статья в KB, где описаны странности с памятью http://support.microsoft.com/kb/918483

Unknown комментирует...

Конкретнее:
After you assign the Lock pages in memory user right and you restart the SQL Server service, the buffer pool of the SQL Server process still responds to memory resource notification events, and it dynamically increases or decreases in response to these events. However, you cannot see memory allocations for the buffer pool that are locked in memory in the following performance counters:
The Private Bytes counter and the Working Set counter in Performance Monitor
The Mem Usage column on the Processes tab in Task Manager
After these pages are locked, these performance counters represent the memory allocations inside the SQL Server process when those allocations do not use the buffer pool. The Total Server Memory(KB) counter of the SQL Server:Memory Manager performance object accurately represents the memory that is allocated for the buffer pool.

Unknown комментирует...

Ну, собственно да. На самом деле это одна из статей. Кроме всего прочего в этой статье описываются проблемы со сбросом рабочего набора в файл подкачки. И в качестве средства борьбы рекомендуют на win2k3 как раз использование AWE и lock pages in memory как раз по причине того что такие страницы не выгружаются в файл подкачки.
В общем, спасибо за полезную ссылку!