ак работать с профилем ресурсов
Хотя люди в большинстве своем способны интуитивно понять формат профиля ресурсов, несколько формальных правил все же помогают более эффективно использовать представленную в нем информацию. Мы с коллегами, проанализировав, начиная с 2000 г., несколько сотен профилей ресурсов, обобщили наш подход в следующих основных правилах:
Работайте с данными профиля ресурсов в порядке убывания вклада в общее время отклика.
Исключите лишние вызовы, прежде чем пытаться уменьшить задержку на каждый вызов.
Если после исключения избыточных обращений к ресурсу его вклад во время отклика все еще слишком велик, избавьтесь от ненужной конкуренции за этот ресурс.
Модель «трех подходов» Дэйва Энсора
М
ой друг и коллега по издательству O'Reilly Дэйв Энсор (Dave Ensor) в своих публичных выступлениях отмечает, что существуют три подхода к решению проблемы времени отклика, вызванной дефицитом некоторого ресурса:
Коммерческий подход заключается в увеличении ресурса. Такой подход действительно улучшает показатели чистой прибыли, возврата инвестиций и движения денежных потоков. К сожалению, эти улучшения имеют место для ваших поставщиков, но... не для вас.
Исследовательский подход заключается в манипуляциях с конфигурациями, параметрами, оборудованием и всем тем, что может за счет «настроек» хоть как-то уменьшить время обработки запросов. При действительно больших задержках выполнения вызовов технические специалисты испытывают непреодолимое желание что-нибудь «настроить». Такая разновидность настройки - Самое Любимое Развлечение для исследователя, живущего в каждом из нас. Самое приятное здесь то, что это позволяет нам выглядеть очень занятыми людьми и избегать множества других менее интересных дел. К сожалению, такой подход ведет лишь к пустой трате времени при отсутствии сколько-нибудь заметного результата. Главным критерием остается закон Амдала.
Разумный подход заключается в уменьшении количества обращений к ресурсу. Вопрос только в том, как это сделать.
Те, кто встречался с Дэйвом или слушал его выступления, поймут, почему я восхищаюсь сдержанностью, которую он проявил, давая названия этим трем подходам.
• Только исключив избыточные обращения к ресурсу и неоправданную конкуренцию за него, можно рассматривать вопрос об увеличении этого ресурса.
Эти правила постоянно помогают нам в быстрой и эффективной оптимизации. В следующих разделах они рассмотрены более подробно.
Очень легко работать с профилем ресурсов, отсортированным по убыванию вклада составляющих во время отклика. Список просматривается сверху вниз. Самый первый потребитель времени отклика и есть тот ресурс, от которого в наибольшей степени зависит повышение производительности. Вспомните закон Амдала: чем ниже компонент расположен в списке, тем слабее его вклад в уменьшение времени отклика в целом.
В примере 10.2 приведен профиль ресурсов, построенный для определенной пользовательской операции в системе с «очевидной проблемой дискового ввода/вывода». Задержка ввода/вывода одного блока в этой подсистеме временами превышает 0,600 секунды. Большинство инженеров сочтут задержку более 0,010 секунды на один блок неприемлемой. А задержки в этой системе в шестьдесят раз хуже этого порогового значения.
Однако профиль ресурсов этой пользовательской операции ясно показывает, что улучшение времени отклика для нее надо начинать вовсе не с решения проблемы дискового ввода/вывода. Единственные компоненты времени отклика, на которые повлияет повышение производительности ввода/вывода - это db file sequential read и db file scattered read. Даже если удастся полностью исключить их из профиля ресурсов, это уменьшит время отклика примерно на 14%.
Занятно, что «проблема» подсистемы ввода/вывода действительно сказывается на производительности программы из примера 10.2. Данные трассировки свидетельствуют о том, что отдельные вызовы ввода/вывода для одного блока в данной пользовательской операции занимают до 0,620 секунды. Но даже эта информация несущественна. Возможный выигрыш от устранения любых проблем ввода/вывода для данной операции столь незначителен, что лучше потратить время, требуемое на анализ и устранение проблемы, на что-нибудь другое.
Настало время проверить, насколько вы привержены методу R. Вы можете сказать: «Но ведь устранение такой серьезной проблемы ввода/вывода, безусловно, приведет к некоторому улучшению производительности системы...». Да, действительно, решение этой проблемы даст некоторое улучшение производительности. Но необходимо понимать, что решение этой проблемы ввода/вывода не даст ощутимого улучшения данной пользовательской операции (той, которая соответствует профилю ресурсов из примера 10.2 и ускорение которой отчаянно требуется бизнесу). Понимать это жизненно необходимо по двум причинам:
Время и материалы, израсходованные на решение «проблемы ввода/вывода», - это ресурсы, которые уже нельзя вложить в повышение производительности пользовательской операции, представленной в примере 10.2. Если пользовательская операция выбрана правильно, то отвлечение на проблему ввода/вывода, по меньшей мере, непродуктивно.
Решение проблемы ввода/вывода может в действительности ухудшить производительность пользовательской операции из примера 10.2. Это не только теоретическая возможность, мы встречались с этим явлением на практике (см. главу 12). Вот один из возможных случаев: представьте себе, что одновременно с операцией из примера 10.2 в системе выполняются еще несколько программ. И эти программы потребляют очень много процессорного времени, но в данное время они часто простаивают в очереди к медленному диску. Исключение задержки в очереди к диску для этих медленных процессов фактически приведет к обострению конкуренции за использование процессора, а это как раз та составляющая, которая преобладает во времени отклика рассматриваемой операции. Таким образом, решение проблемы ввода/вывода на самом деле ухудшит производительность выбранной пользовательской операции.
Да, решение проблемы ввода/вывода даст некоторый прирост производительности остальных программ. Но если выбор пользовательской операции для повышения производительности в примере 10.2 сделан правильно, то улучшение производительности второстепенных операций будет достигнуто ценой ее ухудшения для наиболее важной операции. Такой результат противоречит приоритетам бизнеса.
По обеим причинам, если выбор пользовательской операции из примера 10.2 сделан правильно, работа над «проблемой ввода/вывода» будет ошибкой. Если же пользовательская операция для повышения производительности выбрана неверно, то это значит, что вы ошиблись при выполнении действий, описанных в главе 2.
< Предыдущая | Следующая > |
---|