SQL Server 2000

Планирование мощности системы

Разбить на страницы
Показывать лекцию целиком

Планирование мощности (capacity planning) включает в себя расчет ресурсов, необходимых для вашей системы, и принятие решений о том, как можно максимально повысить производительность этих ресурсов. К планированию мощности также относятся задачи планирования роста вашей сети, благодаря которому будущие добавления аппаратуры или программного обеспечения доставят вам меньше потерь и расходов.

Виды планирования мощности

Планирование мощности имеет две формы: предварительное планирование мощности (pre-capacity planning) и последующее планирование мощности (post-capacity planning). В задачи предварительного планирования мощности, известного также под названием планирование состава системы (sizing), входит прогнозирование требований к аппаратуре, при соблюдении которых система сможет исполнять необходимую работу в заданные сроки (в соответствии с соглашением об уровне обслуживания (SLA, service level agreement)). Соглашения об уровне обслуживания гарантируют заданные длительности времени отклика для тех или иных функций системы, т.е. длительность исполнения каких-либо действий или транзакций.

Примечание. Соглашение об уровне обслуживания задает условия, принятые всеми организациями, работающими с системой. Соглашения об уровне обслуживания составляются для обеспечения высокопроизводительной и "гладкой" работы системы. Например, могут заключаться соглашения об уровне обслуживания, которые будут гарантировать определенное время отклика при исполнении запросов. Это время отклика согласовывается с пользователями, с отделом эксплуатации, с отделом приложения и с отделом производительности.

Кроме того, нужно предусмотреть некоторые резервы мощности (резервы вычислительной мощности центральных процессоров, резервы свободного места на дисках и резервы оперативной памяти), чтобы время отклика находилось в заданных пределах, как при установившемся режиме работы, так и при пиковых нагрузках. При решении задачи предварительного планирования у вас еще нет реальных данных о производительности, т.к. система еще не функционирует. Вам придется пользоваться какой-либо другой, доступной вам информацией. Результаты будут зависеть от точности этой информации. Например, информацию о размещении и первоначальном размере базы данных могут предоставить сотрудники отдела базы данных, которые разрабатывают систему. Сотрудники отдела приложения, которые разрабатывают приложение и различные запросы, связанные с приложением, могут дать информацию о том, как эти запросы будут использовать ресурсы системы. Сотрудники отдела управления дадут информацию о количестве пользователей, работающих одновременно и о количестве запросов, которые они будут передавать в систему. Вся эта информация содержит сведения о вычислительной нагрузке (и вы сможете определить потребное количество центральных процессоров), о размере базы данных (вы сможете определить, сколько вам нужно дисковых накопителей) и т. д.

Последующее планирование мощности, известное также под названием упреждающий анализ (predictive analysis) – это комплексные и регулярные исследования загруженности аппаратных и программных ресурсов уже установленной и работающей системы. Благодаря последующему планированию мощности обеспечивается адекватная подготовка к росту рабочей нагрузки в соответствии с ресурсами системы. Эти исследования должны давать информацию, в первую очередь, для администратора базы данных. Администратор базы данных использует эту информацию, чтобы определить, какие изменения требуется внести в систему, чтобы система соответствовала уровню производительности, заданному в соглашении об уровне обслуживания. В данной лекции мы рассмотрим оба этих вида планирования мощности – предварительное и последующее, изучим их общие черты и различия.

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

Исследования, выполняемые при последующем планировании мощности, помимо упреждающего анализа дают чрезвычайно ценную информацию – они отвечают на вопросы "что, если...", касающиеся нагрузки на компьютер. Получив знания о том, как разные категории пользователей расходуют ресурсы системы, вы можете точно предсказывать нагрузку на ресурсы системы, зная категорию добавляемых пользователей (например, как повлияет появление новых сотрудников в отделе кредиторских задолженностей). Благодаря такому упреждающему анализу системный администратор получает достаточно времени, чтобы приобрести нужное оборудование, еще до того, как в системе появятся новые пользователи, избегая тем самым снижения производительности или удлинения времени отклика системы.

Благодаря исследованиям при последующем планировании мощности можно также получить информацию, нужную для настройки системы. Информация для настройки системы, например, о вводе-выводе обработки запросов, поступающих на массивы дисковых накопителей, получается на основе анализа исторических данных о производительности и может применяться для принятия решений об изменениях конфигурации системы, необходимых для повышения производительности. Пользуясь этой информацией, вы можете выявить "узкие места", влияющие на производительность, например, слишком большую активность на одном из массивов дисковых накопителей (по сравнению с другими массивами). Так, добавление новых пользователей вызывает увеличение объема доступа к таблицам базы данных. Количество таблиц, к которым обращаются пользователи, и частота этих обращений могут отслеживаться и регистрироваться. Эта информация будет полезна при решении вопроса, может ли перемещение этих таблиц в другое место предотвратить появление "узкого места" в дисковой подсистеме.

Исторический обзор планирования мощности

Во времена многопользовательских ЭВМ концепции планирования мощности и производительности не были осознаны и не получили развития. В начале 1970-х годов предварительное планирование мощности заключалось лишь в поиске потребителей, применявших приложения, которые "работали бы так же", как и нужное приложение. Находить таких потребителей было трудно, а сравнивать фирмы и организации и как у них работают приложения – еще труднее.

В середине 1970-х годов потребители и поставщики приложений разработали методики для анализа, предусматривавшие запуск тестовых задач, при помощи которых можно было оценить оптимальный первоначальный состав аппаратных компонент ЭВМ. Они создавали приложения, похожие на применяемые потребителями и запускали их на похожем оборудовании, собирая статистические данные о его работе. Затем эти статистические данные использовались для подбора состава ЭВМ, наиболее хорошо удовлетворяющего потребностям потребителей. Этот процесс тоже позволял ответить на вопросы "что, если...", при помощи запуска сценариев с тестовыми задачами, позволяющими определить, какой состав системы необходим при увеличении в системе числа пользователей, процессов приложений или при увеличении объема данных. Недостатком этого процесса была его дороговизна. Первые тестовые задачи, разработанные первоначально для моделирования типовой работы потребителей, стали применяться в основном поставщиками компьютерного оборудования в качестве маркетинговых средств при продажах ЭВМ и для сравнения производительности конкурирующего оборудования.

Во время этого периода аналитики создавали методики для предсказания использования ресурсов существующих систем. Внешне этот процесс казался менее интересным, но он оказался таким же сложным, так как не существовало ни методик тестирования, ни инструментальных средств для сбора нужных данных. Ученые-компьютерщики (такие как д-р Джеффри Бузен [Jeffrey Buzen] – родоначальник теории планирования мощности) еще только разрабатывали теории об использовании ресурсов компьютеров и исследовали вопрос, как можно выполнять эти вычисления.

С 1980-х годов первоначальные тестовые модели развились в тесты стандартных нагрузок, такие как тесты ST1, TP1 и Debit/Credit, но усилия в то время были направлены на выявление аппаратуры с наивысшей производительностью для рекламных целей, а не на разработку стандартных моделей нагрузки от приложений, которые можно было бы использовать при предварительном планировании и поддержке систем. Потребители еще не могли пользоваться этими тестами для сравнения аппаратуры систем, потому что они работали в различных ситуациях. В ответ на эти нужды потребителей возник консорциум представителей компьютерной промышленности, "Совет по производительности обработки транзакций" (Transactional Processing Performance Council). Этот Совет задал стандарты обработки транзакций для более чем 45 производителей оборудования и программного обеспечения. Эти тесты часто могут показать относительные возможности оборудования и программного обеспечения для баз данных; к сожалению, они не могут помочь при предварительном планировании нагрузки от работы приложений.

Примечание.Тесты Совета не годятся для предварительного планирования мощности, потому что они не отражают свойства настоящей рабочей нагрузки. Чаще всего они спроектированы для демонстрации производительности, например, для измерения количества транзакций, проходящих через систему в течение заданного времени. Эти тестовые транзакции имеют маленькие длительности и выполняют очень небольшие объемы работы, поэтому можно обработать очень большое их количество. Из-за большого количества обработанных транзакций складывается впечатление, будто системы, на которых работали эти тесты, – очень мощные, но на самом деле они только кажутся таковыми, из-за особым образом сконструированной модели рабочей нагрузки.

В это самое время подоспела архитектура "клиент/сервер" и технология реляционных баз данных, и потребность в предварительной оценке размера системы и в планировании мощности возросла. Большинство из современных приложений сейчас пишутся на основе архитектуры "клиент/сервер". Серверы обычно используют устройства для централизованного хранения данных, а пользовательский интерфейс обычно исполняется локально на настольных компьютерах пользователей или на удаленном веб-сайте. Эта экономная стратегия использования дорогих мощностей для обработки данных на сервере имеет еще одно достоинство: пользователи работают в уже привычных для них графических интерфейсах. Так как серверы, на которых работают приложения доступа к базам данных, используются очень интенсивно, то именно им уделяется основное внимание в большинстве проектов предварительного планирования мощности и исследований последующего планирования мощности.

В настоящее время для предварительного планирования мощности серверов по-прежнему чаще всего применяется метод моделирования работы приложений при помощи тестов, а наиболее точным методом прогноза производительности системы в будущем является сбор исторических данных о производительности и применение методов планирования мощности. Хотя этот процесс дорогой и отнимает много времени, но при моделировании реальной работы сервера потребители могут добиться весьма высокой точности. Однако, поскольку большие проекты могут потребовать многомиллионных инвестиций со стороны потребителя или со стороны поставщика, то доступ к системам для проведения таких исследований могут позволить себе, как правило, только самые крупные потребители. Понятно, что нужен метод глубокого, точного предварительного и последующего планирования мощности для мелких и средних систем. Для них, чтобы с 90-процентной точностью выполнить предварительное и последующее планирование мощности, пригодятся некоторые простые расчеты и общие знания об использовании системы.

Обработка транзакций

В данном разделе мы изучим, как выполнять анализ тенденций использования сервером базы данных ресурсов процессоров, памяти и дисков. Это нужно, чтобы правильно выбирать систему для нужного приложения. Сервер базы данных выполняет только функции работы с базой данных: при своей работе этот сервер выполняет только транзакции. При исполнении оператора SELECT или UPDATE сервер базы данных интерпретирует данные операторы как последовательности операторов чтения и записи. На самом деле, любая транзакция может быть разбита на чтения и записи в базу данных. На этом атомарном уровне сервер базы данных обрабатывает операции ввода-вывода. Нужно выбрать систему, способную обращаться с транзакциями различных видов и объемов, и с порождаемыми ими операциями ввода-вывода. Основными типами транзакций являются системы оперативной обработки транзакций (OLTP, on-line transaction processing) и системы поддержки принятия решений (DSS, decision support system).

Транзакции систем оперативной обработки транзакций

Транзакции систем оперативной обработки транзакций (OLTP) являются компонентами рабочей нагрузки, исполнение которых ожидается за короткие промежутки времени, так как они взаимодействуют с базой данных в режиме реального времени или в режиме "он-лайн". Другими словами, эти транзакции будут непрерывно обновлять базу данных, основываясь на наиболее свежей доступной информации, чтобы следующий пользователь мог бы быть уверен в том, что эта информация является наиболее свежей. Например, в системе ввода заказов вся информация, относящаяся к складскому учету, хранится в таблицах, распределенных по дисковой системе, и база данных может работать в режиме "он-лайн". Доступ к информации в базе данных получает каждый пользователь. Таблицы базы данных, такие как Таблица_изделий или Таблица_складских_запасов, содержат наиболее свежую информацию о разновидностях и об имеющемся количестве продаваемых товаров. Таким образом, когда поступает заказ на некоторое количество какого-либо товара, вы можете произвести доступ к таблицам базы данных, чтобы выяснить, имеется ли этот товар и сколько его осталось на складе, чтобы не продать отсутствующий товар.

Типичный сценарий предварительного планирования мощности для подобных систем обработки транзакций для сбора специальной информации предусматривает опрос людей. Вы должны провести беседы с проектировщиком базы данных, с разработчиком приложения и с представителем управленческого персонала. Эти люди могут дать начальные и корректирующие сведения о предполагаемом объеме обрабатываемых транзакций и о времени суток, когда предполагается обработка этих транзакций (например, 25 тысяч транзакций должны быть обработаны в течение 8-часового рабочего дня), сведения о количестве одновременно работающих пользователей, о времени пиковой нагрузки (времени суток, когда нагрузка на систему максимальна). Возможно, эти опросы окажутся самой важной частью процесса предварительного планирования мощности.

Примечание. При проектировании систем оперативной обработки транзакций (OLTP) выбирайте оборудование, обладающее достаточной мощностью, способное выдержать обработку транзакций в период максимальной загруженности. Тогда вы можете не беспокоиться даже при наихудшем развитии событий. Практические советы

Банкоматы

Давайте в качестве примера рассмотрим систему с банкоматами. Допустим, национальный банк нанял вас спроектировать систему банкоматов для своего чикагского отделения. В результате опросов вы могли узнать, что пиковая нагрузка на сеть банкоматов приходится на время с 11 часов утра до 2 часов дня – в то самое время, когда большинство людей идут обедать. Зная эту информацию, вы сможете спроектировать свою систему так, чтобы она могла выдержать период пиковой нагрузки.

Транзакции систем поддержки принятия решений

Другим типом систем обработки транзакций являются системы поддержки принятия решений (DSS). Транзакции систем поддержки принятия решений возвращают большие объемы информации и требуют для своей обработки гораздо больше времени, чем транзакции OLTP. Для обработки транзакции DSS могут понадобиться часы или даже дни. В качестве примера системы поддержки принятия решений можно привести архив складских запасов, запись в который производится редко, только при его обновлениях. Такие системы обычно снабжают информацией сотрудников-управленцев, чтобы они могли принимать важные решения, например, о развитии бизнеса или о необходимом уровне складских запасов. В качестве другого примера можно привести используемую военно-воздушными силами США систему поддержки принятия решений, информирующую руководящий состав ВВС о текущем состоянии, расположении и вооружении реактивных истребителей, бомбардировщиков и людей.

Как мы уже говорили, транзакции DSS обычно не завершаются за то же время, что и транзакции OLTP. Транзакции DSS обрабатываются гораздо дольше, потому что они извлекают гораздо больший объем данных. Так как транзакции OLTP извлекают необходимые данные по уникальному ключу (например, по номеру потребителя), то они начинают и завершают запрос с информацией, относящейся только к этому ключу. У транзакций DSS запрос не начинается с уникального ключа, наоборот, он начинает работу от начала таблицы базы данных и продолжает работать, пока не просмотрит все данные в базе данных. Транзакции DSS также включают в себя соединения таблиц, связываясь для получения дополнительной информации с другими таблицами.

Примечание. При проектировании систем поддержки принятия решений (DSS) применяйте большие блоки данных, чтобы в одну операцию ввода-вывода умещалось побольше записей. Тогда удастся снизить активность ввода-вывода.

Как знают системные аналитики, в системах этого типа обычно достигается 100-процентное использование центрального процессора и других системных ресурсов, поэтому вопрос состоит не в загрузке системы работой, а в сроках обработки запросов системой. Есть такое практическое правило при проектировании систем DSS: распределяйте, насколько это возможно, систему по имеющемуся оборудованию. Другими словами, вы должны не просто иметь количество дисков, достаточное для того, чтобы база данных помещалась бы на них, а спланировать размещение базы данных по многим томам, чтобы рассеять по ним активность ввода-вывода. Насчет оперативной памяти в этом отношении никакие подобные меры не понадобятся, потому что кэширование к ней почти не применяется. (Для обработки транзакций DSS потребуются полные сканирования таблиц, т.е. просмотр таблиц будет начинаться от их начал и продолжаться пока они не будут полностью обработаны.)

Практические советы

Квартальные продажи

Предположим, что вы составляете квартальный отчет фирмы о продажах. Вам необходимо собрать информацию о продажах товаров в течение этого квартала во всех регионах, в которых осуществлялись продажи. Для получения этих данных нужно сперва соединиться с началом таблицы Регион чтобы получить доступ к первой таблице Покупатель После извлечения имени первого покупателя, будет установлена связь (link) на таблицу Заказы покупателей, чтобы узнать, какие товары были заказаны за нужный период времени. Этот поиск продолжается для второго имени покупателя, затем для третьего, и так далее. После того как все данные для покупателей из этого региона будут просмотрены, надо будет осуществить доступ к таблице Покупатель следующего региона и продолжить этот процесс. Для выполнения этой обработки обычно требуется много времени.

Принципы планирования мощности

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

Примечание. Установившимся режимом называют ожидаемую нагрузку на центральный процессор в течение вашего рабочего дня. Если вы предполагаете, что в течение рабочего дня процессор будет использоваться на 55%, то это и есть установившийся режим. Если в этот день был час, в течение которого процессор был загружен на 90%, то этот час называется периодом пиковой нагрузки.

Если вы знаете максимальное количество транзакций, которые будут выполняться в течение рабочего дня и знаете длительность рабочего дня, то вы сможете подсчитать среднее количество транзакций за единицу времени. Однако, так как вы не знаете истинного темпа, в котором будут поступать транзакции, то предварительное планирование мощности системы надо выполнять с "встроенным" резервом мощности. Та часть мощностей системы, которая оставлена как резерв на периоды повышенной рабочей нагрузки, называется резервная мощность.

Последующее планирование мощности для системы ввода заказов должно включать в себя непрерывное слежение за главными счетчиками производительности, чтобы регистрировать, что система делала в прошлом и что она делает в настоящее время. Эта информация обычно хранится в базе данных и применяется для общих отчетов о производительности, об использовании мощностей и об имеющейся резервной мощности. Прогнозирование использования ресурсов компьютера можно выполнить исходя из наглядных графиков, электронных таблиц и отчетов об активности транзакций, создаваемых приложением, способным работать с базами данных, таким как, например, Microsoft Excel.

Использование мощности центрального процессора

Еще одна причина, по которой надо создавать и поддерживать резерв мощности компьютера, связана с теорией "загиба кривой" (knee of the curve theory). Если объяснять просто, эта теория предсказывает, что загруженность системы работой непосредственно влияет на образование очередей, а так как длина очередей непосредственно связана со временем отклика (фактически, длина очередей является частью формулы для расчета времени отклика), то загруженность системы оказывает непосредственное влияние на время отклика. Загибом кривой называется точка, начиная от которой такие показатели, как время отклика или длительность очередей, переходят от линейного роста к экспоненциальному или асимптотическому (с уходом в бесконечность при приближении нагрузки к некоторому конечному значению) росту.

Практические советы

Использование мощности и время отклика на примере супермаркета

Предположим, вы пришли в супермаркет в 3 часа утра, набрали нужные вам товары и везете их к кассе. В это раннее время очереди в кассу нет никакой вообще, поэтому использование мощности кассира составляет 0% и длина очереди (количество людей перед вами) тоже нулевая. Ваше время отклика будет равно времени обслуживания. Это значит, что время обслуживания (в данном случае – время, необходимое на выполнение транзакций продажи выбранных вами товаров и оплату чека) и составит все время, необходимое для выполнения данной задачи.

