Рассылка закрыта
При закрытии подписчики были переданы в рассылку "Вопросы и ответы по MS SQL Server" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
MS SQL Server - дело тонкое...
Информационный Канал Subscribe.Ru |
#260<< #261 |
СОДЕРЖАНИЕ Обзор механизмов виртуальной памяти Windows (продолжение "Обзор Virtual Address Space")
По материалам статьи Slava Oks:
A look at Windows Virtual Memory mechanisms (continuation of "A look at Virtual Address Space - VAS") Как я обещал в прошлый раз, это будет следующая статья о памяти . Как Вы помните, моей целью является демонстрация того, как в SQL Server устроено управление использованием памяти. Но для читателя, чтобы в этом хорошо разобраться, я думаю важно также уяснить, как управляет памятью операционная система Windows. Важно понимать детали такого управления памятью, однако сейчас я хочу, чтобы Вы поняли заложенные в это концепции! В некоторых случаях я нарочно буду пропускать подробности, потому что в данном случае они не очень важны, и многие из них могут отличаться в разных версиях операционной системы. И так, позвольте приступить! В моей предыдущей статье упоминалось, что участки VAS могут быть немедленно привязаны к физической памяти или после использования VirtualAlloc API. Как и большинство операционных систем, Windows осуществляет привязку физической памяти по требованию, при первом обращении к странице на участке VAS (это поведение немного отличается от тех случаев, когда Вы не используете файл подкачки, и страница VAS немедленно привязывается к странице физической памяти). Одновременно привязывается только одна страница. Когда первое обращение к памяти идёт от аппаратных средств, генерируется исключение, называемое отсутствием страницы. Исключение обрабатывается Windows и операционная система проверяет, был ли закреплён текущий участок VAS, используя для этого соответствующую этому участку структуру - Virtual Address Descriptor (VAD). Если участок закреплён, и к нему происходит первое обращение, операционная система отыщет в оперативной памяти физическую страницу, которую можно для этого использовать (стоит иметь в виду, что эта страница будет предварительно заполнена нулями, прежде чем она будет задействована, что обусловлено соображениями безопасности). Наконец, после этого будет выполнена привязка участка VAS к странице, которая будет заполнена соответствующими структурами данных, и эта информация будет загружена в процессор, что бы продолжить работу с того момента, когда было обнаружено отсутствие страницы. Из-за недостаточности оперативной памяти Windows может принять решение отобрать физические страницы у процесса. Используя политику самостоятельного исправления, операционная система будет отыскивать свободные страницы. Для этого она проверяет, присутствует ли актуальный образ страницы в файле подкачки на диске, и при необходимости инициирует листание для страницы, что бы переместить её в файл подкачки. Как только страница попадёт на диск, операционная система сможет так настроить необходимые структуры данных, чтобы при следующем обращении к странице было известно, где её найти. После этого, физическая страница заполняется нулями и отмечается в списке свободных страниц, который используется для последующих запросов памяти. Как я говорил ранее, процессор инициирует исключение отсутствия страницы, когда не может найти физическую страницу, при попытке обращения к соответствующим виртуальным адресам. Приложение может генерировать исключение отсутствия страницы двумя путями. Во-первых, если запрашивается участок VAS, закреплённый впервые. Во-вторых, если операционная система до этого переместила страницу данных на диск во время листания (когда приложение обращается к странице VAS, которая не была закреплена, Windows всё-таки инициирует исключение). Ошибки такого тип, когда страница должна быть возвращена с диска, называют "тяжёлыми" ошибками страниц (hard page fault). Если приложение впервые запрашивает закреплённый участок VAS, будет инициировано исключение "demand zero page fault". Существует и другой тип ошибок страниц - это "мягкие" ошибки отсутствия страниц (soft page fault). Мягкие ошибки наблюдаются тогда, когда Windows может найти страницу в физической памяти и работать с ней не считывая её с диска. Используемый в Windows механизм виртуальной памяти позволяет отображать в разное время одни и те же физические страницы на разные VAS в разных местах. Физические страницы, которые могут быть отображены только на единственное VAS, называются приватными (private physical pages), потому что они не могут разделятся между несколькими VAS. Физические страницы, которые единовременно отображаются на несколько VAS, называются разделяемыми физическими страницами (shared physical pages). Все закреплённые с помощью интерфейсов VirtualAlloc * участки VAS привязаны к тем физическим страницам, которые не могут быть разделены между разными VAS. Их можно считать приватными физическими страницами. Сумму всех приватных физических страниц в оперативной памяти и на диске называют приватными байтами (private bytes), если используют терминологию Системного Монитора, или размером виртуальной (выделяемой) памяти, согласно терминологии Диспетчера Задач. Сумму всех приватных физических страниц, которые располагаются в оперативной памяти, называют рабочим множеством, которое отображается в виде значения "Выделение памяти" (Memory Usage) в строке состояния Диспетчера Задач. Как я упоминал ранее, зависимость Windows от потребности в физической памяти приводит к тому, что операционная система может изымать физические страницы из рабочего множества процесса. Обычно это проявляется в виде листания. Операционная система имеет возможность предотвратить листание этих участков VAS. За это отвечает механизм блокировки участков VAS в физической оперативной памяти. Как Вы могли догадаться, приложение, которое пробует блокировать свои участки VAS, может дестабилизировать всю систему. Чтобы сгладить этот эффект, в Windows привилегия "Lock pages in memory" по умолчанию выключена, из-за чего только те приложения, которым администратором дано на это разрешение, могут блокировать страницы в памяти. Кроме того, операционная система имеет возможность, в случае необходимости, подвергнуть листанию рабочее множество процесса целиком. Не смотря на то, что размер регистров на платформе x86 всего 32 бита, платформа предоставляет возможность операционной системе оперировать 64 Гб оперативной памяти, для этого используется расширение физической адресации - Physical Address Extensions (PAE). Включение для Windows режима PAE может быть выполнено редактированием файла boot.ini. Если режим PAE не включен, Windows будет способна управлять максимум 4GB оперативной памяти, не смотря на то, что компьютер может иметь при этом больше оперативной памяти. Некоторым пользовательским приложениям необходимо иметь VAS больше чем 2 Гб. В Windows имеется возможность увеличить VAS для пользовательского приложения до 3 Гб. Этот режим имеет серьёзный недостаток. В таком режиме будет ограничен до 1 Гб доступный ядру объём VAS. Увеличить размер VAS для пользователя можно добавив ключ /3GB в файл boot.ini. После внесения таких изменений необходима перезагрузка системы. Ограничение VAS для ядра до 1 Гб влияет на весь компьютер, а не только на приложение, которому нужен большой объём VAS. Например, установка ключа /3GB влияет на размер доступный операционного системе объёма памяти, если включён режим PAE, то он снижается с 64 Гб до 16 Гб. Ключ /3GB влияете на все компоненты ядра, включая все драйверы. Включение /3GB может вызвать такие отрицательные эффекты, как снижение производительности и отказы распределения памяти с остановкой системы. Мое мнение - нужно избегать использования ключа /3GB, если в этом нет большой необходимости. Как я уже писал, для платформы x86 объём VAS ограничен 2 Гб или 3 Гб, в зависимости от ключей в файле boot.ini. На AMD64, 32 битное приложение может иметь до 4 Гб. Такой маленький объём VAS может быть существенным недостатком для высокопроизводительных серверов с гигабайтами и терабайтными базами данных, обслуживаемых SQL Server. Также я говорил, что ключ PAE предоставляет Windows возможность оперировать с памятью до 64 Гб. Но как же в действительности один процесс обращается к такому большому объёму памяти? Чтобы предоставить одному процессу возможность работать с превышающим VAS объёмом оперативной памяти, Windows использует механизм Address Window Extension (AWE) (вспомните былые годы под DOS ). Будьте внимательны, многие из авторов используют термин AWE память. Не бывает AWE памяти, нельзя пойти и купить AWE память в магазине . А если нет AWE памяти, значит, нет и недостатка или избытка AWE памяти. Есть только AWE механизм, который предоставляет возможность управлять превышающим VAS объёмом оперативной памяти! Принцип простой. Используя AWE API, можно распределить физическую память; далее, используя VirtualAlloc API, можно распределять участки VAS; и ещё далее, используя AWE механизм можно увязывать/отвязывать участки VAS и физическую память. Как и с заблокированными страницами, для приложения, чтобы использовать AWE механизм нужно иметь разрешение на блокировку страниц памяти. AWE API может использоваться даже на компьютерах с памятью меньшей объёма VAS процесса. На самом деле, AWE можно использовать для того, чтобы избавиться от любого типа листания (вспомните, что при блокировке страниц в памяти с использованием механизмов VirtualLock, у Windows ещё остаётся возможность подвергнуть листанию целиком весь процесс). При использовании же AWE механизма, операционная система не сможет никак вмешаться. Такая гибкость создаёт некоторые трудности. Неправильное использование AWE механизма может привести к остановке всего компьютера, преодолеть которую можно будет только путём перезагрузки. Хорошо, я думаю, на сегодня достаточно информации . В этой и предыдущих статьях я хотел, что бы Вы поняли общую концепцию, которая действительно очень важна! Вот, что можно представить в виде краткого резюме:
Некоторые интересные "грабли":
В следующий раз мы будем говорить о вытеснении памяти и, после этого, мы будет готовы погрузиться в тему менеджера памяти SQL Server. Руководство по работе с Microsoft SQL Server 2000 Analysis Services (продолжение)
По материалам статьи Carl Rabeler и Dave Wickert, Microsoft Corporation:
Microsoft SQL Server 2000 Analysis Services Operations Guide Содержание
Введение Буфер обработки Analysis Services создает буфер обработки в памяти для каждого раздела, который он обрабатывает. Analysis Services выделяет память для каждого буфера, когда это нужно, и освобождает память, выделенную для буфера, когда обработка раздела завершается. Analysis Services использует каждый буфер для двух различных задач: - Во-первых, Analysis Services загружает для раздела данные с фактами из буфера опережающего считывания в буфер обработки и потом их сортирует, индексирует и записывает данные с фактами в сегменты соответствующего уровня фактов файла раздела MOLAP. Процесс сортировки включает столько данных, сколько может одновременно уместиться в буфере обработки. - Во-вторых, Analysis Services использует буфер обработки для расчета агрегатов. Если находящийся в памяти буфер обработки имеет недостаточный размер для хранения всех расчетов во время работы, то Analysis Services выделяет буферу обработки временные файлы на диске для завершения расчета агрегатов. Свойство Process buffer size (размер буфера обработки) на вкладке Processing в Analysis Manager (значение ProcessReadSegmentSize в реестре) определяет максимальный размер каждого буфера обработки. По умолчанию максимальный размер каждого буфера обработки приблизительно равен 32 мегабайтам. Для большинства приложений это значение, вероятно, слишком мало и должно быть немедленно увеличено. Более эффективным здесь будет значение, равное как минимум 150-200 мегабайтам. Если размер каждого буфера обработки имеет достаточный размер для эффективной сортировки и индексирования больших объемов данных с фактами перед их записью в сегменты файла раздела, то общая организация данных и скорость обработки запросов повышаются. Более того, если таблица фактов содержит много дублированных записей, то большой буфер обработки позволяет Analysis Services объединять дублированные значения в памяти, экономя пространство и повышая производительность запроса. Если Analysis Services выходит за пределы буфера обработки во время создания агрегатов, то Analysis Services изменяет алгоритм обработки для использования временных файлов, которые увеличивают объем памяти, выделенный этому буферу обработки. При использовании временных таблиц Analysis Services перемещает агрегаты между этими временными файлами и памятью, выделенной буферу обработки, во время расчета агрегатов. Считывание данных из временных файлов и запись данных в них происходит намного медленнее, чем расчеты в памяти, также эти операции сопровождаются интенсивным вводом-выводом. Вам следует настроить Вашу систему так, чтобы исключить использование временных файлов, увеличив свойство Process buffer size (размер буфера обработки), если это возможно. Все агрегаты раздела рассчитываются за один раз и должны помещаться в памяти; иначе будут использоваться временные файлы. Во время параллельной обработки множества разделов или обработки целого куба в одной транзакции, Вы должны удостовериться, что общий объем памяти, требующийся для буферов обработки, измерений, скрытых измерений, реплик и других потребителей памяти не превышает значение установки Memory conservation threshold (порог резервирования памяти). Если Analysis Services не хватает виртуального адресного пространства для этих синхронных операций, то Вы получите ошибку нехватки памяти. Если не хватает физической памяти для размещения виртуальной памяти, то операционная система Windows будет использовать файлы подкачки виртуальной памяти для дополнения доступной физической памяти. Хотя использование файлов подкачки влияет на производительность, если возникает чрезмерное использование страничной подкачки файлов, неинтенсивное использование страничной подкачки файлов (примерно 100-200 мегабайт) обычно приемлемо, если это необходимо. С другой стороны, если значение свойства размера буфера обработки слишком велико и если количество и размер агрегатов достаточно большие для заполнения буфера обработки во время обработки, то Analysis Services может превысить порог резервирования памяти, что может вызвать частичную или полную очистку кэша запросов. Превышение порога резервирования памяти во время обработки может привести к использованию временных файлов. Запомните, что если Вы обрабатываете разделы параллельно, то каждый раздел использует отдельный буфер обработки. Совет: Если у Вас есть достаточный объем памяти, увеличьте свойство Process Buffer Size (размер буфера обработки) как минимум до 150-200 мегабайт, чтобы избавиться от использования временных файлов во время обработки. Нередко нужно устанавливать размер буфера обработки даже равным 300-500 мегабайтам на серверах, где обрабатываются большие кубы. Чтобы определить нужный размер буфера обработки, посмтрите процедуру в приложении C "Как настроить размер буфера обработки" далее в этой статье. Расположение файлов с данными и временных файлов Экземпляр Analysis Services имеет папки Data и Temporary. Analysis Services использует папку Data для хранения структур с измерениями для всех объектов, определенных в экземпляре Analysis Services. Analysis Services использует папку Temporary для увеличения объема памяти, выделенной каждому буферу обработки, если буфер слишком мал для обработки агрегатов. Путь по умолчанию для обеих папок - C:\Program Files\Microsoft Analysis Services\Data. Вы можете изменять расположение каждой из этих папок во время установки Analysis Services или после. Для изменения пути после установки щелкните правой кнопкой мыши на объекте в Analysis Manager и выберите Properties. Вы также можете воспользоваться примером скрипта в Приложении D, "Пример скрипта для изменения пути к папке Data" для изменения пути к папке Data программно. На заметку: Если Вы используете программы для поиска вирусов на компьютере, где стоит Analysis Services, то Вам нужно отключить сканирование на вирусы следующих папок Analysis Services - Data, Temporary и Bin. Вам надо поместить папку Data на отдельный RAID; RAID 10 (или RAID 1 + 0) обеспечивает лучшую производительность, но RAID 5 часто является достаточно быстрым для поддержки множества инсталляций Analysis Services. Основная деятельность Analysis Services заключается в чтении данных из файлов в папке Data для выполнения запросов пользователей, но не в записи данных в эти файлы в папке Data. Как только Вы определите, сколько дискового пространства Вам требуется для данных, индексов и агрегатов, Вам нужно будет выделить на это примерно в два раза больше дискового пространства, чтобы оставить достаточно места для обновления данных и для скрытых файлов, появляющихся во время обработки. Дополнительную информацию о том, как рассчитать необходимый объем дискового пространства для папки Data, смотрите в пункте "Дисковое пространство" главы "Управление свободным пространством и производительностью" далее в этой статье. Дополнительную информацию о каждом типе файлов, хранящихся в папке Data, Вы найдете в Приложении K, "Структура папки Data". На заметку: Т.к. в папке Data находятся файлы с информацией по безопасности для контроля доступа конечных пользователей к объектам Analysis Services, Вы должны защитить папку Data от несанкционированного доступа. Только члены групп OLAP Administrators и Administrators должны иметь доступ к папке Data. Если Вы изменяете расположение папки Data после установки, Вы должны сконфигурировать настройки безопасности вручную. Дополнительную информацию о настройке безопасности в Analysis Services Вы найдете в главе "Администрирование безопасности" далее в этой статье. ПРОДОЛЖЕНИЕ СЛЕДУЕТ Статьи на русском языке
A technique for ensuring plan stability in SQL Server 2000 Самые популярные темы недели
Кто на чем пишет клиентов под SQL Server?
Информация. |
Вопросы, предложения, коментарии, замечания, критику и т.п. оставляйте Виталию Степаненко и Александру Гладченко в форуме: Обсуждение рассылки
|
Subscribe.Ru
Поддержка подписчиков Другие рассылки этой тематики Другие рассылки этого автора |
Подписан адрес:
Код этой рассылки: comp.soft.winsoft.sqlhelpyouself |
Отписаться
Вспомнить пароль |
В избранное | ||