оздание хорошей спецификации
Оставим в покое ошибочные спецификации и займемся составлением правильных. На создание хорошей спецификации для большинства проектов повышения производительности у вас должно уйти не больше двух часов. Вот рецепт:
Выявить пользовательские операции, оптимизация которых необходима для бизнеса, и определить, в каком контексте проявляется их важность.
Разбить найденные пользовательские операции на группы по пять элементов и назначить им приоритеты.
Для каждой операции из первой группы определить, за кем и когда вы будете вести наблюдение при выполнении операции в наиболее благоприятном контексте.
Пользовательская операция
В этой книге я стараюсь провести четкое различие между пользовательскими операциями, программами и сеансами Oracle. Смысл пользовательской операции полностью соответствует названию - это операция, выполняемая пользователем. Такая операция может заключаться в заполнении поля формы или в выполнении одной или нескольких программ. Пользовательская операция определяется как некоторая единица работы, результат и скорость выполнения которой имеют значение для бизнеса. Понятие пользовательской операции особенно важно при составлении спецификации проекта, поскольку именно эта единица работы важна с точки зрения бизнеса.
Понятно, что программа - это последовательность компьютерных команд, выполняющих некоторую бизнес-функцию. Пользовательская операция может состоять из программы, из ее части или из нескольких программ. Сеанс Oracle - это конкретная последовательность обращений к БД, осуществляемых в течение соединения между пользовательским процессом и экземпляром Oracle. Программа может создать несколько сеансов Oracle или не создавать ни одного, а в некоторых конфигурациях несколько программ могут совместно пользоваться одним сеансом. Важность понятия сеанса Oracle при сборе диагностической информации обусловлена тем, что ядро Oracle ведет статистику производительности на уровне сеансов.
В Oracle разделены понятия соединения (маршрута взаимодействия) и сеанса. Можно установить соединение с Oracle и не иметь сеанса. С другой стороны, можно создать несколько сеансов одновременно, используя единственное соединение.
Выбор пользовательских операций и контекстов
Первым шагом в создании спецификации должно быть выявление тех пользовательских операций, оптимизации которых требуют интересы бизнеса. Если этого не сделать, проект повышения производительности, скорее всего, провалится. Жизненно важно иметь список конкретных пользовательских операций. Необходимо выбрать из них те, которые имеют наибольшее влияние на прирост чистой прибыли, возврата инвестиций и движения денежных потоков.
Я особенно подчеркиваю, что «оптимизации требуют интересы бизнеса», т. к. в этот момент вас не интересует мнение администратора базы данных о ее производительности. Одна из наиболее распространенных ошибок, допускаемых аналитиками по производительности Oracle, заключается в том, что они изучают данные в представлениях V$, чтобы понять, где требуется «настройка». А представления V$ не могут подсказать вам этого. В главе 3 я приведу ряд технических причин, которые не позволяют полагаться на данные представлений V$ в этом вопросе.
Выяснить потребности бизнеса обычно не составляет труда. Крайне редко для этого приходится затевать длительный проект по определению целей. Практически всегда эти сведения можно получить, задав наделенному здравым смыслом руководителю предприятия вопрос: «Если бы мы могли сегодня к вечеру ускорить работу одной из программ, какую из них вы бы выбрали?». Следующий пример иллюстрирует возможные типы ответов:
• Мы производим дисковые накопители. Склад заполнен готовыми к отправке изделиями. Каждое утро мы получаем сотни звонков от рассерженных клиентов, сделавших заказы больше двух недель назад, которые требуют сообщить о состоянии этих заказов. В среднем на погрузочной площадке в каждый момент времени находится около двадцати свободных машин службы доставки. Если вы сейчас пройдете на погрузочную площадку, то увидите, что наши упаковщики вместе с водителями сидят на коробках и распивают кофе. Они не могут погрузить эти коробки, потому что программа, печатающая транспортные накладные, работает слишком медленно. Главная причина плохой производительности в нашем бизнесе заключается в программе печати транспортных накладных.
• Мы слишком много тратим на серверные лицензии и техническую поддержку. У нас в компании 57 серверов уровня предприятия, и нам надо сократить их количество до десяти или меньше. Мы уже перенесли 80% данных компании в сетевое хранилище данных (Storage Area Network - SAN). Однако десять серверов вряд ли справятся с объемом вычислений, выполняемых 57 машинами. Основная проблема производительности в нашем бизнесе заключается в исключении лишней нагрузки, что позволит нам консолидировать вычислительные мощности и избавиться приблизительно от 50 серверов.
Обычно самым трудным делом оказывается поиск того сотрудника, который обладает нужной вам информацией. Возможно, придется покопаться в длинном списке. Вот некоторые полезные советы:
Спросите у своего босса, где сосредоточены риски, связанные с производительностью
Уведите разговор от обсуждения технических вопросов функционирования базы данных. Ведите разговор на языке пользователей. Выясните, кто из пользователей чаще всего жалуется на производительность системы, и встретьтесь с ним за обедом. Проблема самого недовольного пользователя может и не быть главной для бизнеса, но знакомство с проблемами этого пользователя может стать хорошим началом.
Пригласите пользователя на обед
Угостите его и задайте простой вопрос: «Если бы я мог что-нибудь ускорить в твоей работе, что бы ты выбрал?»
Найдите прогноз сбыта для вашего бизнеса
Подумайте, какие прикладные процессы приобретают наибольшее значение в связи с планируемым ростом продаж компании. Выполняются ли эти процессы настолько эффективно, насколько это возможно?
Если вы вплотную занялись выяснением у сотрудников степени важности пользовательских операций для бизнеса, узнайте у них, какие операции относятся к следующим категориям:
Операции, критичные для бизнеса.
Долго выполняющиеся операции.
Наиболее часто выполняющиеся операции.
• Операции, потребляющие большую часть того ресурса, который вы пытаетесь сэкономить.
В дополнение к определению операций, требующих оптимизации, потребуется определить контекст, в котором проявляется их важность. Например:
Всегда ли операция выполняется медленно?
Наблюдается ли замедление в определенное время дня (недели, месяца, года)?
Связано ли замедление операции с одновременным запуском других программ?
Не вызвано ли замедление достижением некоторого порогового количества пользовательских сеансов?
Не возникает ли замедление после выполнения некоторых других программ (загрузки, удаления и т. д.)?
Не определив контекст, вы рискуете, собрав диагностическую информацию для проблемной операции, после всех приложенных усилий обнаружить очевидные свидетельства отсутствия проблем с данной операцией. Необходимо выяснить, как застать интересующую вас операцию в момент ее наихудшей производительности. Иначе нельзя обнаружить проблему. Это правило настолько важно, что я повторю его еще раз:
Необходимо выяснить, как застать исследуемую операцию в момент ее наихудшей производительности.
На этом этапе бывает важно выбрать несколько пользовательских операций, особенно в тех ситуациях, когда несколько различных проблем оказывают влияние на многих пользователей. Это верно даже в тех случаях, когда имеется одна главная проблема с производительностью системы, намного более серьезная, чем все остальные. Этот совет продиктован опытом многократного применения данного метода:
Чистая прибыль зависит от издержек, поэтому прибыль бизнеса от улучшения, например, операции №3 может в действительности превышать прибыль от улучшения операции №1.
Быстрое улучшение ситуации по любой из пяти основных проблем может дать большое политическое преимущество, включающее такие факторы, как повышение морального духа в коллективе и доверие спонсора проекта.
Возможно, неизвестно, как повысить производительность пользовательской операции №1. Но оптимизация, к примеру, операции №3, может настолько снизить избыточную нагрузку, что №1 потеряет свое значение.
Нельзя сказать, какое из мероприятий по повышению производительности даст наибольший прирост прибыли, пока не будет проведен высокоуровневый анализ затрат и результатов по всем пяти операциям первой группы.
Итак, список пользовательских операций составлен и необходимо оценить степень важности их улучшения с точки зрения бизнеса. Все последующие действия подразумевают, что выбор важнейших кандидатов на оптимизацию уже сделан. Расстановка бизнес-приоритетов жизненно важна по нескольким причинам, среди которых:
Наиболее важные операции будут оптимизированы раньше
Это самая важная причина. Тут все просто, если вы не занимаетесь оптимизацией важнейших бизнес-процессов, значит, то, чем вы занимаетесь, - это не оптимизация.
В компромиссных решениях приоритет будет отдан более важной операции
Вы можете вдруг обнаружить, что оптимизация одной пользовательской операции отрицательно сказывается на производительности другой. Такое часто случается, когда выбранная стратегия оптимизации заключается в увеличении производительности некоторого компонента. Надеюсь, однако, что я убедил вас прибегать к замене компонентов только в случае необходимости (то есть редко), и такие компромиссы будут скорее исключением, чем правилом.
На менее важных операциях сказывается сопутствующая выгода
Термин сопутствующие потери пришел в наш язык из сводок о несчастных случаях во время военных действий. Противоположный по смыслу термин сопутствующая выгода означает выгоду, нежданно полученную в связи с другим событием. Сопутствующая выгода в производительности часто имеет место в тех вычислительных системах, где бывает исключена значительная бесполезная нагрузка.
На этом этапе можно чересчур увлечься анализом, но на самом деле на него не надо тратить много времени. Достаточно грубой классификации. Я рекомендую объединить пользовательские операции в группы по пять или больше и назначить им приоритеты. В этом случае у вас не возникнет искушения заняться точным ранжированием близких по важности операций. Например, если у вас десять проблемных операций, разбейте их не больше чем на две группы по пять. Если проблемных операций больше десяти (я бывал в компаниях, где их количество переваливало за пятьдесят), предлагаю разделить список на три части:
Пять наиболее важных операций (первая группа).
Пять следующих по важности операций (вторая группа).
Все оставшиеся важные пользовательские операции из списка (объединение третьей и последующих групп).
Будьте особенно осторожны, когда в расстановке приоритетов участвует большая группа людей. Конечно, каждый пользователь попытается убедить вас в исключительнейшей важности выполняемых им действий для всей системы. Разумеется, все операции в системе не могут иметь высший приоритет. Значительная часть времени, которое вы потратите на дискуссии о том, в какую из групп следует поместить ту или иную операцию, может быть потрачена с гораздо большей пользой на следующих этапах. Если вы видите, что задача расстановки приоритетов занимает больше нескольких минут, вернитесь на шаг назад и примите благоразумное решение. Заверьте пользователей, чьи операции не получили высшего приоритета, в том, что они ничего не потеряют; их проблемы тоже будут рассмотрены.
Кто и когда выполняет каждую из операций
На последнем этапе составления спецификации проекта по повышению производительности надо определить, как следует идентифицировать каждую из выбранных операций, когда она в следующий раз будет выполняться в установленном контексте. Эта информация поможет найти программы, реализующие данную операцию, с тем, чтобы измерить их производительность.
Часто успешность сбора статистических данных зависит от вашей способности установить хорошие отношения с человеком, отвечающим за выполнение медленной операции и способным ответить на следующие простые вопросы:
Когда, по его мнению, произойдет очередное замедление в выполнении операции?
Как это можно наблюдать?
Ответы на эти вопросы однозначно определяют параметры процесса сбора диагностических данных, описанного в главе 3.
Если в вашем распоряжении есть средство непрерывного мониторинга соответствующей статистики производительности всех пользовательских операций системы, то необязательно выяснять, кто и когда будет запускать проблемную программу. Роскошь обладания такими данными обо всех операциях системы позволит вам реагировать на уже произошедшие случаи вместо того, чтобы заниматься предсказаниями их появления в будущем. Такие инструменты дороги, но они существуют.
Если такого инструмента нет, то придется проявить большую избирательность в отношении собираемой диагностики, и описанный здесь этап необходим. Надеюсь, главы 6 и 8 будут хорошим подспорьем в этом деле.
< Предыдущая | Следующая > |
---|