Предположим ту же ситуацию, но в 5 часов вечера, время наибольшей нагрузки на супермаркет. Теперь, когда вы подойдете к кассе, перед вами будут стоять в очереди восемь человек (т.е. длина очереди равна 8). Теперь ваше время отклика будет равно сумме времен отклика каждого из восьми людей перед вами (которые могут варьировать в зависимости от количества покупок, от оплаты банковским чеком или наличными и т.д.) плюс ваше собственное время обслуживания. Использование мощности кассира в 5 часов вечера тоже гораздо больше, чем в 3 часа утра, непосредственным следствием чего и является рост очереди и, следовательно, общее время вашего ожидания (время отклика).

Сравнение линейного и экспоненциального роста

Обычно мы стремимся добиться, чтобы система работала в линейном режиме, т.е., чтобы рост очередей был бы линейным. Из рисунка 6-1 видно, что линейный рост является равномерным ростом очередей в зависимости от роста загруженности системы. Согласно одному практическому правилу, рост очередей остается линейным, пока центральный процессор используется не более чем на 75%.

Впрочем, иногда при установившемся режиме центральный процессор может быть загружен и более чем на 75%. У такой работы имеются некоторые недостатки – в частности, из-за такой высокой загруженности рост длины очередей может стать экспоненциальным. Экспоненциальный рост – это рост в геометрической прогрессии (см. рис. 6.2).

Примечание.Для примеров в данной лекции длительность обслуживания транзакции принята равной 0,52 секунды и считается, что у всех транзакций длительность обслуживания одинакова. (рис 6.2) Линейная зависимость от загруженности центрального процессора (рис 6.1) Экспоненциальный рост в зависимости от загруженности центрального процессора

Обратите внимание, что при загруженности центрального процессора, превышающей 75%, кривая зависимости длины очередей переходит от линейного роста к экспоненциальному (т.е. кривая превращается почти в вертикальную линию).

Время отклика

График на рис 6.3 показывает, как использование мощностей центрального процессора влияет на время отклика. Обратите внимание на то, как похожи графики времени отклика и длины очереди. Наличие на обоих графиках точек загиба, после которых происходит резкое увеличение времени отклика, показывает, что никогда не следует применять установившийся режим с загруженностью центрального процессора более 75%. Это не значит, что процессор никогда не будет работать с загруженностью более 75%, но чем дольше это будет происходить, тем больше негативных последствий вызовет (в отношении длины очередей и длительности отклика).

(рис 6.3) Зависимость времени отклика от загруженности центрального процессора

Недопущение выхода за точку загиба кривой (в нашем примере – 75% мощности процессора) является одним из наиболее важных принципов предварительного планирования мощности, и его нужно соблюдать при определении количества центральных процессоров, нужных для вашей системы. Например, допустим, при предварительном планировании мощности системы, вы оценили, что потребность в ресурсе процессора составит 180% от мощности процессора. Вы можете мучиться из-за очень плохой производительности, а можете запустить два процессора с 90% загруженностью их мощности (на 15% выше точки загиба кривой). Но еще лучше было бы запустить три процессора, загрузив их на 60% мощности, тогда их загруженность будет на 15% ниже точки загиба кривой.

Этот же принцип применяется и к другим элементам системы, например, к дискам. У графиков для дисков точка загиба расположена не так, как у графиков для процессоров, она находится где-то при 85% загруженности их мощности. Эта пороговая величина (85%) относится и к вместимости, и к производительности ввода-вывода дисковых накопителей. Например, 9 Гб диски не должны содержать более 7,65 Гб данных, хранящихся на нем одновременно. Это ограничение на объем хранимых данных может послужить как резерв для роста, но оно более важно для сокращения времени отклика, потому что время поиска для дисков, заполненных полностью, становится больше, увеличивая тем самым суммарное время отклика. В соответствии с этим же правилом, если дисковый накопитель имеет производительность обмена данными 70 операций ввода-вывода в секунду, то его не следует применять в условиях, когда темп ввода-вывода постоянно превышает 60 операций ввода-вывода в секунду (при установившемся режиме работы). Следуя этим правилам, вы сможете минимизировать суммарное время отклика и получить наибольшую производительность своей системы, так как ваши процессоры и диски используются не с полной загруженностью. Кроме того, ваша система сохранит резервы мощности, которые пригодятся при работе в периоды пиковых нагрузок.

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

Обращения к отсутствующим страницам виртуальной памяти

Для процессора и дисков надо не допускать превышения их загруженности выше точки загиба, это важный принцип предварительного планирования мощности. А что можно сказать о памяти? Для предварительного планирования памяти нужно рассмотреть обращения к отсутствующим страницам виртуальной памяти (page faulting). Обращения к отсутствующим страницам – это нормальное явление при обычном функционировании системы, оно применяется для доступа к данным на диске. Если системе потребуется что-нибудь из памяти (страница с кодом программы или с данными) и будет иметься нужная страница памяти, то произойдет логическое событие ввода-вывода, означающее, что код или данные считываются из памяти, и транзакция, которой понадобился этот программный код или данные, будет обработана.

А что произойдет, если нужного кода или страницы с данными не окажется в памяти? В этом случае придется выполнить физический ввод-вывод и прочитать нужную страницу с диска. Эта задача выполняется при помощи обращения к отсутствующей странице. Система, если в ее рабочем наборе оперативной памяти не найдется нужная страница с кодом программы или с данными, выдаст прерывание обращения к отсутствующей странице (page fault interrupt). Обработка обращения к отсутствующей странице прикажет другой части системы доставить программный код или данные с физического диска. Другими словами, если нужная вашей системе страница с кодом или данными отсутствует в памяти, то система выполнит обращение к отсутствующей странице, которое прикажет другой части системы выполнить физическую операцию ввода-вывода и доставить нужную страницу с диска. Обращение к отсутствующей странице не повлечет доставку нужной страницы с диска, если эта страница находится в списке резерва (standby list) и, следовательно, уже находится в оперативной памяти, или если она находится в пользовании у другого процесса, с которым она может совместно использоваться (разделяться).

Существует два типа ввода-вывода: пользовательский и системный. Пользовательский физический ввод-вывод происходит, когда пользовательская транзакция просит прочитать данные, которые нашлись в памяти. Происходит простая передача данных с диска в память. Такая передача данных обычно выполняется какой-либо программой для управления потоком данных (data flow manager), дополненной функциональными возможностями контроллера дисков. Системный физический ввод-вывод происходит, когда система запрашивает страницу с программным кодом, нужным для выполняемого ею процесса, а этой страницы нет в памяти. Тогда система выдает прерывание обращения к отсутствующей странице, препятствующее продолжению работы до тех пор, пока с диска не будет доставлена нужная страница. После доставки этой страницы обработка будет продолжена. Обе эти разновидности физического ввода-вывода удлиняют время отклика, потому что время, необходимое на доставку данных из оперативной памяти, занимает микросекунды (миллионные доли секунды), а физический ввод-вывод занимает миллисекунды (тысячные доли секунды). Так как обращения к отсутствующим страницам вызывают физический ввод-вывод, который увеличивает длительность времени отклика, то при минимизации обращений к отсутствующим страницам будет достигаться лучшая производительность системы.

В вашей системе могут возникать три типа обращений к отсутствующим страницам:

Обращения операционной системы к отсутствующим страницам. Если система исполняет программный код операционной системы и следующий адрес из этого кода отсутствует в памяти, то система выдаст прерывание обращения операционной системы к отсутствующей странице, чтобы доставить с диска программный код для адреса. При обращении к отсутствующему адресу, программный код доставляется с диска в память, для чего потребуется выполнить одну физическую операцию ввода-вывода.

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

Страничный обмен. При внесении изменений в страницу данных (в результате чего она становится "недействительной" (dirty page, "черновой" страницей)), производится двухэтапный обмен страниц (page fault swap), при котором система не только доставляет новые данные с диска, но и записывает измененные данные из памяти на диск. Для выполнения этого двухэтапного обращения к отсутствующей странице потребуется две физических операции ввода-вывода, но это гарантирует сохранение всех измененных данных. Если обмен страниц будет происходить слишком часто, то он может стать единственным наиболее значительным фактором, ухудшающим длительность времени отклика. Помните, что при обмене страниц происходит передача данных целиком всей страницы, даже если на самом деле нужно передать лишь несколько байтов. Обмены страниц, вызванные обращениями к отсутствующим страницам, требуют больше времени, чем просто обращения к отсутствующим страницам, потому что для них требуется по два физических ввода-вывода. Поэтому вы в своей системе должны стараться минимизировать количество обменов из-за обращений к отсутствующим страницам.

Когда вы для новой системы оцениваете ее минимальную потребность в оперативной памяти, всегда пытайтесь предугадать общий объем памяти, необходимой для обработки рабочей нагрузки, для чего следует обратиться к спецификациям с требованиями к памяти всех процессов, которые будут работать на вашей системе (включая операционную систему и программы управления базой данных). И не забывайте про обращения к отсутствующим страницам. Для работы с памятью системы нужно собирать информацию о происходящих обращениях к отсутствующим страницам и хранить эту информацию в качестве составной части базы данных о производительности. Чтобы определить, когда понадобится добавить в систему дополнительную память, следует применить упреждающий анализ. На случай пиковых нагрузок следует сохранять достаточно большой объем резервной памяти. При планировании системы постарайтесь предусмотреть резерв памяти, составляющий от 5 до 10 процентов от памяти, необходимой для работы процессов.

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

Планирование мощности памяти

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

Сервер базы данных обрабатывает запросы от пользователей и доставляет информацию, необходимую для выполнения транзакций. Чтобы спланировать оперативную память сервера базы данных, вы должны знать число пользователей, одновременно соединяющихся с системой, и количество транзакций ввода-вывода, возникающих из-за этих пользователей. Этот ввод-вывод имеет форму операций чтения и записи. Беседа с проектировщиком приложения нужна, чтобы получить информацию о различных транзакциях и о генерируемых ими операциях ввода-вывода.

Рассчитывая объем памяти, нужной для вашей системы, вы также должны учесть такие характеристики, как желательную частоту удачных обращений к кэшу и обращений к отсутствующим страницам. Рассмотрим типичный сценарий: вы участвуете в проектировании системы для сервера базы данных, которая будет применяться для заказов в режиме реального времени, и вам надо знать количество одновременно работающих пользователей, из-за которых возникает рабочая нагрузка. Эта информация поможет вам определиться с необходимым вам объемом оперативной памяти. Например, вы знаете, что в каждый момент времени с системой будут одновременно работать 50 пользователей. Для такой системы вам потребуется 25 Мб памяти только для пользователей.

Примечание. Обычно для каждого из пользователей требуется выделять по 500 Кб памяти, потому что эта память необходима для теневого процесса (shadow process) пользователя. Теневой процесс – это пользовательский процесс, который имеется для каждого из пользователей системы.

Затем вам надо знать, какую операционную систему вы будете применять. В нашем случае эта операционная система – Microsoft Windows 2000, для которой нужно 20 Мб памяти. Поэтому теперь вам понадобится уже 45 Мб памяти. Вам также надо будет узнать размер программы базы данных, которая будет у вас работать, в нашем случае – Microsoft SQL Server, для которого нужно 5,5 Мб памяти. Итого теперь требуется 50,5 Мб памяти.

И последняя информация, которая вам понадобится, – размер области памяти для обработки базы данных. Эта область состоит из двух элементов: области журнала и кэша базы данных. Область журнала содержит информацию о выполняющихся действиях записи. Эта область очень важна, потому что в случае сбоя системы во время исполнения транзакции в ней сохранится информация для восстановления образа данных перед транзакцией, т.е. образа базы данных, бывшего до того, как произошел сбой. Область журнала имеет также названия "аудиторский след", "контрольный журнал" (audit trail).

Кэш базы данных представляет собой специальную область вашей системы. Через нее передаются все данные, обрабатываемые вашей системой. Чем кэш крупнее, тем больше будет процент успешных обращений к нему (попаданий в кэш). Процент успешных обращений к кэшу – это вероятность, с которой ваша система находит нужные данные в оперативной памяти; очевидно, что вы хотели бы иметь максимально большой процент попаданий в кэш. Обращения к данным, отсутствующим в кэше, похожи на обращения к отсутствующим страницам памяти тем, что нужная информация должна быть доставлена системой и помещена в память кэша. Поэтому, если область кэша окажется слишком маленькой, то будет происходить физический ввод-вывод, потому что системе придется обращаться к диску и доставлять данные, отсутствующие в кэше. Этот физический ввод-вывод, несомненно, увеличит время отклика для транзакций.

Для расчета размера кэша воспользуйтесь следующей формулой:

размер кэша  =  (размер блока кэша) х (количество блоков в кэше)

Размер блока кэша – это объем данных, передаваемых при одной операции ввода-вывода. Помните, что в SQL Server уже задан стандартный размер блока кэша, равный 8 КБ. Количество блоков в кэше – это просто выбираемый вами размер кэша (в блоках). Для систем оперативной обработки транзакций (OLTP) размер блока следует выбирать поменьше, потому что объем передаваемых данных – небольшой, а чем меньше объем передаваемых данных, тем меньше будет и время, необходимое для исполнения транзакции. В системах поддержки принятия решений (DSS) размер блока должен быть гораздо больше, потому что объем передаваемых данных будет гораздо больше, из-за чего уменьшится количество операций ввода-вывода.

Примечание. Никакая настройка размера кэша не может гарантировать успешность обращений к кэшу от 90% и выше. Есть хорошее практическое правило, согласно которому для малых систем надо иметь кэш размером около 25 Мб, для систем среднего размера – 70 Мб, а для больших систем – 215 Мб. Для систем с очень большими базами данных (около 300 Гб) для получения желаемого процента попадания в кэш понадобится кэш объемом около 3 Гб.

Теперь, пользуясь собранной информацией, мы можем вычислить минимальный необходимый объем памяти. Для расчета минимального объема памяти, необходимого для вашей системы, обычно пользуются следующей формулой:

минимальная память = (системная память) + (пользовательская память) + 
  +(память процесса базы данных)

Здесь системная память – это объем памяти, необходимой для операционной системы и SQL Server, пользовательская память – это по 500 Кб памяти, выделяемых каждому из одновременно работающих пользователей, а память процесса базы данных – это память, необходимая для журнала и кэша.

Эта простая формула может применяться для расчета минимального необходимого объема памяти, нужного для нормальной работы как приложений оперативной обработки транзакций (OLTP), так и для систем поддержки принятия решений (DSS). Для систем DSS нужно выбирать более крупные размеры блоков кэша, потому что приложения DSS выполняют полное сканирование таблиц в режиме последовательного чтения. Увеличив размер блока, можно увеличить количество записей, считываемых за одну физическую операцию ввода-вывода. Для систем DSS кэш не используется, потому что все операции ввода-вывода будут физическими.

Для приложений оперативной обработки транзакций (OLTP) после инсталляции системы вы должны следить за процентом удачных обращений к кэшу. Высокий процент удачных обращений к кэшу поможет вам добиться наилучшего времени отклика и производительности для своей системы.

Примечание. Следует стремиться приблизить успешность попаданий в кэш к 100%, насколько это возможно (и этот показатель не должен быть меньше 90%).

Сбор данных об использовании памяти

После того как система, для которой производилось предварительное планирование, будет сконфигурирована и настроена, вам надо будет методично собирать данные об использовании ее памяти. Эти данные можно использовать для проверки соответствия созданной вами системы требованиям соглашения об уровне обслуживания, таким как время отклика или загруженность памяти и центрального процессора. Данные можно собрать при помощи просто Microsoft Performance Monitor (Монитора производительности) для среды Microsoft Windows NT.

Примечание. В Microsoft Windows 2000 "монитор производительности" называется не Performance Monitor, а System Monitor.

Помните, что данное исследование является анализом для планирования производительности и поэтому должно производиться достаточно долго. Измерения будут длиться часами (в большинстве случаев – 24 часа), и интервал измерений тоже должен быть установлен равным 24 часам. Для задач планирования производительности нужно заносить в базы данных о производительности по одной записи в сутки. Критерии производительности, называющиеся счетчики (counters), выбираемые вами для мониторинга, будут усредняться по интервалам измерений. Счетчики для планирования мощности памяти, находятся в объекте Memory (в "мониторе производительности" объектом называется набор счетчиков).

Примечание. Чтобы запустить Performance Monitor (Монитор производительности) нажмите сначала мышью на экранную кнопку Start. Затем выберите Programs, Administrative Tools (Common) и Performance Monitor. В окне Performance Monitor в меню Edit выберите Add To Chart (Добавить к схеме). Диалоговое окно Add To Chart может применяться для выбора объектов и счетчиков, которые нужно отслеживать. Для получения дополнительной информации нажмите на кнопку Help в окне Performance Monitor.

