Кто-то установил 32-битную версию MS SQL Server 2005 на 64-битную ОС с 16 ГБ оперативной памяти. Два экземпляра SQL Server работают, но каждый процесс использует всего 1,7 ГБ ОЗУ. В совокупности это равняется примерно 3,2 ГБ или жесткому пределу 32-разрядных приложений.
Я пытаюсь понять, почему каждый экземпляр не использует собственное адресное пространство объемом 3,2 ГБ?
SQL Server будет использовать больше оперативной памяти в зависимости от нагрузки. Может быть, нагрузка на эти экземпляры недостаточна для увеличения использования памяти? Или, может быть, кто-то установил максимальный лимит памяти внутри инстансов?
Я пытаюсь понять, почему каждый экземпляр не использует собственное адресное пространство размером 3,2 ГБ?
Во-первых, в Windows нет ограничения памяти в 3,2 ГБ для любых процессов. Адресное пространство памяти процесса не ограничено аппаратными ограничениями ОЗУ (что больше похоже на цифру 3,2 ГБ: детали оборудования, включая устройства, требующие ввода-вывода с отображением памяти, взяты из базового ограничения в 4 ГБ).
Максимально доступное адресное пространство для 32-битного процесса в Windows зависит от трех факторов: разрядности хоста, "/ 3G" boot.ini
флаг1 и был ли исполняемый файл построен с флагом "Large Addresse Aware" (SQL Server 2008 определенно основывался на быстрой проверке здесь):
В вашем случае: каждый 32-битный экземпляр SQL Server может использовать 4 ГБ адресного пространства если это необходимо и не ограничено иным образом.
1В зависимости от переключателя опций для него могут быть установлены различные значения от 2 ГБ до 3 ГБ, но это только меняет этот случай.
Каждый 32-битный процесс под Windows 64 бит должен иметь доступ к 4 ГБ оперативной памяти (64-битные окна не разделяют адресное пространство для пользователя и ядра, поскольку ядро 64-битное). Видеть как-я-сказать-если-мой-Windows-сервер-подкачки Подробнее о памяти Windows.