Среди счетчиков монитора производительности имеются следующие:

  • Page Faults/sec. В этом счетчике содержится среднее количество обращений к отсутствующим страницам за одну секунду. Помните, что обращения к отсутствующим страницам происходят, когда вы запрашиваете страницу с программным кодом или с данными, отсутствующую в рабочей или в резервной (standby) памяти.
  • Cache Faults/sec. В этом счетчике содержится среднее количество неуспешных обращений к кэшу, происходящих в системе за одну секунду. Помните, что неуспешные обращения к кэшу происходят всякий раз, когда Cache Manager не находит страницу файла непосредственно в кэше.
  • Pages/sec. В этом счетчике содержится среднее количество страниц, прочитанных с диска или записанных на диск системой за одну секунду. Этот счетчик является суммой двух других счетчиков – Pages Input/sec и Pages Output/sec. В нем содержится информация о трафике обращений к страницам, выполняемым в интересах доступа кэша системы к данным файлов для приложений и чтения/записи страниц в/из файлов памяти, не имеющимся в кэше. Пользуйтесь этим счетчиком, если вас беспокоит чрезмерная нагрузка на память (это явление называется пробуксовка, thrashing), что может привести к чрезмерной подкачке страниц.
  • Available Memory. Этот счетчик содержит информацию об объеме неиспользуемой памяти, оставшейся в системе. Эта память может использоваться как дополнительная память для базы данных или для системных нужд. Available Memory является наиболее важным счетчиком, применяемым для планирования памяти.
  • Примечание. Счетчик Available Memory можно просматривать в окне монитора производительности Performance Monitor в составе объекта Memory. Кроме того, в мониторе производительности Windows 2000 Server этот счетчик представлен трижды: Available Bytes, Available Kbytes, Available Mbytes. Также он доступен из Task Manager’а (Диспетчер задач), если открыть вкладку Performance и наблюдать за доступной памятью в течение периода пиковой нагрузки. (Чтобы получить доступ к Task Manager, нажмите правой кнопкой мышки на панель задач и выберите Task Manager в контекстном меню.)

    Вам следует хотя бы включить в общий процесс сбора данных для планирования мощности, наблюдение за счетчиками Available Memory и Page Faults/sec.

    Анализ данных о памяти

    После сбора данных их можно отобразить в графической форме, чтобы предсказать, какими они станут в будущем. График на рисунке 6-4 показывает пример упреждающего анализа. В этом примере показаны данные о свободной памяти, собранные с 22 октября 1999 года по 14 января 2000 года. При помощи Microsoft Excel эти данные были нанесены на график и построена линия тренда. Зубчатая линия обозначает историю фактического использования памяти, а прямая линия обозначает линейный тренд использования памяти. Как видите, этот анализ предсказывает, что 18 февраля 2000 года у системы останется менее 6% свободной памяти.

    График на рис. 6.5 показывает увеличение обращений к отсутствующим страницам виртуальной памяти за тот же период, а также демонстрирует, что по мере уменьшения объема свободной памяти число обращений к отсутствующим страницам увеличивается.

    (рис 6.5) Объем свободной памяти (линейная закономерность)(рис 6.4) Обращения к отсутствующим страницам (линейная закономерность)

    Обратите внимание на то, что данные о количестве обращений к отсутствующим страницам виртуальной памяти за секунду собирались за тот же период времени, что и данные о свободной памяти. Снова воспользуемся Microsoft Excel, чтобы записать эти данные и отобразить их на графике. Зубчатая линия снова обозначает историю фактического изменения показателя, а прямая линия обозначает линейный тренд этого показателя. В нашем случае график предсказывает, что 18 февраля 2000 года у системы будет происходить более шести обращений к отсутствующим страницам в секунду. Значит, и после этой даты число обращений будет увеличиваться и это может привести к нарушению соглашения об уровне обслуживания. Рассмотренный метод упреждающего анализа является простым и эффективным способом слежения за ресурсами памяти.

    Планирование мощности процессора

    Теперь, когда мы выполнили предварительное планирование и анализ для памяти, пора выполнить такие же работы и для процессора. К настоящему моменту мы можем принять следующие предположения о работе нашей системы:

  • Проектирование приложения и схемы базы данных завершены.
  • При целевом установившемся режиме мощность центрального процессора будет использоваться не более чем на 75%.
  • Ожидаемый процент удачных обращений к кэшу должен составлять не менее 90%.
  • Ни один из дисковых накопителей не используется более чем на 85% как по объему занятого места, так и по производительности ввода-вывода.
  • Сервер обслуживает только базу данных.
  • Операции ввода-вывода распределены по всем дисковым накопителям.
  • Мы воспользовались этими допущениями и пороговыми величинами при предварительном планировании памяти, но для упреждающего анализа использования мощности центрального процессора нам нужна дополнительная информация, которую надо получить у проектировщика базы данных и у проектировщика приложения.

    Упреждающий анализ использования мощности центрального процессора вовсе не так сложен, как вы могли бы предположить. Помните, что сервер базы данных занимается только лишь обработкой транзакций. Приложение работает на компьютере-клиенте, поэтому данные для предварительного планирования его мощности не входят в формулу для расчета мощности процессора. Сервер будет обрабатывать запросы от пользователей в форме операций ввода/вывода. Проектировщик приложений может предоставить нужную информацию о природе транзакций. Проектировщик баз данных может дать информацию о таблицах и индексах, подвергающихся воздействию транзакций. Поэтому первой задачей должно стать определение количества операций ввода-вывода, генерируемых транзакциями и длительности времени, за которое они должны быть завершены. Нам надо знать, какое количество транзакций должно быть обработано системой и знать границы рабочего дня (часы работы системы) или границы периода пиковых нагрузок.

    Как вы уже поняли, всегда предпочтительным является предварительное планирование для периода пиковых нагрузок, потому что оно соответствует наихудшему сценарию развития событий, а мы могли бы создать такую систему, которая выдержала бы это. К сожалению, в большинстве случаев, необходимая для этого информация недоступна, поэтому остается довольствоваться информацией, полученной для установившегося режима. Чтобы получить более глубокое понимание обрабатываемых транзакций, мы должны разобраться во внутреннем устройстве ("анатомии") транзакций, в их "профиле", что поможет нам подсчитать количества генерируемых чтений и записей, благодаря чему мы сможем спрогнозировать ожидаемую нагрузку на центральный процессор. Эту информацию можно получить из бесед с проектировщиками базы данных и проектировщиками приложений. Сначала надо узнать, сколько транзакций каждого типа будут проходить через систему, а затем надо определить количество генерируемых операций чтения и записи. Так будет рассчитана оценка нагрузки на центральный процессор.

    Для уже работающих систем пользователи могут определить профили транзакций, запуская транзакции по одной за раз и следя за ними через Performance Monitor (чтобы определить количество генерируемых операций чтения и записи). Эта "натурная" информация может применяться для подбора скорости, типа и количества используемых центральных процессоров.

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

    Отказоустойчивость

    Сейчас большинство компьютерных фирм добиваются отказоустойчивости при помощи поддержки технологии RAID (Redundant Array of Independent Disks, "массивы независимых дисковых накопителей с избыточностью"). (О технологии RAID см. лекцию 5.) Запомните, что чаще всего применяются следующие уровни RAID:

  • RAID 0. Дисковые накопители без дублирования.
  • RAID 1. Зеркальное дублирование дискового накопителя.
  • RAID 5. Несколько дисковых накопителей с расслоением данных.
  • Так как в RAID 0 не применяется дублирование данных, то для них достаточно одиночного повреждения – при отказе дискового накопителя вы потеряете данные на нем и, следовательно, во всей базе данных. Схема массива RAID 0 показана на рис. 5.9. В RAID 1 обеспечивается зеркальное дублирование диска базы данных. При отказе какого-либо дискового накопителя остается резервный накопитель, весь заполненный данными, такими же, какие были и на отказавшем дисковом накопителе. Если вы решите применять массивы RAID 1, то можно воспользоваться достоинствами параллельного поиска (split seek, см. лекцию 5), благодаря которому система может выполнять поиск данных одновременно сразу на двух дисковых накопителях, что значительно повышает скорость поиска и, следовательно, уменьшает время отклика для транзакций. Схема массива RAID 1 показана на рис. 5.10.

    Выбор уровня RAID непосредственно влияет на количество операций дискового ввода-вывода, т.к. разные уровни RAID отличаются количеством записей на диски. Например, для RAID 1 по сравнению с RAID 0 требуется в два раза больше записей на диск. Если пользователь задаст транзакцию, требующую 50 чтений и 10 записей, то при использовании RAID 1 количество записей вырастет до 20.

    Если конфигурация RAID 0 имеет два дисковых накопителя, то равноценная конфигурация RAID 5 должна иметь три дисковых накопителя. В конфигурациях RAID 5 применяется слой данных (stripe), содержащий информацию о данных на двух других накопителях, который может быть использован для восстановления данных с отказавшего диска. Схема массива RAID 5 показана на рис. 5.11. Эта схема защиты базы данных хороша и по показателям производительности и по цене. Каждая запись в RAID 5 удваивает количество чтений и количество записей для каждой обрабатываемой транзакции, потому что каждая транзакция должна быть записана на два диска – должен быть прочитан слой контроля по четности, изменен в соответствии с новыми данными, а затем снова записан. Эта избыточность несколько увеличивает длительность времени отклика.

    Чтобы рассчитать количество операций ввода-вывода для различных уровней RAID, можно воспользоваться следующими формулами:

    Для RAID 0:

    количество операций ввода-вывода = (количество чтений на одну транзакцию) + 
    +(количество записей на одну транзакцию)

    Если транзакция содержит 50 чтений и 10 записей, то общее количество операций ввода-вывода для уровня RAID 0 будет равно 60.

    Для RAID 1:

    количество операций ввода-вывода = 
    (количество чтений на одну транзакцию) + 
    (2 х [количество записей на одну транзакцию])

    Если транзакция содержит 50 чтений и 10 записей, то общее количество операций ввода-вывода для уровня RAID 1 будет равно 70.

    Для RAID 5:

    количество операций ввода-вывода = 
    3 х (количество операций ввода-вывода на одну транзакцию)

    Если транзакция содержит 50 чтений и 10 записей, то общее количество чтений будет равно 150, а общее количество записей будет равно 30. Общее количество операций ввода-вывода для уровней RAID 5 будет равно 180.

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

    Рассчитав общее количество чтений и записей, соответствующих пользовательским транзакциям и добавив операции ввода-вывода, необходимые для работы выбранного вами уровня RAID, вы получите всю информацию, необходимую для расчета нагрузки на центральный процессор. Для определения загруженности центрального процессора применяется следующая формула:

    загруженность центрального процессора = 
    (темп ввода-вывода) х (время обслуживания) х 100

    В этой формуле темп обозначает количество операций ввода-вывода, которые должны быть обработаны за одну секунду, а время обслуживания обозначает длительность времени, необходимого для обработки типичной транзакции ввода-вывода. Эта формула просто утверждает, что загруженность равна общему количеству операций ввода-вывода, выполняемых системой за одну секунду, умноженному на время, необходимое для выполнения каждой задачи, и умноженному на 100 (чтобы загруженность выражалась в процентах).

    Для определения количества центральных процессоров, требующихся системе, нужно выполнить следующие расчеты для каждой транзакции, обрабатываемой в качестве рабочей нагрузки:

  • Рассчитайте общее количество операций чтения, которые будут выполняться в системе, при помощи следующей формулы:
    общее количество чтений = 
    (количество чтений на одну транзакцию) х (общее количество транзакций)
  • Определите, сколько из этих операций чтения будут физическими операциями ввода-вывода, а сколько – логическими операциями ввода-вывода, пользуясь следующими формулами:
    общее количество логических чтений = 
    (общее количество чтений) х (процент успешных обращений к кэшу)
    
    общее количество физических чтений = 
    (общее количество чтений) – 
    -(общее количество логических чтений)
  • Преобразуйте общие количества каждой из разновидностей операций чтения в количество чтений в секунду при помощи следующих формул:
    количество логических чтений в секунду = 
     (общее количество логических чтений) / (рабочий период)
     
    количество физических чтений в секунду = 
     (общее количество физических чтений) / (рабочий период)
    Здесь рабочий период обозначает длительность времени (в секундах), в течение которого должна быть выполнена работа.
  • Рассчитайте объем времени работы центрального процессора, истраченный на каждую из разновидностей операций чтения при помощи следующих формул:
    время для выполнения логических чтений = 
    (количество логических чтений в секунду) х 
    (длительность операции логического чтения)
    
    время для выполнения физических чтений = 
    (количество физических чтений в секунду) х 
    (длительность операции физического чтения)
    Здесь длительность операции логического чтения обозначает время, необходимое для обработки одного логического чтения, а длительность операции физического чтения – время, необходимое для обработки одного физического чтения. Эти длительности операций чтения можно узнать при помощи Performance Monitor (см. врезку "Как узнать длительность операций чтения" после данного перечня инструкций по расчету.)Примечание.Длительность операций чтения обычно составляет 0.002 секунды для физического чтения и 0.001 секунды для логического чтения.
  • Рассчитайте загруженность центральных процессоров для различных видов операций чтения при помощи следующей формулы:
    загруженность = (темп чтения) х (время обслуживания) х 100
    Можно рассмотреть отдельно загруженность логическими или физическими операциями чтения, применив следующие формулы:
    загруженность операциями логического чтения = 
    (количество логических чтений в секунду) х 
    (длительность операции логического чтения) 
    
    загруженность операциями физического чтения = 
    (количество физических чтений в секунду) х 
    (длительность операции физического чтения)
    Эта информация полезна, когда надо определить, а не слишком ли много нагрузки вызвано операциями физического чтения. Если это так, то можно настроить размер кэша, чтобы сдвинуть равновесие в сторону операций логического чтения.
  • Рассчитайте общее количество операций записи, которые будут выполняться в системе, при помощи следующей формулы:
    общее количество записей = (количество записей на одну транзакцию) х 
    (общее количество транзакций) х (множитель RAID)
    Здесь множитель RAID обозначает общее количество операций записи, выполняемых рабочей нагрузкой за период обработки.
  • Определите, сколько операций записи в секунду будут проходить через систему, пользуясь следующей формулой:
    количество записей в секунду = (общее количество записей) / 
    (рабочий период)
    Здесь рабочий период по-прежнему обозначает длительность времени (в секундах), в течение которого должна быть выполнена работа.
  • Рассчитайте суммарное время работы центрального процессора, истраченное на обработку операций записи, пользуясь следующей формулой:
    время центральных процессоров для выполнения записей = 
    (количество записей в секунду) х 
    (длительность обработки центральным процессором одной операции записи)
  • Рассчитайте загруженность операциями записи, пользуясь следующей формулой:
    загруженность операциями записи = (количество записей в секунду) х 
    (длительность обработки центральным процессором одной операции записи) х 100
  • Рассчитайте суммарную загруженность центральных процессоров для каждого из типов транзакций, пользуясь следующей формулой:
    загруженность центральных процессоров  = 
    ((загруженность операциями логического чтения) + 
    (загруженность операциями физического чтения) +
    (загруженность операциями записи)) х 100
    Этот расчет должен быть выполнен для каждого типа транзакций, допустимых в вашей системе. Например, если ваша система – банковская, то в ней должны иметься транзакции для снятия денег со счетов, для помещения денег на счета и справки о состоянии баланса. Для точного предварительного планирования мощности центральных процессоров в вашей системе вычисления о нагрузке должны быть выполнены раздельно для каждого из этих трех типов транзакций.
  • И наконец, рассчитайте суммарную загруженность центральных процессоров, пользуясь следующей формулой:
    суммарная загруженность центральных процессоров = 
    сумма загруженностей для всех отдельных видов транзакций
    Если суммарная загруженность центральных процессоров превысит 75-процентный порог, то вам следует установить в свою систему дополнительные центральные процессоры, которые уменьшат суммарную загруженность на один процессор в соответствии со следующей формулой:
    суммарная загруженность на один процессор  = 
    (суммарная загруженность центральных процессоров) / 
    (количество центральных процессоров)
    Добавьте столько центральных процессоров, чтобы суммарная загруженность на один процессор снизилась ниже 75%. Например, если суммарная загруженность центральных процессоров окажется равной 180%, то нужно применять три центральных процессора. В результате для трехпроцессорной системы суммарная загруженность на один процессор будет равна 60%.
  • Примечание.Вы, наверное, удивлены, почему ни в одной из наших формул не присутствует скорость работы процессоров. На самом деле, она входит в формулы, но в неявном виде. Скорость процессоров учтена во времени обслуживания – длительности времени, необходимого для обработки транзакции.

    Как узнать длительность операций чтения

    Длительность операций чтения в вашей системе можно определить при помощи утилиты Performance Monitor. Включите Diskperf при помощи следующей команды, вводимой в окне MS-DOS:

    diskperf -y

    Затем запустите Performance Monitor и наблюдайте в объекте Physical Disk за счетчиками Avg. Disk sec/Read и Avg. Disk sec/Write. Обратите внимание, что эти счетчики дают вам среднее время для операций физического чтения. Для определения длительности логического чтения операций эти счетчики неприменимы.

    Сбор данных о загруженности одного центрального процессора

    После того как ваша система будет реализована, потребуется тщательно следить за загруженностью центрального процессора, так же, как и за памятью. В Performance Monitor имеется множество счетчиков, связанных с измерением загруженности отдельных центральных процессоров. Эти счетчики находятся в объекте Processor. Для задач предварительного планирования мощности наиболее полезны следующие счетчики:

  • % Processor Time. Процент истекшего времени, в течение которого процессор был занят, исполняя команды. Команда (instruction) – это минимальная единица работы, исполняемой компьютером, поток (thread) – это объект, который выполняет команды, а процесс (process) – это объект, создаваемый при запуске программы. Счетчик % Processor Time можно рассматривать как долю времени, расходуемого на выполнение полезной работы.
  • % Privileged Time. Процент времени, в течение которого процессор работал в привилегированном режиме (Privileged mode). В привилегированном режиме исполняются уровень обслуживания Windows NT (service layer), программы Executive и ядро Windows NT. Драйверы большинства устройств (кроме графических адаптеров и принтеров) также исполняются в привилегированном режиме.
  • % User Time. Процент времени, в течение которого процессор работал в пользовательском режиме (User mode). В пользовательском режиме также исполняются графические алгоритмы, драйверы графических устройств, драйверы принтеров и Window Manager. Программы, исполняемые в пользовательском режиме, не могут повредить целостность Windows NT Executive, ядра и драйверов устройств.
  • % Interrupt Time. Процент времени, затраченного процессором на обработку аппаратных прерываний. Прерывания выполняются в привилегированном режиме, поэтому время, затраченное на их обработку, входит в состав показателя % Privileged Time. Этот счетчик помогает выяснить причину чрезмерно большого времени работы в привилегированном режиме.
  • Interrupts/sec. Этот счетчик содержит среднее количество прерываний устройств, поступающих к процессору за одну секунду. Устройства прерывают работу процессора в случаях, когда они завершили выполнение задачи или когда требуются вмешательство процессора по какой-либо другой причине. Прерывания могут генерировать такие устройства, как системный таймер, мышь, канал обмена данными, сетевая интерфейсная плата, а также другие периферийные устройства. Во время прерываний нормальное исполнение потока приостанавливается, и в результате прерывания процессор может переключиться на исполнение другого потока, с более высоким приоритетом. Прерывания от таймера происходят часто и периодически и образуют фон активности прерываний.
  • Для предварительного планирования мощности могут понадобиться не все эти показатели; выбор применяемых показателей зависит от глубины проводимого вами исследования. По крайней мере, следует использовать счетчик % Processor Time.

    Сбор данных о загруженности нескольких центральных процессоров

    При помощи Performance Monitor вы можете также получить усредненные данные для нескольких центральных процессоров. Для этого воспользуйтесь объектом System, содержащим, среди прочих, следующие счетчики:

  • % Total Processor Time. Сумма показателей % Processor Time всех процессоров, деленная на количество процессоров в системе.
  • % Total Privileged Time. Сумма показателей % Privileged Time всех процессоров, деленная на количество процессоров в системе.
  • % Total User Time. Сумма показателей % User Time всех процессоров, деленная на количество процессоров в системе.
  • % Total Interrupt Time. Сумма показателей % Interrupt Time всех процессоров, деленная на количество процессоров в системе.
  • Total Interrupts/sec. Среднее количество прерываний устройств, поступающих к процессорам за одну секунду. Этот счетчик служит признаком загруженности системных устройств в масштабах всего компьютера.
  • Анализ данных о загруженности центральных процессоров

    Информация, собранная при помощи счетчиков Performance Monitor, может применяться для прогнозирования увеличения нагрузки на отдельные центральные процессоры, следствием которого станет увеличение времени отклика для этого процессора. На рис. 6.6 показан график загруженности центрального процессора (значения загруженности для разных дат). Обратите внимание, что тренд загруженности центрального процессора растет и достигнет 75% порога 18 февраля 2000 года.

    (рис 6.6) Линейный прогноз загруженности центрального процессораПримечание. Чем больше точек с данными вы соберете, тем точнее будет ваш прогноз.

    Планирование мощности дисковой подсистемы

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

    Многие люди бывают удивлены количеством дисковых накопителей, необходимых для их баз данных. Но дополнительные накопители дают дополнительные точки доступа к данным. Если вы имеете только одну точку доступа к данным, то вы создаете узкое место ("бутылочное горлышко"). Так как через это узкое место придется проходить всем транзакциям, то длительность откликов будет увеличиваться. Есть такое практическое правило – имейте как можно больше точек доступа к данным. Чем больше точек доступа к данным будет у вас, тем меньше станет вероятность возникновения узкого места из-за недостаточного количества дисковых накопителей. Кроме того, вы сможете генерировать больше операций ввода-вывода в секунду – чтобы система могла выдерживать большой поток операций ввода-вывода, необходимый для больших баз данных.

    Предположим, ваша система управляет базой данных объемом 10 Гб и в ней генерируется 140 операций ввода-вывода в секунду. Из правила 85% об объеме дисковой памяти следует, что вам понадобится дисковый накопитель объемом примерно в 12 Гб, чтобы его хватило для хранения базы данных. Теперь взглянем на требования к дисковым накопителям с точки зрения производительности ввода-вывода. Если дисковые накопители имеют производительность ввода-вывода 70 операций в секунду, то с учетом правила 85% для производительности каждого из накопителей вам потребуются три накопителя. Поэтому, так как анализ производительности ввода-вывода требует применения трех накопителей (максимально), мы должны применять три дисковых накопителя, суммарный объем которых составит 12 Гб, а производительность каждого будет 70 операций ввода-вывода в секунду.

    Обратите внимание, что эта конфигурация – минимальная, если хотите, то можете применить большее количество дисковых накопителей с более высокой производительностью. Также обратите внимание, что этот метод анализа не учитывает эффекты от применения конфигураций RAID.

    Примечание. При предварительном планировании дисковой подсистемы всегда соблюдайте "правило 85%" и для объема базы данных, и для производительности операций ввода-вывода генерируемых пользователями. Использование каких-либо других расчетов вызывает увеличение количества дисковых накопителей. Также помните, что 85% является максимально допустимым значением использования дисков. На практике следует загружать диски менее чем на 85%. И помните, что слишком большое количество операций ввода-вывода в секунду вызовет появление узких мест и, следовательно, увеличит длительность времени отклика.

    А теперь давайте более подробно изучим, как правильно определить количество дисковых накопителей, нужных для вашей системы, с учетом применения конфигураций RAID. Вам понадобится хранить три основных категории данных:

  • Windows 2000 и SQL Server;
  • файлы журналов;
  • саму база данных.
  • Надо будет рассчитать количество дисковых накопителей для каждой из этих категорий данных. Суммировав эти числа, вы получите количество дисковых накопителей, необходимых для вашей системы.

    Дисковые накопители для Windows 2000 и SQL Server

    Сначала надо рассчитать количество дисковых накопителей, необходимых для хранения первой категории данных – операционной системы Windows 2000 Server и СУБД SQL Server. Обычно для этого применяют отдельный набор томов RAID 1 (дисковые накопители с зеркальным дублированием), чтобы обеспечивать наиболее быстрое восстановление после отказов. Количество дисковых накопителей может быть разным в зависимости от объема хранимой на них информации, но операционная система Windows 2000 и СУБД SQL Server обычно умещаются на одном диске. Наш простой метод расчета можно выразить следующей формулой:

    диски для операционной системы и SQL  = 
    (диски для Windows 2000 Server и SQL) х (множитель RAID)

    В данном случае, для дисковых накопителей с зеркальным дублированием, результатом формулы будет 2 диска (Windows NT и SQL Server уместятся на одном диске, а другой будет служить дублирующим диском массива RAID 1). Конфигурация тома для операционной системы как RAID 5 или как RAID 0 не рекомендуется. Применять RAID 5 имеет смысл, только когда для собственно хранения данных требуется более одного диска, и вам следует стремиться к как можно более быстрому восстановлению операционной системы и программы СУБД.

    Дисковые накопители для файлов журналов

    Затем вам потребуется рассчитать количество дисковых накопителей, необходимых для поддержки системных файлов журналов. Это количество сильно зависит от общего количества операций записи за одну секунду, вызываемых вашими транзакциями. Помните, что ценность информации, содержащаяся на этих дисках, очень велика. Она представляет собой "аудиторский след" (контрольный журнал) или "образ до сбоя", который понадобится, если что-нибудь случится с базой данных. При помощи аудиторского следа вы сможете отменить транзакции, незавершенные из-за отказа диска. Расчет количества операций записи уже был выполнен при предварительном планировании мощностей процессоров. Пусть, например (эти числа взяты произвольно), транзакции вызывают 1 500 000 операций записи при использовании тома RAID 0. Если мы решим, что для дисковых накопителей, хранящих журнал, надо применять RAID 1, то получится, что за 8-часовой рабочий день должно быть выполнено 3 000 000 операций записи, или 104,16 операций записи за одну секунду. (Помните, что по сравнению с RAID 0, массивы RAID 1 удваивают количество операций записи на одну транзакцию.) Для расчета необходимого количества дисковых накопителей примените следующую формулу:,

    диски для журналов  = 
    (количество записей в секунду) / (производительность ввода-вывода диска)

    Помните, что производительность ввода-вывода диска в данной формуле должна составлять 85% от его паспортной максимальной производительности. Также не забудьте округлить результат деления (количество записей в секунду) / (производительность ввода-вывода диска) до ближайшего целого числа в сторону увеличения. И наконец, не забудьте скорректировать величину количество записей в секунду в соответствии с увеличением количества операций записи, вызванным из-за применения того или иного уровня RAID. Если мы применим 85-процентный потолок к дисковым накопителям, имеющим максимальную производительность ввода-вывода 70 операций ввода-вывода за одну секунду, то получится, что нам надо иметь 1,7 накопителя. Округлив этот результат, мы получим, что нам надо иметь два накопителя.

    Дисковые накопители для базы данных

    И наконец, надо будет рассчитать количество дисковых накопителей, необходимых для базы данных. Помните, что вы должны учитывать не только необходимый объем дисковой памяти, но и количество операций ввода-вывода, которые должны выполняться одну секунду, а затем взять тот из результатов расчета, который окажется больше.

    Расчет для объема дисковой памяти

    Чтобы определить количество дисковых накопителей, необходимых для того, чтобы база данных могла на них уместиться, примените следующую формулу:

    диски для базы данных  = (объем данных) / (размер диска) + (прибавка RAID)

    Помните, что размер диска в данной формуле должен составлять 85% от его паспортной максимальной емкости. Также не забудьте, что для объема данных и размера диска надо применять одинаковые единицы измерения (например, килобайты или мегабайты). Прибавка RAID – это количество дополнительных дисковых накопителей, необходимых для обеспечения отказоустойчивости. Для RAID 1 это число равно количеству дисковых накопителей, необходимых для хранения самой базы данных. Для RAID 5 требуется один дополнительный накопитель. Для нашей 10-гигабайтной базы данных, использующей RAID 5, потребуется два 12 Гб накопителя.

    Примечание. Для дисковых накопителей, хранящих базу данных, рекомендуется применять RAID 5.

    Расчет для производительности ввода-вывода при доступе к базе данных

    Количество дисков, необходимых, чтобы система могла выдержать необходимый темп ввода-вывода, может вырасти очень значительно, как вы уже видели из простого примера, приведенного ранее. Чтобы рассчитать это количество, надо выполнить ряд действий:

  • Рассчитайте общее количество операций чтения, которые будут проходить через систему, применив следующую формулу:
    общее количество чтений = (количество чтений на одну транзакцию) х 
    (общее количество транзакций)
    Предположим, на одну транзакцию у нас производится 500 чтений, а всего будет 50 000 транзакций, тогда всего у нас будет 25 000 000 чтений.
  • Определите, сколько из этих операций чтения будут физическими операциями ввода-вывода, а сколько – логическими операциями ввода-вывода, пользуясь следующими формулами:
    общее количество логических чтений = (общее количество чтений) х 
    (процент успешных обращений к кэшу)
    
    общее количество физических чтений = (общее количество чтений) - 
    (общее количество логических чтений)
    Предположим, процент успешных обращений к кэшу равен 90%, тогда общее количество логических операций чтения у нас будет равно 22 500 000, а общее количество физических операций чтения будет равно 2 500 000.
  • Преобразуйте общее количество физических операций чтения в количество чтений в секунду при помощи следующей формулы:
    количество физических чтений в секунду = 
    (общее количество физических чтений) / (рабочий период)
    Здесь рабочий период обозначает длительность времени (в секундах), в течение которого должна быть выполнена работа. Эта величина нужна также для расчета загруженности центрального процессора. Если взять для нашего примера 8-часовой рабочий период, то мы получим 86,8 физических операций чтения в секунду.
  • Затем рассчитайте общее количество операций записи, которые будут выполняться в системе, при помощи следующей формулы:
    общее количество записей = (количество записей на одну транзакцию) х 
    (количество транзакций) х (множитель RAID)
    Пусть мы имеем 10 операций записи на одну транзакцию и применяем массив RAID 5, тогда общее количество записей будет равно 10 х 50 000 х 3, т.е. 1 500 000 операций записи.
  • Преобразуйте общее количество физических операций записи в количество операций записи в секунду при помощи следующей формулы:
    количество физических записей в секунду = (общее количество физических записей) / 
    (рабочий период)
    В нашем примере мы имеем 1 500 000 физических операций записи за 8-часовой рабочий период (28 800 секунд), что дает 52,1 физических операций записи в секунду.
  • Рассчитайте общее количество физических операций ввода-вывода в секунду при помощи следующей формулы:
    количество физических операций ввода-вывода в секунду = 
    	(общее количество физических чтений в секунду) + 
    	(количество физических записей в секунду)
    В нашем примере мы имеем 86,8 физических операций чтения в секунду и 52,1 физических операций записи в секунду, что дает в сумме 138,9 физических операции ввода-вывода в секунду.
  • Вычислите общее необходимое количество дисковых накопителей по следующей формуле:
    количество дисков для базы данных = 
    	((количество физических операций ввода-вывода в секунду) / 
    	(производительность ввода-вывода одного диска)) + (прибавка RAID)
  • Помните, что значение производительности ввода-вывода одного диска вы должны брать с учетом правила "85%". Прибавка RAID – это количество дополнительных дисковых накопителей, необходимых для обеспечения отказоустойчивости. Если мы имеем всего 138,9 физических операции ввода-вывода в секунду, а производительность диска составляет 70 операций ввода-вывода в секунду и применяется массив RAID 5, то всего понадобится четыре дисковых накопителя – три для поддержки суммарного ввода-вывода и еще один для обеспечения отказоустойчивости массива RAID 5.

    Итак, вы видите, что для размещения базы данных размером 10 Гб было бы достаточно иметь всего лишь один диск, но с учетом выполняемого ввода-вывода потребуется три диска – больший из двух результатов расчета.

    Общее количество дисковых накопителей, нужных в системе

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

    Практические советы.

    Оставляйте себе резервы

    Большинство проектировщиков пользуются пороговыми величинами (75% для загруженности центральных процессоров, 85% для использования дисков и т.д.) как максимальными значениями нагрузок. В большинстве случаев желательно применять меньшие величины. Конечно, часто решения в этих вопросах принимают не проектировщики. На решение проектных вопросов могут оказывать влияние такие внешние факторы, как бюджет расходов на покупку вычислительной техники. В качестве хорошего целевого показателя можно принять максимальную загруженность центральных процессоров, равную 65% и использование дисков на 70%. Однако вы можете применять и любые другие значения этих процентов, которые сочтете оптимальными для проектируемого вами типа систем.

    Сбор данных об использовании дисков

    После того как система будет установлена и запущена в работу, вам надо будет собирать данные об использовании ее дисков, чтобы знать обо всех изменениях, которые могут потребоваться. При расширении системы может увеличиться количество пользователей (а следовательно, и количество транзакций), могут измениться требования к базе данных (в результате чего может увеличиться размер базы данных) и т.д.

    При выполнении исследований последующего планирования загруженности дисков понадобится следить за следующими счетчиками утилиты Performance Monitor, которые вы найдете в объекте PhysicalDisk:

  • % Disk Time. Процент истекшего времени, в течение которого выбранный дисковый накопитель был занят обслуживанием запросов чтения или записи.
  • % Disk Read Time.Процент истекшего времени, в течение которого выбранный дисковый накопитель был занят обслуживанием запросов чтения.
  • % Disk Write Time.Процент истекшего времени, в течение которого выбранный дисковый накопитель был занят обслуживанием запросов записи.
  • Avg. Disk Read Queue Length. Среднее количество запросов чтения, стоящих в очереди на выбранном дисковом накопителе за время интервала измерения.
  • Avg. Disk Write Queue Length. Среднее количество запросов записи, стоящих в очереди на выбранном дисковом накопителе за время интервала измерения.
  • Avg. Disk Queue Length.Среднее количество запросов (любых – и чтения, и записи), стоящих в очереди на выбранном дисковом накопителе за время интервала измерения. Этот показатель является суммой двух предыдущих показателей.
  • Disk I/O Count Per Second.Активность ввода-вывода массива дисков за одну секунду, усредненная за интервал измерения. Этот счетчик недоступен непосредственно из утилиты Performance Monitor, чтобы получить эту величину, надо просто сложить значения двух других счетчиков, которые доступны – Disk Reads/sec и Disk Writes/sec*.
  • Disk Space Used.Объем места на диске, которое в данный момент используется базой данных или операционной системой. Этот счетчик недоступен из Performance Monitor, для получения этой информации нужно применять Disk Administrator.
  • Disk Space Available.Объем места на диске, которое в данный момент свободно**.
  • Для запуска Disk Administrator нажмите на экранную кнопку Start, затем выберите Programs, Administrative Tools (Common) и, наконец, Disk Administrator. Для получения дополнительной информации об использовании утилиты Disk Administrator, производительности, нажмите на кнопку Help в окне Disk Administrator.

    Анализ данных об использовании дисков

    Анализ информации об использовании дисков несложен. Например, если бы мы анализировали работу системы, то для определения объема свободного места мы собирали бы информацию о свободном месте на дисках. На рис. 6.7 показаны нагрузка на базу данных в отношении наличия свободного места.

    Как можно видеть, в начале наблюдений у нас было 2,05 Мб свободного места из общего объема в 6,15 Мб, т.е. диск был заполнен примерно на 67%. 14 января 2000 года объем свободного места на диске уменьшился примерно до 1,5 Мб, т.е. диск заполнился примерно на 75%. Проведя при помощи Microsoft Excel линию тренда, можно спрогнозировать, что 18 февраля 2000 года на диске останется свободно только около 1,3 Мб, т.е. диск заполнился примерно на 83%. Администратор баз данных может принять решение приобрести в этот момент дополнительный диск.

    (рис 6.7) Прогноз (упреждающий анализ) для свободного места на диске

    Планирование мощности сети

    Планирование мощности сети мы оставили под конец, потому что изнутри системы вы не сможете получить много информации. Из утилиты Performance Monitor нельзя получить никакие счетчики производительности работы сети, поэтому предварительное планирование сети может оказаться достаточно трудным делом. Сеть обычно является самым слабым звеном в системе, поэтому будьте реалистичны при ее оценке.

    Чтобы выполнить предварительное планирование сети, вам понадобится определить, сколько пользователей будут одновременно работать в системе, сколько сообщений (messages) будет проходить за одну секунду и сколько в среднем байт будет содержаться в этих сообщениях. Опираясь на эту информацию, вы можете произвести некоторые оценки минимально необходимой пропускной способности сети. Пусть, например, в нашей системе будут передаваться такие объемы данных: будет 10 пользователей, каждый из которых будет передавать 25 сообщений в минуту. Каждое сообщение будет иметь длину 259 байтов. Можно оценить, что за одну минуту все эти 250 сообщений будут генерировать 64 750 байтов в минуту, т.е. 518 000 битов в минуту, т.е. 8633,33 бита в секунду. Для такой нагрузки подойдет небольшая сеть. Для оценки мощности сети можно применять следующую формулу:

    мощность сети = (количество сообщений секунду) х  (длина сообщений) х  
    (количество битов в одном байте)

    При помощи этого расчета вы можете приблизительно оценить мощность (бит/сек), которую должна будет иметь линия передачи данных.

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

    Сбор данных об использовании сети

    При выполнении исследований последующего планирования загруженности сети вам понадобится следить за счетчиком производительности Bytes/Sec Through Network Interface утилиты Network Monitor (Сетевой монитор). Этот счетчик обозначает процент времени, когда линия передачи данных занята.

    Примечание. Инструкции по инсталляции утилиты Network Monitor вы найдете в разделе "Installing Network Monitor" справочной системы Windows 2000 Server.

    Анализ данных об использовании сети

    Для анализа сетевых данных надо сначала рассчитать пропускную способность линии передачи данных (мощность сети), как было показано выше, а затем посмотреть значение счетчика Bytes/Sec Through Network Interface. Зная два этих значения, можно вычислить общую загруженность сети при помощи следующей формулы:

    загруженность сети = 
    ((количество байт, проходящих через сеть за одну секунду) / 
    (мощность сети)) х 100

    На рис. 6.8 показан пример линейного роста процента загруженности сети в зависимости от даты.

    (рис 6.8) Прогноз (упреждающий анализ) для загруженности сети

    График показывает, что 2 сентября 2000 года загруженность данного сегмента сети станет максимально возможной. Опять напомним, что чем больше точек с данными вы нанесете на график, тем точнее будет ваш прогноз.

    Как выбирать оценочные данные

    Нельзя однозначно назвать набор счетчиков, за которыми нужно следить при последующем планировании. Набор используемых счетчиков зависит от анализируемых вами данных и от необходимой вам степени детализации. Кроме счетчиков, уже описанных ранее, Performance Monitor имеет много других счетчиков для измерения производительности, которые могут оказаться полезными в некоторых ситуациях. Одну такую ситуацию – сбор информации о процессах – мы сейчас и рассмотрим.

    Сбор данных о процессах

    Информация о процессах может оказаться очень ценной при создании профилей рабочей нагрузки. Создание профилей рабочей нагрузки – это выяснение, какую именно работу выполняет каждый из пользователей. Performance Monitor имеет много разнообразных счетчиков для выполнения этой задачи. Эти счетчики подобны счетчикам из объекта Processor, но в данном случае они применяются для сбора данных о процессе. Они находятся в объекте Process и перечислены ниже:

  • % Processor Time. Процент истекшего времени, в течение которого все потоки процесса использовали процессор для исполнения команд. Для данного процесса может быть учтен программный код, обрабатывающий некоторые аппаратные прерывания или условия-ловушки (trap conditions).
  • % User Time.Процент времени, в течение которого потоки процесса выполняли программный код, исполняемый в пользовательском режиме (User mode).
  • % Privileged Time.Процент времени, в течение которого потоки процесса выполняли программный код, исполняемый в привилегированном режиме (Privileged mode).
  • Page Faults/sec.Частота обращений к отсутствующим страницам в данном процессе.
  • Elapsed Time.Общее время, затраченное на работу данного процесса.
  • Анализ данных о процессах

    Анализ этой информации вовсе не так сложен, как вы могли бы подумать. Например, если бы потребовалось провести анализ работ, выполняемых процессами системы, то нам надо было бы собрать данные процессов при помощи, например, счетчика % Processor Time. Этот счетчик позволяет оценить, насколько много внимания система уделяет данной функции. На рис. 6.9 показан рост пользовательского процесса в запросе CalProc, применяемом отделом кредиторских задолженностей.

    Эта информация полезна тем, что мы можем спрогнозировать результат от увеличения числа пользователей в отделе кредиторских задолженностей. Линия тренда на данном графике показывает, что процент использования возрастает и достигнет 18 февраля 2000 года 30%. Допустим, в отделе кредиторских задолженностей имеется 10 пользователей, тогда можно оценить в 3% вклад каждого из пользователей в загруженность в феврале. Мы можем сделать вывод, что если в феврале добавить еще трех пользователей, то загруженность для запроса CalProc составит приблизительно 39%.

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

    (рис 6.9) Прогноз (упреждающий анализ) пользовательского процесса

    В табл. 6.1 дан список счетчиков, которые послужат хорошей основой для исследований планирования мощности.

    Показатели, доступные в Performance Monitor
    Объект Показатели
    Processor % Processor Time (статистика для отдельных центральных процессоров)
    System % Total Processor Time (усредненные данные для всех центральных процессоров)

    Страницы:

    Планирование мощности (capacity planning) включает в себя расчет ресурсов, необходимых для вашей системы, и принятие решений о том, как можно максимально повысить производительность этих ресурсов. К планированию мощности также относятся задачи планирования роста вашей сети, благодаря которому будущие добавления аппаратуры или программного обеспечения доставят вам меньше потерь и расходов.

    Виды планирования мощности

    Планирование мощности имеет две формы: предварительное планирование мощности (pre-capacity planning) и последующее планирование мощности (post-capacity planning). В задачи предварительного планирования мощности, известного также под названием планирование состава системы (sizing), входит прогнозирование требований к аппаратуре, при соблюдении которых система сможет исполнять необходимую работу в заданные сроки (в соответствии с соглашением об уровне обслуживания (SLA, service level agreement)). Соглашения об уровне обслуживания гарантируют заданные длительности времени отклика для тех или иных функций системы, т.е. длительность исполнения каких-либо действий или транзакций.

    Примечание. Соглашение об уровне обслуживания задает условия, принятые всеми организациями, работающими с системой. Соглашения об уровне обслуживания составляются для обеспечения высокопроизводительной и "гладкой" работы системы. Например, могут заключаться соглашения об уровне обслуживания, которые будут гарантировать определенное время отклика при исполнении запросов. Это время отклика согласовывается с пользователями, с отделом эксплуатации, с отделом приложения и с отделом производительности.

    Кроме того, нужно предусмотреть некоторые резервы мощности (резервы вычислительной мощности центральных процессоров, резервы свободного места на дисках и резервы оперативной памяти), чтобы время отклика находилось в заданных пределах, как при установившемся режиме работы, так и при пиковых нагрузках. При решении задачи предварительного планирования у вас еще нет реальных данных о производительности, т.к. система еще не функционирует. Вам придется пользоваться какой-либо другой, доступной вам информацией. Результаты будут зависеть от точности этой информации. Например, информацию о размещении и первоначальном размере базы данных могут предоставить сотрудники отдела базы данных, которые разрабатывают систему. Сотрудники отдела приложения, которые разрабатывают приложение и различные запросы, связанные с приложением, могут дать информацию о том, как эти запросы будут использовать ресурсы системы. Сотрудники отдела управления дадут информацию о количестве пользователей, работающих одновременно и о количестве запросов, которые они будут передавать в систему. Вся эта информация содержит сведения о вычислительной нагрузке (и вы сможете определить потребное количество центральных процессоров), о размере базы данных (вы сможете определить, сколько вам нужно дисковых накопителей) и т. д.

    Последующее планирование мощности, известное также под названием упреждающий анализ (predictive analysis) – это комплексные и регулярные исследования загруженности аппаратных и программных ресурсов уже установленной и работающей системы. Благодаря последующему планированию мощности обеспечивается адекватная подготовка к росту рабочей нагрузки в соответствии с ресурсами системы. Эти исследования должны давать информацию, в первую очередь, для администратора базы данных. Администратор базы данных использует эту информацию, чтобы определить, какие изменения требуется внести в систему, чтобы система соответствовала уровню производительности, заданному в соглашении об уровне обслуживания. В данной лекции мы рассмотрим оба этих вида планирования мощности – предварительное и последующее, изучим их общие черты и различия.

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

    Исследования, выполняемые при последующем планировании мощности, помимо упреждающего анализа дают чрезвычайно ценную информацию – они отвечают на вопросы "что, если...", касающиеся нагрузки на компьютер. Получив знания о том, как разные категории пользователей расходуют ресурсы системы, вы можете точно предсказывать нагрузку на ресурсы системы, зная категорию добавляемых пользователей (например, как повлияет появление новых сотрудников в отделе кредиторских задолженностей). Благодаря такому упреждающему анализу системный администратор получает достаточно времени, чтобы приобрести нужное оборудование, еще до того, как в системе появятся новые пользователи, избегая тем самым снижения производительности или удлинения времени отклика системы.

    Благодаря исследованиям при последующем планировании мощности можно также получить информацию, нужную для настройки системы. Информация для настройки системы, например, о вводе-выводе обработки запросов, поступающих на массивы дисковых накопителей, получается на основе анализа исторических данных о производительности и может применяться для принятия решений об изменениях конфигурации системы, необходимых для повышения производительности. Пользуясь этой информацией, вы можете выявить "узкие места", влияющие на производительность, например, слишком большую активность на одном из массивов дисковых накопителей (по сравнению с другими массивами). Так, добавление новых пользователей вызывает увеличение объема доступа к таблицам базы данных. Количество таблиц, к которым обращаются пользователи, и частота этих обращений могут отслеживаться и регистрироваться. Эта информация будет полезна при решении вопроса, может ли перемещение этих таблиц в другое место предотвратить появление "узкого места" в дисковой подсистеме.

    Исторический обзор планирования мощности

    Во времена многопользовательских ЭВМ концепции планирования мощности и производительности не были осознаны и не получили развития. В начале 1970-х годов предварительное планирование мощности заключалось лишь в поиске потребителей, применявших приложения, которые "работали бы так же", как и нужное приложение. Находить таких потребителей было трудно, а сравнивать фирмы и организации и как у них работают приложения – еще труднее.

    В середине 1970-х годов потребители и поставщики приложений разработали методики для анализа, предусматривавшие запуск тестовых задач, при помощи которых можно было оценить оптимальный первоначальный состав аппаратных компонент ЭВМ. Они создавали приложения, похожие на применяемые потребителями и запускали их на похожем оборудовании, собирая статистические данные о его работе. Затем эти статистические данные использовались для подбора состава ЭВМ, наиболее хорошо удовлетворяющего потребностям потребителей. Этот процесс тоже позволял ответить на вопросы "что, если...", при помощи запуска сценариев с тестовыми задачами, позволяющими определить, какой состав системы необходим при увеличении в системе числа пользователей, процессов приложений или при увеличении объема данных. Недостатком этого процесса была его дороговизна. Первые тестовые задачи, разработанные первоначально для моделирования типовой работы потребителей, стали применяться в основном поставщиками компьютерного оборудования в качестве маркетинговых средств при продажах ЭВМ и для сравнения производительности конкурирующего оборудования.

    Во время этого периода аналитики создавали методики для предсказания использования ресурсов существующих систем. Внешне этот процесс казался менее интересным, но он оказался таким же сложным, так как не существовало ни методик тестирования, ни инструментальных средств для сбора нужных данных. Ученые-компьютерщики (такие как д-р Джеффри Бузен [Jeffrey Buzen] – родоначальник теории планирования мощности) еще только разрабатывали теории об использовании ресурсов компьютеров и исследовали вопрос, как можно выполнять эти вычисления.

    С 1980-х годов первоначальные тестовые модели развились в тесты стандартных нагрузок, такие как тесты ST1, TP1 и Debit/Credit, но усилия в то время были направлены на выявление аппаратуры с наивысшей производительностью для рекламных целей, а не на разработку стандартных моделей нагрузки от приложений, которые можно было бы использовать при предварительном планировании и поддержке систем. Потребители еще не могли пользоваться этими тестами для сравнения аппаратуры систем, потому что они работали в различных ситуациях. В ответ на эти нужды потребителей возник консорциум представителей компьютерной промышленности, "Совет по производительности обработки транзакций" (Transactional Processing Performance Council). Этот Совет задал стандарты обработки транзакций для более чем 45 производителей оборудования и программного обеспечения. Эти тесты часто могут показать относительные возможности оборудования и программного обеспечения для баз данных; к сожалению, они не могут помочь при предварительном планировании нагрузки от работы приложений.

    Примечание.Тесты Совета не годятся для предварительного планирования мощности, потому что они не отражают свойства настоящей рабочей нагрузки. Чаще всего они спроектированы для демонстрации производительности, например, для измерения количества транзакций, проходящих через систему в течение заданного времени. Эти тестовые транзакции имеют маленькие длительности и выполняют очень небольшие объемы работы, поэтому можно обработать очень большое их количество. Из-за большого количества обработанных транзакций складывается впечатление, будто системы, на которых работали эти тесты, – очень мощные, но на самом деле они только кажутся таковыми, из-за особым образом сконструированной модели рабочей нагрузки.

    В это самое время подоспела архитектура "клиент/сервер" и технология реляционных баз данных, и потребность в предварительной оценке размера системы и в планировании мощности возросла. Большинство из современных приложений сейчас пишутся на основе архитектуры "клиент/сервер". Серверы обычно используют устройства для централизованного хранения данных, а пользовательский интерфейс обычно исполняется локально на настольных компьютерах пользователей или на удаленном веб-сайте. Эта экономная стратегия использования дорогих мощностей для обработки данных на сервере имеет еще одно достоинство: пользователи работают в уже привычных для них графических интерфейсах. Так как серверы, на которых работают приложения доступа к базам данных, используются очень интенсивно, то именно им уделяется основное внимание в большинстве проектов предварительного планирования мощности и исследований последующего планирования мощности.

    В настоящее время для предварительного планирования мощности серверов по-прежнему чаще всего применяется метод моделирования работы приложений при помощи тестов, а наиболее точным методом прогноза производительности системы в будущем является сбор исторических данных о производительности и применение методов планирования мощности. Хотя этот процесс дорогой и отнимает много времени, но при моделировании реальной работы сервера потребители могут добиться весьма высокой точности. Однако, поскольку большие проекты могут потребовать многомиллионных инвестиций со стороны потребителя или со стороны поставщика, то доступ к системам для проведения таких исследований могут позволить себе, как правило, только самые крупные потребители. Понятно, что нужен метод глубокого, точного предварительного и последующего планирования мощности для мелких и средних систем. Для них, чтобы с 90-процентной точностью выполнить предварительное и последующее планирование мощности, пригодятся некоторые простые расчеты и общие знания об использовании системы.

    Обработка транзакций

    В данном разделе мы изучим, как выполнять анализ тенденций использования сервером базы данных ресурсов процессоров, памяти и дисков. Это нужно, чтобы правильно выбирать систему для нужного приложения. Сервер базы данных выполняет только функции работы с базой данных: при своей работе этот сервер выполняет только транзакции. При исполнении оператора SELECT или UPDATE сервер базы данных интерпретирует данные операторы как последовательности операторов чтения и записи. На самом деле, любая транзакция может быть разбита на чтения и записи в базу данных. На этом атомарном уровне сервер базы данных обрабатывает операции ввода-вывода. Нужно выбрать систему, способную обращаться с транзакциями различных видов и объемов, и с порождаемыми ими операциями ввода-вывода. Основными типами транзакций являются системы оперативной обработки транзакций (OLTP, on-line transaction processing) и системы поддержки принятия решений (DSS, decision support system).

    Транзакции систем оперативной обработки транзакций

    Транзакции систем оперативной обработки транзакций (OLTP) являются компонентами рабочей нагрузки, исполнение которых ожидается за короткие промежутки времени, так как они взаимодействуют с базой данных в режиме реального времени или в режиме "он-лайн". Другими словами, эти транзакции будут непрерывно обновлять базу данных, основываясь на наиболее свежей доступной информации, чтобы следующий пользователь мог бы быть уверен в том, что эта информация является наиболее свежей. Например, в системе ввода заказов вся информация, относящаяся к складскому учету, хранится в таблицах, распределенных по дисковой системе, и база данных может работать в режиме "он-лайн". Доступ к информации в базе данных получает каждый пользователь. Таблицы базы данных, такие как Таблица_изделий или Таблица_складских_запасов, содержат наиболее свежую информацию о разновидностях и об имеющемся количестве продаваемых товаров. Таким образом, когда поступает заказ на некоторое количество какого-либо товара, вы можете произвести доступ к таблицам базы данных, чтобы выяснить, имеется ли этот товар и сколько его осталось на складе, чтобы не продать отсутствующий товар.

    Типичный сценарий предварительного планирования мощности для подобных систем обработки транзакций для сбора специальной информации предусматривает опрос людей. Вы должны провести беседы с проектировщиком базы данных, с разработчиком приложения и с представителем управленческого персонала. Эти люди могут дать начальные и корректирующие сведения о предполагаемом объеме обрабатываемых транзакций и о времени суток, когда предполагается обработка этих транзакций (например, 25 тысяч транзакций должны быть обработаны в течение 8-часового рабочего дня), сведения о количестве одновременно работающих пользователей, о времени пиковой нагрузки (времени суток, когда нагрузка на систему максимальна). Возможно, эти опросы окажутся самой важной частью процесса предварительного планирования мощности.

    Примечание. При проектировании систем оперативной обработки транзакций (OLTP) выбирайте оборудование, обладающее достаточной мощностью, способное выдержать обработку транзакций в период максимальной загруженности. Тогда вы можете не беспокоиться даже при наихудшем развитии событий. Практические советы

    Банкоматы

    Давайте в качестве примера рассмотрим систему с банкоматами. Допустим, национальный банк нанял вас спроектировать систему банкоматов для своего чикагского отделения. В результате опросов вы могли узнать, что пиковая нагрузка на сеть банкоматов приходится на время с 11 часов утра до 2 часов дня – в то самое время, когда большинство людей идут обедать. Зная эту информацию, вы сможете спроектировать свою систему так, чтобы она могла выдержать период пиковой нагрузки.

    Транзакции систем поддержки принятия решений

    Другим типом систем обработки транзакций являются системы поддержки принятия решений (DSS). Транзакции систем поддержки принятия решений возвращают большие объемы информации и требуют для своей обработки гораздо больше времени, чем транзакции OLTP. Для обработки транзакции DSS могут понадобиться часы или даже дни. В качестве примера системы поддержки принятия решений можно привести архив складских запасов, запись в который производится редко, только при его обновлениях. Такие системы обычно снабжают информацией сотрудников-управленцев, чтобы они могли принимать важные решения, например, о развитии бизнеса или о необходимом уровне складских запасов. В качестве другого примера можно привести используемую военно-воздушными силами США систему поддержки принятия решений, информирующую руководящий состав ВВС о текущем состоянии, расположении и вооружении реактивных истребителей, бомбардировщиков и людей.

    Как мы уже говорили, транзакции DSS обычно не завершаются за то же время, что и транзакции OLTP. Транзакции DSS обрабатываются гораздо дольше, потому что они извлекают гораздо больший объем данных. Так как транзакции OLTP извлекают необходимые данные по уникальному ключу (например, по номеру потребителя), то они начинают и завершают запрос с информацией, относящейся только к этому ключу. У транзакций DSS запрос не начинается с уникального ключа, наоборот, он начинает работу от начала таблицы базы данных и продолжает работать, пока не просмотрит все данные в базе данных. Транзакции DSS также включают в себя соединения таблиц, связываясь для получения дополнительной информации с другими таблицами.

    Примечание. При проектировании систем поддержки принятия решений (DSS) применяйте большие блоки данных, чтобы в одну операцию ввода-вывода умещалось побольше записей. Тогда удастся снизить активность ввода-вывода.

    Как знают системные аналитики, в системах этого типа обычно достигается 100-процентное использование центрального процессора и других системных ресурсов, поэтому вопрос состоит не в загрузке системы работой, а в сроках обработки запросов системой. Есть такое практическое правило при проектировании систем DSS: распределяйте, насколько это возможно, систему по имеющемуся оборудованию. Другими словами, вы должны не просто иметь количество дисков, достаточное для того, чтобы база данных помещалась бы на них, а спланировать размещение базы данных по многим томам, чтобы рассеять по ним активность ввода-вывода. Насчет оперативной памяти в этом отношении никакие подобные меры не понадобятся, потому что кэширование к ней почти не применяется. (Для обработки транзакций DSS потребуются полные сканирования таблиц, т.е. просмотр таблиц будет начинаться от их начал и продолжаться пока они не будут полностью обработаны.)

    Практические советы

    Квартальные продажи

    Предположим, что вы составляете квартальный отчет фирмы о продажах. Вам необходимо собрать информацию о продажах товаров в течение этого квартала во всех регионах, в которых осуществлялись продажи. Для получения этих данных нужно сперва соединиться с началом таблицы Регион чтобы получить доступ к первой таблице Покупатель После извлечения имени первого покупателя, будет установлена связь (link) на таблицу Заказы покупателей, чтобы узнать, какие товары были заказаны за нужный период времени. Этот поиск продолжается для второго имени покупателя, затем для третьего, и так далее. После того как все данные для покупателей из этого региона будут просмотрены, надо будет осуществить доступ к таблице Покупатель следующего региона и продолжить этот процесс. Для выполнения этой обработки обычно требуется много времени.

    Принципы планирования мощности

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

    Примечание. Установившимся режимом называют ожидаемую нагрузку на центральный процессор в течение вашего рабочего дня. Если вы предполагаете, что в течение рабочего дня процессор будет использоваться на 55%, то это и есть установившийся режим. Если в этот день был час, в течение которого процессор был загружен на 90%, то этот час называется периодом пиковой нагрузки.

    Если вы знаете максимальное количество транзакций, которые будут выполняться в течение рабочего дня и знаете длительность рабочего дня, то вы сможете подсчитать среднее количество транзакций за единицу времени. Однако, так как вы не знаете истинного темпа, в котором будут поступать транзакции, то предварительное планирование мощности системы надо выполнять с "встроенным" резервом мощности. Та часть мощностей системы, которая оставлена как резерв на периоды повышенной рабочей нагрузки, называется резервная мощность.

    Последующее планирование мощности для системы ввода заказов должно включать в себя непрерывное слежение за главными счетчиками производительности, чтобы регистрировать, что система делала в прошлом и что она делает в настоящее время. Эта информация обычно хранится в базе данных и применяется для общих отчетов о производительности, об использовании мощностей и об имеющейся резервной мощности. Прогнозирование использования ресурсов компьютера можно выполнить исходя из наглядных графиков, электронных таблиц и отчетов об активности транзакций, создаваемых приложением, способным работать с базами данных, таким как, например, Microsoft Excel.

    Использование мощности центрального процессора

    Еще одна причина, по которой надо создавать и поддерживать резерв мощности компьютера, связана с теорией "загиба кривой" (knee of the curve theory). Если объяснять просто, эта теория предсказывает, что загруженность системы работой непосредственно влияет на образование очередей, а так как длина очередей непосредственно связана со временем отклика (фактически, длина очередей является частью формулы для расчета времени отклика), то загруженность системы оказывает непосредственное влияние на время отклика. Загибом кривой называется точка, начиная от которой такие показатели, как время отклика или длительность очередей, переходят от линейного роста к экспоненциальному или асимптотическому (с уходом в бесконечность при приближении нагрузки к некоторому конечному значению) росту.

    Практические советы

    Использование мощности и время отклика на примере супермаркета

    Предположим, вы пришли в супермаркет в 3 часа утра, набрали нужные вам товары и везете их к кассе. В это раннее время очереди в кассу нет никакой вообще, поэтому использование мощности кассира составляет 0% и длина очереди (количество людей перед вами) тоже нулевая. Ваше время отклика будет равно времени обслуживания. Это значит, что время обслуживания (в данном случае – время, необходимое на выполнение транзакций продажи выбранных вами товаров и оплату чека) и составит все время, необходимое для выполнения данной задачи.

    Предположим ту же ситуацию, но в 5 часов вечера, время наибольшей нагрузки на супермаркет. Теперь, когда вы подойдете к кассе, перед вами будут стоять в очереди восемь человек (т.е. длина очереди равна 8). Теперь ваше время отклика будет равно сумме времен отклика каждого из восьми людей перед вами (которые могут варьировать в зависимости от количества покупок, от оплаты банковским чеком или наличными и т.д.) плюс ваше собственное время обслуживания. Использование мощности кассира в 5 часов вечера тоже гораздо больше, чем в 3 часа утра, непосредственным следствием чего и является рост очереди и, следовательно, общее время вашего ожидания (время отклика).

    Сравнение линейного и экспоненциального роста

    Обычно мы стремимся добиться, чтобы система работала в линейном режиме, т.е., чтобы рост очередей был бы линейным. Из рисунка 6-1 видно, что линейный рост является равномерным ростом очередей в зависимости от роста загруженности системы. Согласно одному практическому правилу, рост очередей остается линейным, пока центральный процессор используется не более чем на 75%.

    Впрочем, иногда при установившемся режиме центральный процессор может быть загружен и более чем на 75%. У такой работы имеются некоторые недостатки – в частности, из-за такой высокой загруженности рост длины очередей может стать экспоненциальным. Экспоненциальный рост – это рост в геометрической прогрессии (см. рис. 6.2).

    Примечание.Для примеров в данной лекции длительность обслуживания транзакции принята равной 0,52 секунды и считается, что у всех транзакций длительность обслуживания одинакова. (рис 6.2) Линейная зависимость от загруженности центрального процессора (рис 6.1) Экспоненциальный рост в зависимости от загруженности центрального процессора

    Обратите внимание, что при загруженности центрального процессора, превышающей 75%, кривая зависимости длины очередей переходит от линейного роста к экспоненциальному (т.е. кривая превращается почти в вертикальную линию).

    Время отклика

    График на рис 6.3 показывает, как использование мощностей центрального процессора влияет на время отклика. Обратите внимание на то, как похожи графики времени отклика и длины очереди. Наличие на обоих графиках точек загиба, после которых происходит резкое увеличение времени отклика, показывает, что никогда не следует применять установившийся режим с загруженностью центрального процессора более 75%. Это не значит, что процессор никогда не будет работать с загруженностью более 75%, но чем дольше это будет происходить, тем больше негативных последствий вызовет (в отношении длины очередей и длительности отклика).

    (рис 6.3) Зависимость времени отклика от загруженности центрального процессора

    Недопущение выхода за точку загиба кривой (в нашем примере – 75% мощности процессора) является одним из наиболее важных принципов предварительного планирования мощности, и его нужно соблюдать при определении количества центральных процессоров, нужных для вашей системы. Например, допустим, при предварительном планировании мощности системы, вы оценили, что потребность в ресурсе процессора составит 180% от мощности процессора. Вы можете мучиться из-за очень плохой производительности, а можете запустить два процессора с 90% загруженностью их мощности (на 15% выше точки загиба кривой). Но еще лучше было бы запустить три процессора, загрузив их на 60% мощности, тогда их загруженность будет на 15% ниже точки загиба кривой.

    Этот же принцип применяется и к другим элементам системы, например, к дискам. У графиков для дисков точка загиба расположена не так, как у графиков для процессоров, она находится где-то при 85% загруженности их мощности. Эта пороговая величина (85%) относится и к вместимости, и к производительности ввода-вывода дисковых накопителей. Например, 9 Гб диски не должны содержать более 7,65 Гб данных, хранящихся на нем одновременно. Это ограничение на объем хранимых данных может послужить как резерв для роста, но оно более важно для сокращения времени отклика, потому что время поиска для дисков, заполненных полностью, становится больше, увеличивая тем самым суммарное время отклика. В соответствии с этим же правилом, если дисковый накопитель имеет производительность обмена данными 70 операций ввода-вывода в секунду, то его не следует применять в условиях, когда темп ввода-вывода постоянно превышает 60 операций ввода-вывода в секунду (при установившемся режиме работы). Следуя этим правилам, вы сможете минимизировать суммарное время отклика и получить наибольшую производительность своей системы, так как ваши процессоры и диски используются не с полной загруженностью. Кроме того, ваша система сохранит резервы мощности, которые пригодятся при работе в периоды пиковых нагрузок.

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

    Обращения к отсутствующим страницам виртуальной памяти

    Для процессора и дисков надо не допускать превышения их загруженности выше точки загиба, это важный принцип предварительного планирования мощности. А что можно сказать о памяти? Для предварительного планирования памяти нужно рассмотреть обращения к отсутствующим страницам виртуальной памяти (page faulting). Обращения к отсутствующим страницам – это нормальное явление при обычном функционировании системы, оно применяется для доступа к данным на диске. Если системе потребуется что-нибудь из памяти (страница с кодом программы или с данными) и будет иметься нужная страница памяти, то произойдет логическое событие ввода-вывода, означающее, что код или данные считываются из памяти, и транзакция, которой понадобился этот программный код или данные, будет обработана.

    А что произойдет, если нужного кода или страницы с данными не окажется в памяти? В этом случае придется выполнить физический ввод-вывод и прочитать нужную страницу с диска. Эта задача выполняется при помощи обращения к отсутствующей странице. Система, если в ее рабочем наборе оперативной памяти не найдется нужная страница с кодом программы или с данными, выдаст прерывание обращения к отсутствующей странице (page fault interrupt). Обработка обращения к отсутствующей странице прикажет другой части системы доставить программный код или данные с физического диска. Другими словами, если нужная вашей системе страница с кодом или данными отсутствует в памяти, то система выполнит обращение к отсутствующей странице, которое прикажет другой части системы выполнить физическую операцию ввода-вывода и доставить нужную страницу с диска. Обращение к отсутствующей странице не повлечет доставку нужной страницы с диска, если эта страница находится в списке резерва (standby list) и, следовательно, уже находится в оперативной памяти, или если она находится в пользовании у другого процесса, с которым она может совместно использоваться (разделяться).

    Существует два типа ввода-вывода: пользовательский и системный. Пользовательский физический ввод-вывод происходит, когда пользовательская транзакция просит прочитать данные, которые нашлись в памяти. Происходит простая передача данных с диска в память. Такая передача данных обычно выполняется какой-либо программой для управления потоком данных (data flow manager), дополненной функциональными возможностями контроллера дисков. Системный физический ввод-вывод происходит, когда система запрашивает страницу с программным кодом, нужным для выполняемого ею процесса, а этой страницы нет в памяти. Тогда система выдает прерывание обращения к отсутствующей странице, препятствующее продолжению работы до тех пор, пока с диска не будет доставлена нужная страница. После доставки этой страницы обработка будет продолжена. Обе эти разновидности физического ввода-вывода удлиняют время отклика, потому что время, необходимое на доставку данных из оперативной памяти, занимает микросекунды (миллионные доли секунды), а физический ввод-вывод занимает миллисекунды (тысячные доли секунды). Так как обращения к отсутствующим страницам вызывают физический ввод-вывод, который увеличивает длительность времени отклика, то при минимизации обращений к отсутствующим страницам будет достигаться лучшая производительность системы.

    В вашей системе могут возникать три типа обращений к отсутствующим страницам:

    Обращения операционной системы к отсутствующим страницам. Если система исполняет программный код операционной системы и следующий адрес из этого кода отсутствует в памяти, то система выдаст прерывание обращения операционной системы к отсутствующей странице, чтобы доставить с диска программный код для адреса. При обращении к отсутствующему адресу, программный код доставляется с диска в память, для чего потребуется выполнить одну физическую операцию ввода-вывода.

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

    Страничный обмен. При внесении изменений в страницу данных (в результате чего она становится "недействительной" (dirty page, "черновой" страницей)), производится двухэтапный обмен страниц (page fault swap), при котором система не только доставляет новые данные с диска, но и записывает измененные данные из памяти на диск. Для выполнения этого двухэтапного обращения к отсутствующей странице потребуется две физических операции ввода-вывода, но это гарантирует сохранение всех измененных данных. Если обмен страниц будет происходить слишком часто, то он может стать единственным наиболее значительным фактором, ухудшающим длительность времени отклика. Помните, что при обмене страниц происходит передача данных целиком всей страницы, даже если на самом деле нужно передать лишь несколько байтов. Обмены страниц, вызванные обращениями к отсутствующим страницам, требуют больше времени, чем просто обращения к отсутствующим страницам, потому что для них требуется по два физических ввода-вывода. Поэтому вы в своей системе должны стараться минимизировать количество обменов из-за обращений к отсутствующим страницам.

    Когда вы для новой системы оцениваете ее минимальную потребность в оперативной памяти, всегда пытайтесь предугадать общий объем памяти, необходимой для обработки рабочей нагрузки, для чего следует обратиться к спецификациям с требованиями к памяти всех процессов, которые будут работать на вашей системе (включая операционную систему и программы управления базой данных). И не забывайте про обращения к отсутствующим страницам. Для работы с памятью системы нужно собирать информацию о происходящих обращениях к отсутствующим страницам и хранить эту информацию в качестве составной части базы данных о производительности. Чтобы определить, когда понадобится добавить в систему дополнительную память, следует применить упреждающий анализ. На случай пиковых нагрузок следует сохранять достаточно большой объем резервной памяти. При планировании системы постарайтесь предусмотреть резерв памяти, составляющий от 5 до 10 процентов от памяти, необходимой для работы процессов.

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

    Планирование мощности памяти

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

    Сервер базы данных обрабатывает запросы от пользователей и доставляет информацию, необходимую для выполнения транзакций. Чтобы спланировать оперативную память сервера базы данных, вы должны знать число пользователей, одновременно соединяющихся с системой, и количество транзакций ввода-вывода, возникающих из-за этих пользователей. Этот ввод-вывод имеет форму операций чтения и записи. Беседа с проектировщиком приложения нужна, чтобы получить информацию о различных транзакциях и о генерируемых ими операциях ввода-вывода.

    Рассчитывая объем памяти, нужной для вашей системы, вы также должны учесть такие характеристики, как желательную частоту удачных обращений к кэшу и обращений к отсутствующим страницам. Рассмотрим типичный сценарий: вы участвуете в проектировании системы для сервера базы данных, которая будет применяться для заказов в режиме реального времени, и вам надо знать количество одновременно работающих пользователей, из-за которых возникает рабочая нагрузка. Эта информация поможет вам определиться с необходимым вам объемом оперативной памяти. Например, вы знаете, что в каждый момент времени с системой будут одновременно работать 50 пользователей. Для такой системы вам потребуется 25 Мб памяти только для пользователей.

    Примечание. Обычно для каждого из пользователей требуется выделять по 500 Кб памяти, потому что эта память необходима для теневого процесса (shadow process) пользователя. Теневой процесс – это пользовательский процесс, который имеется для каждого из пользователей системы.

    Затем вам надо знать, какую операционную систему вы будете применять. В нашем случае эта операционная система – Microsoft Windows 2000, для которой нужно 20 Мб памяти. Поэтому теперь вам понадобится уже 45 Мб памяти. Вам также надо будет узнать размер программы базы данных, которая будет у вас работать, в нашем случае – Microsoft SQL Server, для которого нужно 5,5 Мб памяти. Итого теперь требуется 50,5 Мб памяти.

    И последняя информация, которая вам понадобится, – размер области памяти для обработки базы данных. Эта область состоит из двух элементов: области журнала и кэша базы данных. Область журнала содержит информацию о выполняющихся действиях записи. Эта область очень важна, потому что в случае сбоя системы во время исполнения транзакции в ней сохранится информация для восстановления образа данных перед транзакцией, т.е. образа базы данных, бывшего до того, как произошел сбой. Область журнала имеет также названия "аудиторский след", "контрольный журнал" (audit trail).

    Кэш базы данных представляет собой специальную область вашей системы. Через нее передаются все данные, обрабатываемые вашей системой. Чем кэш крупнее, тем больше будет процент успешных обращений к нему (попаданий в кэш). Процент успешных обращений к кэшу – это вероятность, с которой ваша система находит нужные данные в оперативной памяти; очевидно, что вы хотели бы иметь максимально большой процент попаданий в кэш. Обращения к данным, отсутствующим в кэше, похожи на обращения к отсутствующим страницам памяти тем, что нужная информация должна быть доставлена системой и помещена в память кэша. Поэтому, если область кэша окажется слишком маленькой, то будет происходить физический ввод-вывод, потому что системе придется обращаться к диску и доставлять данные, отсутствующие в кэше. Этот физический ввод-вывод, несомненно, увеличит время отклика для транзакций.

    Для расчета размера кэша воспользуйтесь следующей формулой:

    размер кэша  =  (размер блока кэша) х (количество блоков в кэше)

    Размер блока кэша – это объем данных, передаваемых при одной операции ввода-вывода. Помните, что в SQL Server уже задан стандартный размер блока кэша, равный 8 КБ. Количество блоков в кэше – это просто выбираемый вами размер кэша (в блоках). Для систем оперативной обработки транзакций (OLTP) размер блока следует выбирать поменьше, потому что объем передаваемых данных – небольшой, а чем меньше объем передаваемых данных, тем меньше будет и время, необходимое для исполнения транзакции. В системах поддержки принятия решений (DSS) размер блока должен быть гораздо больше, потому что объем передаваемых данных будет гораздо больше, из-за чего уменьшится количество операций ввода-вывода.

    Примечание. Никакая настройка размера кэша не может гарантировать успешность обращений к кэшу от 90% и выше. Есть хорошее практическое правило, согласно которому для малых систем надо иметь кэш размером около 25 Мб, для систем среднего размера – 70 Мб, а для больших систем – 215 Мб. Для систем с очень большими базами данных (около 300 Гб) для получения желаемого процента попадания в кэш понадобится кэш объемом около 3 Гб.

    Теперь, пользуясь собранной информацией, мы можем вычислить минимальный необходимый объем памяти. Для расчета минимального объема памяти, необходимого для вашей системы, обычно пользуются следующей формулой:

    минимальная память = (системная память) + (пользовательская память) + 
      +(память процесса базы данных)

    Здесь системная память – это объем памяти, необходимой для операционной системы и SQL Server, пользовательская память – это по 500 Кб памяти, выделяемых каждому из одновременно работающих пользователей, а память процесса базы данных – это память, необходимая для журнала и кэша.

    Эта простая формула может применяться для расчета минимального необходимого объема памяти, нужного для нормальной работы как приложений оперативной обработки транзакций (OLTP), так и для систем поддержки принятия решений (DSS). Для систем DSS нужно выбирать более крупные размеры блоков кэша, потому что приложения DSS выполняют полное сканирование таблиц в режиме последовательного чтения. Увеличив размер блока, можно увеличить количество записей, считываемых за одну физическую операцию ввода-вывода. Для систем DSS кэш не используется, потому что все операции ввода-вывода будут физическими.

    Для приложений оперативной обработки транзакций (OLTP) после инсталляции системы вы должны следить за процентом удачных обращений к кэшу. Высокий процент удачных обращений к кэшу поможет вам добиться наилучшего времени отклика и производительности для своей системы.

    Примечание. Следует стремиться приблизить успешность попаданий в кэш к 100%, насколько это возможно (и этот показатель не должен быть меньше 90%).

    Сбор данных об использовании памяти

    После того как система, для которой производилось предварительное планирование, будет сконфигурирована и настроена, вам надо будет методично собирать данные об использовании ее памяти. Эти данные можно использовать для проверки соответствия созданной вами системы требованиям соглашения об уровне обслуживания, таким как время отклика или загруженность памяти и центрального процессора. Данные можно собрать при помощи просто Microsoft Performance Monitor (Монитора производительности) для среды Microsoft Windows NT.

    Примечание. В Microsoft Windows 2000 "монитор производительности" называется не Performance Monitor, а System Monitor.

    Помните, что данное исследование является анализом для планирования производительности и поэтому должно производиться достаточно долго. Измерения будут длиться часами (в большинстве случаев – 24 часа), и интервал измерений тоже должен быть установлен равным 24 часам. Для задач планирования производительности нужно заносить в базы данных о производительности по одной записи в сутки. Критерии производительности, называющиеся счетчики (counters), выбираемые вами для мониторинга, будут усредняться по интервалам измерений. Счетчики для планирования мощности памяти, находятся в объекте Memory (в "мониторе производительности" объектом называется набор счетчиков).

    Примечание. Чтобы запустить Performance Monitor (Монитор производительности) нажмите сначала мышью на экранную кнопку Start. Затем выберите Programs, Administrative Tools (Common) и Performance Monitor. В окне Performance Monitor в меню Edit выберите Add To Chart (Добавить к схеме). Диалоговое окно Add To Chart может применяться для выбора объектов и счетчиков, которые нужно отслеживать. Для получения дополнительной информации нажмите на кнопку Help в окне Performance Monitor.

    Среди счетчиков монитора производительности имеются следующие:

  • Page Faults/sec. В этом счетчике содержится среднее количество обращений к отсутствующим страницам за одну секунду. Помните, что обращения к отсутствующим страницам происходят, когда вы запрашиваете страницу с программным кодом или с данными, отсутствующую в рабочей или в резервной (standby) памяти.
  • Cache Faults/sec. В этом счетчике содержится среднее количество неуспешных обращений к кэшу, происходящих в системе за одну секунду. Помните, что неуспешные обращения к кэшу происходят всякий раз, когда Cache Manager не находит страницу файла непосредственно в кэше.
  • Pages/sec. В этом счетчике содержится среднее количество страниц, прочитанных с диска или записанных на диск системой за одну секунду. Этот счетчик является суммой двух других счетчиков – Pages Input/sec и Pages Output/sec. В нем содержится информация о трафике обращений к страницам, выполняемым в интересах доступа кэша системы к данным файлов для приложений и чтения/записи страниц в/из файлов памяти, не имеющимся в кэше. Пользуйтесь этим счетчиком, если вас беспокоит чрезмерная нагрузка на память (это явление называется пробуксовка, thrashing), что может привести к чрезмерной подкачке страниц.
  • Available Memory. Этот счетчик содержит информацию об объеме неиспользуемой памяти, оставшейся в системе. Эта память может использоваться как дополнительная память для базы данных или для системных нужд. Available Memory является наиболее важным счетчиком, применяемым для планирования памяти.
  • Примечание. Счетчик Available Memory можно просматривать в окне монитора производительности Performance Monitor в составе объекта Memory. Кроме того, в мониторе производительности Windows 2000 Server этот счетчик представлен трижды: Available Bytes, Available Kbytes, Available Mbytes. Также он доступен из Task Manager’а (Диспетчер задач), если открыть вкладку Performance и наблюдать за доступной памятью в течение периода пиковой нагрузки. (Чтобы получить доступ к Task Manager, нажмите правой кнопкой мышки на панель задач и выберите Task Manager в контекстном меню.)

    Вам следует хотя бы включить в общий процесс сбора данных для планирования мощности, наблюдение за счетчиками Available Memory и Page Faults/sec.

    Анализ данных о памяти

    После сбора данных их можно отобразить в графической форме, чтобы предсказать, какими они станут в будущем. График на рисунке 6-4 показывает пример упреждающего анализа. В этом примере показаны данные о свободной памяти, собранные с 22 октября 1999 года по 14 января 2000 года. При помощи Microsoft Excel эти данные были нанесены на график и построена линия тренда. Зубчатая линия обозначает историю фактического использования памяти, а прямая линия обозначает линейный тренд использования памяти. Как видите, этот анализ предсказывает, что 18 февраля 2000 года у системы останется менее 6% свободной памяти.

    График на рис. 6.5 показывает увеличение обращений к отсутствующим страницам виртуальной памяти за тот же период, а также демонстрирует, что по мере уменьшения объема свободной памяти число обращений к отсутствующим страницам увеличивается.

    (рис 6.5) Объем свободной памяти (линейная закономерность)(рис 6.4) Обращения к отсутствующим страницам (линейная закономерность)

    Обратите внимание на то, что данные о количестве обращений к отсутствующим страницам виртуальной памяти за секунду собирались за тот же период времени, что и данные о свободной памяти. Снова воспользуемся Microsoft Excel, чтобы записать эти данные и отобразить их на графике. Зубчатая линия снова обозначает историю фактического изменения показателя, а прямая линия обозначает линейный тренд этого показателя. В нашем случае график предсказывает, что 18 февраля 2000 года у системы будет происходить более шести обращений к отсутствующим страницам в секунду. Значит, и после этой даты число обращений будет увеличиваться и это может привести к нарушению соглашения об уровне обслуживания. Рассмотренный метод упреждающего анализа является простым и эффективным способом слежения за ресурсами памяти.

    Планирование мощности процессора

    Теперь, когда мы выполнили предварительное планирование и анализ для памяти, пора выполнить такие же работы и для процессора. К настоящему моменту мы можем принять следующие предположения о работе нашей системы:

  • Проектирование приложения и схемы базы данных завершены.
  • При целевом установившемся режиме мощность центрального процессора будет использоваться не более чем на 75%.
  • Ожидаемый процент удачных обращений к кэшу должен составлять не менее 90%.
  • Ни один из дисковых накопителей не используется более чем на 85% как по объему занятого места, так и по производительности ввода-вывода.
  • Сервер обслуживает только базу данных.
  • Операции ввода-вывода распределены по всем дисковым накопителям.
  • Мы воспользовались этими допущениями и пороговыми величинами при предварительном планировании памяти, но для упреждающего анализа использования мощности центрального процессора нам нужна дополнительная информация, которую надо получить у проектировщика базы данных и у проектировщика приложения.

    Упреждающий анализ использования мощности центрального процессора вовсе не так сложен, как вы могли бы предположить. Помните, что сервер базы данных занимается только лишь обработкой транзакций. Приложение работает на компьютере-клиенте, поэтому данные для предварительного планирования его мощности не входят в формулу для расчета мощности процессора. Сервер будет обрабатывать запросы от пользователей в форме операций ввода/вывода. Проектировщик приложений может предоставить нужную информацию о природе транзакций. Проектировщик баз данных может дать информацию о таблицах и индексах, подвергающихся воздействию транзакций. Поэтому первой задачей должно стать определение количества операций ввода-вывода, генерируемых транзакциями и длительности времени, за которое они должны быть завершены. Нам надо знать, какое количество транзакций должно быть обработано системой и знать границы рабочего дня (часы работы системы) или границы периода пиковых нагрузок.

    Как вы уже поняли, всегда предпочтительным является предварительное планирование для периода пиковых нагрузок, потому что оно соответствует наихудшему сценарию развития событий, а мы могли бы создать такую систему, которая выдержала бы это. К сожалению, в большинстве случаев, необходимая для этого информация недоступна, поэтому остается довольствоваться информацией, полученной для установившегося режима. Чтобы получить более глубокое понимание обрабатываемых транзакций, мы должны разобраться во внутреннем устройстве ("анатомии") транзакций, в их "профиле", что поможет нам подсчитать количества генерируемых чтений и записей, благодаря чему мы сможем спрогнозировать ожидаемую нагрузку на центральный процессор. Эту информацию можно получить из бесед с проектировщиками базы данных и проектировщиками приложений. Сначала надо узнать, сколько транзакций каждого типа будут проходить через систему, а затем надо определить количество генерируемых операций чтения и записи. Так будет рассчитана оценка нагрузки на центральный процессор.

    Для уже работающих систем пользователи могут определить профили транзакций, запуская транзакции по одной за раз и следя за ними через Performance Monitor (чтобы определить количество генерируемых операций чтения и записи). Эта "натурная" информация может применяться для подбора скорости, типа и количества используемых центральных процессоров.

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

    Отказоустойчивость

    Сейчас большинство компьютерных фирм добиваются отказоустойчивости при помощи поддержки технологии RAID (Redundant Array of Independent Disks, "массивы независимых дисковых накопителей с избыточностью"). (О технологии RAID см. лекцию 5.) Запомните, что чаще всего применяются следующие уровни RAID:

  • RAID 0. Дисковые накопители без дублирования.
  • RAID 1. Зеркальное дублирование дискового накопителя.
  • RAID 5. Несколько дисковых накопителей с расслоением данных.
  • Так как в RAID 0 не применяется дублирование данных, то для них достаточно одиночного повреждения – при отказе дискового накопителя вы потеряете данные на нем и, следовательно, во всей базе данных. Схема массива RAID 0 показана на рис. 5.9. В RAID 1 обеспечивается зеркальное дублирование диска базы данных. При отказе какого-либо дискового накопителя остается резервный накопитель, весь заполненный данными, такими же, какие были и на отказавшем дисковом накопителе. Если вы решите применять массивы RAID 1, то можно воспользоваться достоинствами параллельного поиска (split seek, см. лекцию 5), благодаря которому система может выполнять поиск данных одновременно сразу на двух дисковых накопителях, что значительно повышает скорость поиска и, следовательно, уменьшает время отклика для транзакций. Схема массива RAID 1 показана на рис. 5.10.

    Выбор уровня RAID непосредственно влияет на количество операций дискового ввода-вывода, т.к. разные уровни RAID отличаются количеством записей на диски. Например, для RAID 1 по сравнению с RAID 0 требуется в два раза больше записей на диск. Если пользователь задаст транзакцию, требующую 50 чтений и 10 записей, то при использовании RAID 1 количество записей вырастет до 20.

    Если конфигурация RAID 0 имеет два дисковых накопителя, то равноценная конфигурация RAID 5 должна иметь три дисковых накопителя. В конфигурациях RAID 5 применяется слой данных (stripe), содержащий информацию о данных на двух других накопителях, который может быть использован для восстановления данных с отказавшего диска. Схема массива RAID 5 показана на рис. 5.11. Эта схема защиты базы данных хороша и по показателям производительности и по цене. Каждая запись в RAID 5 удваивает количество чтений и количество записей для каждой обрабатываемой транзакции, потому что каждая транзакция должна быть записана на два диска – должен быть прочитан слой контроля по четности, изменен в соответствии с новыми данными, а затем снова записан. Эта избыточность несколько увеличивает длительность времени отклика.

    Чтобы рассчитать количество операций ввода-вывода для различных уровней RAID, можно воспользоваться следующими формулами:

    Для RAID 0:

    количество операций ввода-вывода = (количество чтений на одну транзакцию) + 
    +(количество записей на одну транзакцию)

    Если транзакция содержит 50 чтений и 10 записей, то общее количество операций ввода-вывода для уровня RAID 0 будет равно 60.

    Для RAID 1:

    количество операций ввода-вывода = 
    (количество чтений на одну транзакцию) + 
    (2 х [количество записей на одну транзакцию])

    Если транзакция содержит 50 чтений и 10 записей, то общее количество операций ввода-вывода для уровня RAID 1 будет равно 70.

    Для RAID 5:

    количество операций ввода-вывода = 
    3 х (количество операций ввода-вывода на одну транзакцию)

    Если транзакция содержит 50 чтений и 10 записей, то общее количество чтений будет равно 150, а общее количество записей будет равно 30. Общее количество операций ввода-вывода для уровней RAID 5 будет равно 180.

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

    Рассчитав общее количество чтений и записей, соответствующих пользовательским транзакциям и добавив операции ввода-вывода, необходимые для работы выбранного вами уровня RAID, вы получите всю информацию, необходимую для расчета нагрузки на центральный процессор. Для определения загруженности центрального процессора применяется следующая формула:

    загруженность центрального процессора = 
    (темп ввода-вывода) х (время обслуживания) х 100

    В этой формуле темп обозначает количество операций ввода-вывода, которые должны быть обработаны за одну секунду, а время обслуживания обозначает длительность времени, необходимого для обработки типичной транзакции ввода-вывода. Эта формула просто утверждает, что загруженность равна общему количеству операций ввода-вывода, выполняемых системой за одну секунду, умноженному на время, необходимое для выполнения каждой задачи, и умноженному на 100 (чтобы загруженность выражалась в процентах).

    Для определения количества центральных процессоров, требующихся системе, нужно выполнить следующие расчеты для каждой транзакции, обрабатываемой в качестве рабочей нагрузки:

  • Рассчитайте общее количество операций чтения, которые будут выполняться в системе, при помощи следующей формулы:
    общее количество чтений = 
    (количество чтений на одну транзакцию) х (общее количество транзакций)
  • Определите, сколько из этих операций чтения будут физическими операциями ввода-вывода, а сколько – логическими операциями ввода-вывода, пользуясь следующими формулами:
    общее количество логических чтений = 
    (общее количество чтений) х (процент успешных обращений к кэшу)
    
    общее количество физических чтений = 
    (общее количество чтений) – 
    -(общее количество логических чтений)
  • Преобразуйте общие количества каждой из разновидностей операций чтения в количество чтений в секунду при помощи следующих формул:
    количество логических чтений в секунду = 
     (общее количество логических чтений) / (рабочий период)
     
    количество физических чтений в секунду = 
     (общее количество физических чтений) / (рабочий период)
    Здесь рабочий период обозначает длительность времени (в секундах), в течение которого должна быть выполнена работа.
  • Рассчитайте объем времени работы центрального процессора, истраченный на каждую из разновидностей операций чтения при помощи следующих формул:
    время для выполнения логических чтений = 
    (количество логических чтений в секунду) х 
    (длительность операции логического чтения)
    
    время для выполнения физических чтений = 
    (количество физических чтений в секунду) х 
    (длительность операции физического чтения)
    Здесь длительность операции логического чтения обозначает время, необходимое для обработки одного логического чтения, а длительность операции физического чтения – время, необходимое для обработки одного физического чтения. Эти длительности операций чтения можно узнать при помощи Performance Monitor (см. врезку "Как узнать длительность операций чтения" после данного перечня инструкций по расчету.)Примечание.Длительность операций чтения обычно составляет 0.002 секунды для физического чтения и 0.001 секунды для логического чтения.
  • Рассчитайте загруженность центральных процессоров для различных видов операций чтения при помощи следующей формулы:
    загруженность = (темп чтения) х (время обслуживания) х 100
    Можно рассмотреть отдельно загруженность логическими или физическими операциями чтения, применив следующие формулы:
    загруженность операциями логического чтения = 
    (количество логических чтений в секунду) х 
    (длительность операции логического чтения) 
    
    загруженность операциями физического чтения = 
    (количество физических чтений в секунду) х 
    (длительность операции физического чтения)
    Эта информация полезна, когда надо определить, а не слишком ли много нагрузки вызвано операциями физического чтения. Если это так, то можно настроить размер кэша, чтобы сдвинуть равновесие в сторону операций логического чтения.
  • Рассчитайте общее количество операций записи, которые будут выполняться в системе, при помощи следующей формулы:
    общее количество записей = (количество записей на одну транзакцию) х 
    (общее количество транзакций) х (множитель RAID)
    Здесь множитель RAID обозначает общее количество операций записи, выполняемых рабочей нагрузкой за период обработки.
  • Определите, сколько операций записи в секунду будут проходить через систему, пользуясь следующей формулой:
    количество записей в секунду = (общее количество записей) / 
    (рабочий период)
    Здесь рабочий период по-прежнему обозначает длительность времени (в секундах), в течение которого должна быть выполнена работа.
  • Рассчитайте суммарное время работы центрального процессора, истраченное на обработку операций записи, пользуясь следующей формулой:
    время центральных процессоров для выполнения записей = 
    (количество записей в секунду) х 
    (длительность обработки центральным процессором одной операции записи)
  • Рассчитайте загруженность операциями записи, пользуясь следующей формулой:
    загруженность операциями записи = (количество записей в секунду) х 
    (длительность обработки центральным процессором одной операции записи) х 100
  • Рассчитайте суммарную загруженность центральных процессоров для каждого из типов транзакций, пользуясь следующей формулой:
    загруженность центральных процессоров  = 
    ((загруженность операциями логического чтения) + 
    (загруженность операциями физического чтения) +
    (загруженность операциями записи)) х 100
    Этот расчет должен быть выполнен для каждого типа транзакций, допустимых в вашей системе. Например, если ваша система – банковская, то в ней должны иметься транзакции для снятия денег со счетов, для помещения денег на счета и справки о состоянии баланса. Для точного предварительного планирования мощности центральных процессоров в вашей системе вычисления о нагрузке должны быть выполнены раздельно для каждого из этих трех типов транзакций.
  • И наконец, рассчитайте суммарную загруженность центральных процессоров, пользуясь следующей формулой:
    суммарная загруженность центральных процессоров = 
    сумма загруженностей для всех отдельных видов транзакций
    Если суммарная загруженность центральных процессоров превысит 75-процентный порог, то вам следует установить в свою систему дополнительные центральные процессоры, которые уменьшат суммарную загруженность на один процессор в соответствии со следующей формулой:
    суммарная загруженность на один процессор  = 
    (суммарная загруженность центральных процессоров) / 
    (количество центральных процессоров)
    Добавьте столько центральных процессоров, чтобы суммарная загруженность на один процессор снизилась ниже 75%. Например, если суммарная загруженность центральных процессоров окажется равной 180%, то нужно применять три центральных процессора. В результате для трехпроцессорной системы суммарная загруженность на один процессор будет равна 60%.
  • Примечание.Вы, наверное, удивлены, почему ни в одной из наших формул не присутствует скорость работы процессоров. На самом деле, она входит в формулы, но в неявном виде. Скорость процессоров учтена во времени обслуживания – длительности времени, необходимого для обработки транзакции.

    Как узнать длительность операций чтения

    Длительность операций чтения в вашей системе можно определить при помощи утилиты Performance Monitor. Включите Diskperf при помощи следующей команды, вводимой в окне MS-DOS:

    diskperf -y

    Затем запустите Performance Monitor и наблюдайте в объекте Physical Disk за счетчиками Avg. Disk sec/Read и Avg. Disk sec/Write. Обратите внимание, что эти счетчики дают вам среднее время для операций физического чтения. Для определения длительности логического чтения операций эти счетчики неприменимы.

    Сбор данных о загруженности одного центрального процессора

    После того как ваша система будет реализована, потребуется тщательно следить за загруженностью центрального процессора, так же, как и за памятью. В Performance Monitor имеется множество счетчиков, связанных с измерением загруженности отдельных центральных процессоров. Эти счетчики находятся в объекте Processor. Для задач предварительного планирования мощности наиболее полезны следующие счетчики:

  • % Processor Time. Процент истекшего времени, в течение которого процессор был занят, исполняя команды. Команда (instruction) – это минимальная единица работы, исполняемой компьютером, поток (thread) – это объект, который выполняет команды, а процесс (process) – это объект, создаваемый при запуске программы. Счетчик % Processor Time можно рассматривать как долю времени, расходуемого на выполнение полезной работы.
  • % Privileged Time. Процент времени, в течение которого процессор работал в привилегированном режиме (Privileged mode). В привилегированном режиме исполняются уровень обслуживания Windows NT (service layer), программы Executive и ядро Windows NT. Драйверы большинства устройств (кроме графических адаптеров и принтеров) также исполняются в привилегированном режиме.
  • % User Time. Процент времени, в течение которого процессор работал в пользовательском режиме (User mode). В пользовательском режиме также исполняются графические алгоритмы, драйверы графических устройств, драйверы принтеров и Window Manager. Программы, исполняемые в пользовательском режиме, не могут повредить целостность Windows NT Executive, ядра и драйверов устройств.
  • % Interrupt Time. Процент времени, затраченного процессором на обработку аппаратных прерываний. Прерывания выполняются в привилегированном режиме, поэтому время, затраченное на их обработку, входит в состав показателя % Privileged Time. Этот счетчик помогает выяснить причину чрезмерно большого времени работы в привилегированном режиме.
  • Interrupts/sec. Этот счетчик содержит среднее количество прерываний устройств, поступающих к процессору за одну секунду. Устройства прерывают работу процессора в случаях, когда они завершили выполнение задачи или когда требуются вмешательство процессора по какой-либо другой причине. Прерывания могут генерировать такие устройства, как системный таймер, мышь, канал обмена данными, сетевая интерфейсная плата, а также другие периферийные устройства. Во время прерываний нормальное исполнение потока приостанавливается, и в результате прерывания процессор может переключиться на исполнение другого потока, с более высоким приоритетом. Прерывания от таймера происходят часто и периодически и образуют фон активности прерываний.
  • Для предварительного планирования мощности могут понадобиться не все эти показатели; выбор применяемых показателей зависит от глубины проводимого вами исследования. По крайней мере, следует использовать счетчик % Processor Time.

    Сбор данных о загруженности нескольких центральных процессоров

    При помощи Performance Monitor вы можете также получить усредненные данные для нескольких центральных процессоров. Для этого воспользуйтесь объектом System, содержащим, среди прочих, следующие счетчики:

  • % Total Processor Time. Сумма показателей % Processor Time всех процессоров, деленная на количество процессоров в системе.
  • % Total Privileged Time. Сумма показателей % Privileged Time всех процессоров, деленная на количество процессоров в системе.
  • % Total User Time. Сумма показателей % User Time всех процессоров, деленная на количество процессоров в системе.
  • % Total Interrupt Time. Сумма показателей % Interrupt Time всех процессоров, деленная на количество процессоров в системе.
  • Total Interrupts/sec. Среднее количество прерываний устройств, поступающих к процессорам за одну секунду. Этот счетчик служит признаком загруженности системных устройств в масштабах всего компьютера.
  • Анализ данных о загруженности центральных процессоров

    Информация, собранная при помощи счетчиков Performance Monitor, может применяться для прогнозирования увеличения нагрузки на отдельные центральные процессоры, следствием которого станет увеличение времени отклика для этого процессора. На рис. 6.6 показан график загруженности центрального процессора (значения загруженности для разных дат). Обратите внимание, что тренд загруженности центрального процессора растет и достигнет 75% порога 18 февраля 2000 года.

    (рис 6.6) Линейный прогноз загруженности центрального процессораПримечание. Чем больше точек с данными вы соберете, тем точнее будет ваш прогноз.

    Планирование мощности дисковой подсистемы

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

    Многие люди бывают удивлены количеством дисковых накопителей, необходимых для их баз данных. Но дополнительные накопители дают дополнительные точки доступа к данным. Если вы имеете только одну точку доступа к данным, то вы создаете узкое место ("бутылочное горлышко"). Так как через это узкое место придется проходить всем транзакциям, то длительность откликов будет увеличиваться. Есть такое практическое правило – имейте как можно больше точек доступа к данным. Чем больше точек доступа к данным будет у вас, тем меньше станет вероятность возникновения узкого места из-за недостаточного количества дисковых накопителей. Кроме того, вы сможете генерировать больше операций ввода-вывода в секунду – чтобы система могла выдерживать большой поток операций ввода-вывода, необходимый для больших баз данных.

    Предположим, ваша система управляет базой данных объемом 10 Гб и в ней генерируется 140 операций ввода-вывода в секунду. Из правила 85% об объеме дисковой памяти следует, что вам понадобится дисковый накопитель объемом примерно в 12 Гб, чтобы его хватило для хранения базы данных. Теперь взглянем на требования к дисковым накопителям с точки зрения производительности ввода-вывода. Если дисковые накопители имеют производительность ввода-вывода 70 операций в секунду, то с учетом правила 85% для производительности каждого из накопителей вам потребуются три накопителя. Поэтому, так как анализ производительности ввода-вывода требует применения трех накопителей (максимально), мы должны применять три дисковых накопителя, суммарный объем которых составит 12 Гб, а производительность каждого будет 70 операций ввода-вывода в секунду.

    Обратите внимание, что эта конфигурация – минимальная, если хотите, то можете применить большее количество дисковых накопителей с более высокой производительностью. Также обратите внимание, что этот метод анализа не учитывает эффекты от применения конфигураций RAID.

    Примечание. При предварительном планировании дисковой подсистемы всегда соблюдайте "правило 85%" и для объема базы данных, и для производительности операций ввода-вывода генерируемых пользователями. Использование каких-либо других расчетов вызывает увеличение количества дисковых накопителей. Также помните, что 85% является максимально допустимым значением использования дисков. На практике следует загружать диски менее чем на 85%. И помните, что слишком большое количество операций ввода-вывода в секунду вызовет появление узких мест и, следовательно, увеличит длительность времени отклика.

    А теперь давайте более подробно изучим, как правильно определить количество дисковых накопителей, нужных для вашей системы, с учетом применения конфигураций RAID. Вам понадобится хранить три основных категории данных:

  • Windows 2000 и SQL Server;
  • файлы журналов;
  • саму база данных.
  • Надо будет рассчитать количество дисковых накопителей для каждой из этих категорий данных. Суммировав эти числа, вы получите количество дисковых накопителей, необходимых для вашей системы.

    Дисковые накопители для Windows 2000 и SQL Server

    Сначала надо рассчитать количество дисковых накопителей, необходимых для хранения первой категории данных – операционной системы Windows 2000 Server и СУБД SQL Server. Обычно для этого применяют отдельный набор томов RAID 1 (дисковые накопители с зеркальным дублированием), чтобы обеспечивать наиболее быстрое восстановление после отказов. Количество дисковых накопителей может быть разным в зависимости от объема хранимой на них информации, но операционная система Windows 2000 и СУБД SQL Server обычно умещаются на одном диске. Наш простой метод расчета можно выразить следующей формулой:

    диски для операционной системы и SQL  = 
    (диски для Windows 2000 Server и SQL) х (множитель RAID)

    В данном случае, для дисковых накопителей с зеркальным дублированием, результатом формулы будет 2 диска (Windows NT и SQL Server уместятся на одном диске, а другой будет служить дублирующим диском массива RAID 1). Конфигурация тома для операционной системы как RAID 5 или как RAID 0 не рекомендуется. Применять RAID 5 имеет смысл, только когда для собственно хранения данных требуется более одного диска, и вам следует стремиться к как можно более быстрому восстановлению операционной системы и программы СУБД.

    Дисковые накопители для файлов журналов

    Затем вам потребуется рассчитать количество дисковых накопителей, необходимых для поддержки системных файлов журналов. Это количество сильно зависит от общего количества операций записи за одну секунду, вызываемых вашими транзакциями. Помните, что ценность информации, содержащаяся на этих дисках, очень велика. Она представляет собой "аудиторский след" (контрольный журнал) или "образ до сбоя", который понадобится, если что-нибудь случится с базой данных. При помощи аудиторского следа вы сможете отменить транзакции, незавершенные из-за отказа диска. Расчет количества операций записи уже был выполнен при предварительном планировании мощностей процессоров. Пусть, например (эти числа взяты произвольно), транзакции вызывают 1 500 000 операций записи при использовании тома RAID 0. Если мы решим, что для дисковых накопителей, хранящих журнал, надо применять RAID 1, то получится, что за 8-часовой рабочий день должно быть выполнено 3 000 000 операций записи, или 104,16 операций записи за одну секунду. (Помните, что по сравнению с RAID 0, массивы RAID 1 удваивают количество операций записи на одну транзакцию.) Для расчета необходимого количества дисковых накопителей примените следующую формулу:,

    диски для журналов  = 
    (количество записей в секунду) / (производительность ввода-вывода диска)

    Помните, что производительность ввода-вывода диска в данной формуле должна составлять 85% от его паспортной максимальной производительности. Также не забудьте округлить результат деления (количество записей в секунду) / (производительность ввода-вывода диска) до ближайшего целого числа в сторону увеличения. И наконец, не забудьте скорректировать величину количество записей в секунду в соответствии с увеличением количества операций записи, вызванным из-за применения того или иного уровня RAID. Если мы применим 85-процентный потолок к дисковым накопителям, имеющим максимальную производительность ввода-вывода 70 операций ввода-вывода за одну секунду, то получится, что нам надо иметь 1,7 накопителя. Округлив этот результат, мы получим, что нам надо иметь два накопителя.

    Дисковые накопители для базы данных

    И наконец, надо будет рассчитать количество дисковых накопителей, необходимых для базы данных. Помните, что вы должны учитывать не только необходимый объем дисковой памяти, но и количество операций ввода-вывода, которые должны выполняться одну секунду, а затем взять тот из результатов расчета, который окажется больше.

    Расчет для объема дисковой памяти

    Чтобы определить количество дисковых накопителей, необходимых для того, чтобы база данных могла на них уместиться, примените следующую формулу:

    диски для базы данных  = (объем данных) / (размер диска) + (прибавка RAID)

    Помните, что размер диска в данной формуле должен составлять 85% от его паспортной максимальной емкости. Также не забудьте, что для объема данных и размера диска надо применять одинаковые единицы измерения (например, килобайты или мегабайты). Прибавка RAID – это количество дополнительных дисковых накопителей, необходимых для обеспечения отказоустойчивости. Для RAID 1 это число равно количеству дисковых накопителей, необходимых для хранения самой базы данных. Для RAID 5 требуется один дополнительный накопитель. Для нашей 10-гигабайтной базы данных, использующей RAID 5, потребуется два 12 Гб накопителя.

    Примечание. Для дисковых накопителей, хранящих базу данных, рекомендуется применять RAID 5.

    Расчет для производительности ввода-вывода при доступе к базе данных

    Количество дисков, необходимых, чтобы система могла выдержать необходимый темп ввода-вывода, может вырасти очень значительно, как вы уже видели из простого примера, приведенного ранее. Чтобы рассчитать это количество, надо выполнить ряд действий:

  • Рассчитайте общее количество операций чтения, которые будут проходить через систему, применив следующую формулу:
    общее количество чтений = (количество чтений на одну транзакцию) х 
    (общее количество транзакций)
    Предположим, на одну транзакцию у нас производится 500 чтений, а всего будет 50 000 транзакций, тогда всего у нас будет 25 000 000 чтений.
  • Определите, сколько из этих операций чтения будут физическими операциями ввода-вывода, а сколько – логическими операциями ввода-вывода, пользуясь следующими формулами:
    общее количество логических чтений = (общее количество чтений) х 
    (процент успешных обращений к кэшу)
    
    общее количество физических чтений = (общее количество чтений) - 
    (общее количество логических чтений)
    Предположим, процент успешных обращений к кэшу равен 90%, тогда общее количество логических операций чтения у нас будет равно 22 500 000, а общее количество физических операций чтения будет равно 2 500 000.
  • Преобразуйте общее количество физических операций чтения в количество чтений в секунду при помощи следующей формулы:
    количество физических чтений в секунду = 
    (общее количество физических чтений) / (рабочий период)
    Здесь рабочий период обозначает длительность времени (в секундах), в течение которого должна быть выполнена работа. Эта величина нужна также для расчета загруженности центрального процессора. Если взять для нашего примера 8-часовой рабочий период, то мы получим 86,8 физических операций чтения в секунду.
  • Затем рассчитайте общее количество операций записи, которые будут выполняться в системе, при помощи следующей формулы:
    общее количество записей = (количество записей на одну транзакцию) х 
    (количество транзакций) х (множитель RAID)
    Пусть мы имеем 10 операций записи на одну транзакцию и применяем массив RAID 5, тогда общее количество записей будет равно 10 х 50 000 х 3, т.е. 1 500 000 операций записи.
  • Преобразуйте общее количество физических операций записи в количество операций записи в секунду при помощи следующей формулы:
    количество физических записей в секунду = (общее количество физических записей) / 
    (рабочий период)
    В нашем примере мы имеем 1 500 000 физических операций записи за 8-часовой рабочий период (28 800 секунд), что дает 52,1 физических операций записи в секунду.
  • Рассчитайте общее количество физических операций ввода-вывода в секунду при помощи следующей формулы:
    количество физических операций ввода-вывода в секунду = 
    	(общее количество физических чтений в секунду) + 
    	(количество физических записей в секунду)
    В нашем примере мы имеем 86,8 физических операций чтения в секунду и 52,1 физических операций записи в секунду, что дает в сумме 138,9 физических операции ввода-вывода в секунду.
  • Вычислите общее необходимое количество дисковых накопителей по следующей формуле:
    количество дисков для базы данных = 
    	((количество физических операций ввода-вывода в секунду) / 
    	(производительность ввода-вывода одного диска)) + (прибавка RAID)
  • Помните, что значение производительности ввода-вывода одного диска вы должны брать с учетом правила "85%". Прибавка RAID – это количество дополнительных дисковых накопителей, необходимых для обеспечения отказоустойчивости. Если мы имеем всего 138,9 физических операции ввода-вывода в секунду, а производительность диска составляет 70 операций ввода-вывода в секунду и применяется массив RAID 5, то всего понадобится четыре дисковых накопителя – три для поддержки суммарного ввода-вывода и еще один для обеспечения отказоустойчивости массива RAID 5.

    Итак, вы видите, что для размещения базы данных размером 10 Гб было бы достаточно иметь всего лишь один диск, но с учетом выполняемого ввода-вывода потребуется три диска – больший из двух результатов расчета.

    Общее количество дисковых накопителей, нужных в системе

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

    Практические советы.

    Оставляйте себе резервы

    Большинство проектировщиков пользуются пороговыми величинами (75% для загруженности центральных процессоров, 85% для использования дисков и т.д.) как максимальными значениями нагрузок. В большинстве случаев желательно применять меньшие величины. Конечно, часто решения в этих вопросах принимают не проектировщики. На решение проектных вопросов могут оказывать влияние такие внешние факторы, как бюджет расходов на покупку вычислительной техники. В качестве хорошего целевого показателя можно принять максимальную загруженность центральных процессоров, равную 65% и использование дисков на 70%. Однако вы можете применять и любые другие значения этих процентов, которые сочтете оптимальными для проектируемого вами типа систем.

    Сбор данных об использовании дисков

    После того как система будет установлена и запущена в работу, вам надо будет собирать данные об использовании ее дисков, чтобы знать обо всех изменениях, которые могут потребоваться. При расширении системы может увеличиться количество пользователей (а следовательно, и количество транзакций), могут измениться требования к базе данных (в результате чего может увеличиться размер базы данных) и т.д.

    При выполнении исследований последующего планирования загруженности дисков понадобится следить за следующими счетчиками утилиты Performance Monitor, которые вы найдете в объекте PhysicalDisk:

  • % Disk Time. Процент истекшего времени, в течение которого выбранный дисковый накопитель был занят обслуживанием запросов чтения или записи.
  • % Disk Read Time.Процент истекшего времени, в течение которого выбранный дисковый накопитель был занят обслуживанием запросов чтения.
  • % Disk Write Time.Процент истекшего времени, в течение которого выбранный дисковый накопитель был занят обслуживанием запросов записи.
  • Avg. Disk Read Queue Length. Среднее количество запросов чтения, стоящих в очереди на выбранном дисковом накопителе за время интервала измерения.
  • Avg. Disk Write Queue Length. Среднее количество запросов записи, стоящих в очереди на выбранном дисковом накопителе за время интервала измерения.
  • Avg. Disk Queue Length.Среднее количество запросов (любых – и чтения, и записи), стоящих в очереди на выбранном дисковом накопителе за время интервала измерения. Этот показатель является суммой двух предыдущих показателей.
  • Disk I/O Count Per Second.Активность ввода-вывода массива дисков за одну секунду, усредненная за интервал измерения. Этот счетчик недоступен непосредственно из утилиты Performance Monitor, чтобы получить эту величину, надо просто сложить значения двух других счетчиков, которые доступны – Disk Reads/sec и Disk Writes/sec*.
  • Disk Space Used.Объем места на диске, которое в данный момент используется базой данных или операционной системой. Этот счетчик недоступен из Performance Monitor, для получения этой информации нужно применять Disk Administrator.
  • Disk Space Available.Объем места на диске, которое в данный момент свободно**.
  • Для запуска Disk Administrator нажмите на экранную кнопку Start, затем выберите Programs, Administrative Tools (Common) и, наконец, Disk Administrator. Для получения дополнительной информации об использовании утилиты Disk Administrator, производительности, нажмите на кнопку Help в окне Disk Administrator.

    Анализ данных об использовании дисков

    Анализ информации об использовании дисков несложен. Например, если бы мы анализировали работу системы, то для определения объема свободного места мы собирали бы информацию о свободном месте на дисках. На рис. 6.7 показаны нагрузка на базу данных в отношении наличия свободного места.

    Как можно видеть, в начале наблюдений у нас было 2,05 Мб свободного места из общего объема в 6,15 Мб, т.е. диск был заполнен примерно на 67%. 14 января 2000 года объем свободного места на диске уменьшился примерно до 1,5 Мб, т.е. диск заполнился примерно на 75%. Проведя при помощи Microsoft Excel линию тренда, можно спрогнозировать, что 18 февраля 2000 года на диске останется свободно только около 1,3 Мб, т.е. диск заполнился примерно на 83%. Администратор баз данных может принять решение приобрести в этот момент дополнительный диск.

    (рис 6.7) Прогноз (упреждающий анализ) для свободного места на диске

    Планирование мощности сети

    Планирование мощности сети мы оставили под конец, потому что изнутри системы вы не сможете получить много информации. Из утилиты Performance Monitor нельзя получить никакие счетчики производительности работы сети, поэтому предварительное планирование сети может оказаться достаточно трудным делом. Сеть обычно является самым слабым звеном в системе, поэтому будьте реалистичны при ее оценке.

    Чтобы выполнить предварительное планирование сети, вам понадобится определить, сколько пользователей будут одновременно работать в системе, сколько сообщений (messages) будет проходить за одну секунду и сколько в среднем байт будет содержаться в этих сообщениях. Опираясь на эту информацию, вы можете произвести некоторые оценки минимально необходимой пропускной способности сети. Пусть, например, в нашей системе будут передаваться такие объемы данных: будет 10 пользователей, каждый из которых будет передавать 25 сообщений в минуту. Каждое сообщение будет иметь длину 259 байтов. Можно оценить, что за одну минуту все эти 250 сообщений будут генерировать 64 750 байтов в минуту, т.е. 518 000 битов в минуту, т.е. 8633,33 бита в секунду. Для такой нагрузки подойдет небольшая сеть. Для оценки мощности сети можно применять следующую формулу:

    мощность сети = (количество сообщений секунду) х  (длина сообщений) х  
    (количество битов в одном байте)

    При помощи этого расчета вы можете приблизительно оценить мощность (бит/сек), которую должна будет иметь линия передачи данных.

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

    Сбор данных об использовании сети

    При выполнении исследований последующего планирования загруженности сети вам понадобится следить за счетчиком производительности Bytes/Sec Through Network Interface утилиты Network Monitor (Сетевой монитор). Этот счетчик обозначает процент времени, когда линия передачи данных занята.

    Примечание. Инструкции по инсталляции утилиты Network Monitor вы найдете в разделе "Installing Network Monitor" справочной системы Windows 2000 Server.

    Анализ данных об использовании сети

    Для анализа сетевых данных надо сначала рассчитать пропускную способность линии передачи данных (мощность сети), как было показано выше, а затем посмотреть значение счетчика Bytes/Sec Through Network Interface. Зная два этих значения, можно вычислить общую загруженность сети при помощи следующей формулы:

    загруженность сети = 
    ((количество байт, проходящих через сеть за одну секунду) / 
    (мощность сети)) х 100

    На рис. 6.8 показан пример линейного роста процента загруженности сети в зависимости от даты.

    (рис 6.8) Прогноз (упреждающий анализ) для загруженности сети

    График показывает, что 2 сентября 2000 года загруженность данного сегмента сети станет максимально возможной. Опять напомним, что чем больше точек с данными вы нанесете на график, тем точнее будет ваш прогноз.

    Как выбирать оценочные данные

    Нельзя однозначно назвать набор счетчиков, за которыми нужно следить при последующем планировании. Набор используемых счетчиков зависит от анализируемых вами данных и от необходимой вам степени детализации. Кроме счетчиков, уже описанных ранее, Performance Monitor имеет много других счетчиков для измерения производительности, которые могут оказаться полезными в некоторых ситуациях. Одну такую ситуацию – сбор информации о процессах – мы сейчас и рассмотрим.

    Сбор данных о процессах

    Информация о процессах может оказаться очень ценной при создании профилей рабочей нагрузки. Создание профилей рабочей нагрузки – это выяснение, какую именно работу выполняет каждый из пользователей. Performance Monitor имеет много разнообразных счетчиков для выполнения этой задачи. Эти счетчики подобны счетчикам из объекта Processor, но в данном случае они применяются для сбора данных о процессе. Они находятся в объекте Process и перечислены ниже:

  • % Processor Time. Процент истекшего времени, в течение которого все потоки процесса использовали процессор для исполнения команд. Для данного процесса может быть учтен программный код, обрабатывающий некоторые аппаратные прерывания или условия-ловушки (trap conditions).
  • % User Time.Процент времени, в течение которого потоки процесса выполняли программный код, исполняемый в пользовательском режиме (User mode).
  • % Privileged Time.Процент времени, в течение которого потоки процесса выполняли программный код, исполняемый в привилегированном режиме (Privileged mode).
  • Page Faults/sec.Частота обращений к отсутствующим страницам в данном процессе.
  • Elapsed Time.Общее время, затраченное на работу данного процесса.
  • Анализ данных о процессах

    Анализ этой информации вовсе не так сложен, как вы могли бы подумать. Например, если бы потребовалось провести анализ работ, выполняемых процессами системы, то нам надо было бы собрать данные процессов при помощи, например, счетчика % Processor Time. Этот счетчик позволяет оценить, насколько много внимания система уделяет данной функции. На рис. 6.9 показан рост пользовательского процесса в запросе CalProc, применяемом отделом кредиторских задолженностей.

    Эта информация полезна тем, что мы можем спрогнозировать результат от увеличения числа пользователей в отделе кредиторских задолженностей. Линия тренда на данном графике показывает, что процент использования возрастает и достигнет 18 февраля 2000 года 30%. Допустим, в отделе кредиторских задолженностей имеется 10 пользователей, тогда можно оценить в 3% вклад каждого из пользователей в загруженность в феврале. Мы можем сделать вывод, что если в феврале добавить еще трех пользователей, то загруженность для запроса CalProc составит приблизительно 39%.

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

    (рис 6.9) Прогноз (упреждающий анализ) пользовательского процесса

    В табл. 6.1 дан список счетчиков, которые послужат хорошей основой для исследований планирования мощности.

    Показатели, доступные в Performance Monitor
    Объект Показатели
    Processor % Processor Time (статистика для отдельных центральных процессоров)
    System % Total Processor Time (усредненные данные для всех центральных процессоров)

    Вернуться к учебному плану