|
|
|||||||||||||||||||||||||||||
|
Оптимизация Oracle EBS. Мемуары "настройщика"Источник: oracle
Однажды, лет восемь назад, один опытный администратор почтенного возраста сравнил работу администратора Oracle с работой пожарного. Тогда мне эта идея не пришлась по душе. Когда в марте 2006 г. меня пригласили на проект в "ВымпелКом", то под конец одного из первых рабочих дней мне было поручено устранить дефект первого приоритета по производительности - важный для бухгалтерии отчет выводился неожиданно долго. В переводе это означало "никто не уходит домой, пока проблема не будет решена". К 11 часам вечера техническое решение было найдено. Но подход к решению проблем производительности в стиле "пожарного" не выглядел привлекательным. Эта статья о том, как в проекте "ВымпелКома" строился процесс по оптимизации производительности Oracle E-Business Suite (EBS). "Тушение пожаров" Через два года после внедрения системы стало очевидно, что решать проблемы по мере их возникновения опасно для бизнеса клиента. Поначалу, еще в апреле 2006 г., мы старались прежде всего устранять проблемы на продуктивных серверах, создающие наиболее серьезные неприятности и при этом требующие наименьших трудозатрат. Прежде всего, был налажен ежедневный анализ отчетов STATSPACK с целью выявления наиболее "тяжелых" запросов с точки зрения количества логических и физических чтений. Использовались различные методы ускорения обработки запросов. Мы понимали, что находимся не на олимпиаде по оптимизации, а в стремительно развивающемся проекте, где ежеквартально добавляется новый регион. Именно поэтому в первую очередь исправлялись запросы, которые оптимизировались наиболее просто. Уже через пару месяцев картина как по отчету STATSPACK, так и по дефектам производительности изменилась к лучшему. Вот некоторые из применявшихся методов ускорения "тяжелых" запросов:
Работа с администраторами Параллельно с устранением "тяжелых" запросов налаживалось взаимодействие "настройщика" с администраторами для выполнения ряда работ. Иногда договориться удавалось сразу, а порой приходилось использовать весь свой дар убеждения. Приведем некоторые виды проделанных администраторами работ. Отдельные из них уже завершены, другие, требующие большего времени, еще выполняются.
Об истории перехода на 64-битный Oracle можно написать отдельную статью. В переговорах о применении этого решения не участвовал разве что генеральный директор "ВымпелКома". Но мы добивались этого не "ради искусства": дополнительная память дает широкий простор для администраторов. Например, если возникает проблема с производительностью какой-либо параллельной программы в момент закрытия периода, когда уже нет времени на исследования и оптимизацию, то за счет использования оперативной памяти можно резко поднять производительность проблемного приложения. Сделать это можно, например, поместив в память (KEEP BUFFER POOL) наиболее читаемые этим приложением сегменты. В частности, пока не нашлось более эффективного решения, мы таким образом ускоряли расчет амортизации с двух часов до 15 минут. В дальнейшем мы ускорили расчет амортизации другими методами, и теперь для этой задачи не требуется много памяти. С того дня, когда произошла миграция на 64-битный Oracle, не было ни одного дефекта первого приоритета по производительности, который нельзя было бы устранить до конца рабочего дня. У администраторов появилось мощное средство, позволяющее временно ускорить выполнение той или иной задачи, не прерывая ее работы, чтобы позднее, не торопясь и не нервируя клиента, разобраться с проблемой и устранить причину ее возникновения. Взаимодействие с разработчиками В проекте "ВымпелКома" очень интересно работать тем, кто не любит ежедневного однообразия. Бизнес ставит новые задачи с завидной скоростью. На той же скорости функциональные консультанты и разработчики выдают новые решения. Постоянно внедряются новые модули, на EBS мигрируют новые регионы, разрабатываются новые "кастомизации". Довольно быстро выяснилось, что в одиночку всех проблем не решить. Несмотря на достаточно высокий профессиональный уровень разработчиков, на продуктивной БД постоянно появлялись все новые и новые запросы, которые требовали срочной оптимизации. Поскольку решать проблему на продуктивном сервере БД - дело неспокойное, мы разработали ряд действенных мер:
Опытный взгляд быстро определит проблему в top-запросе отчета tkprof. Таким образом, администратору не требуется просматривать весь код. Анализ пары самых "тяжелых" запросов даст нужный эффект. Если вы несколько лет подряд ежедневно анализировали отчеты STATSPACK, то поймете, о чем идет речь. Но на этом организация процесса разработки не закончилась. Мы добились эффективного обнаружения проблем в производительности до их попадания в продуктивную среду, но столкнулись с очередной проблемой. Команда разработчиков стремительно расширялась. Поскольку проектов, подобных реализованному в "ВымпелКоме", в России мало, новые разработчики, несмотря на умение реализовывать нужный функционал, зачастую не представляли, какую эффективность покажут их разработки на продуктивных серверах. Количество разработок, которые возвращались на доработку из-за проблем с производительностью, росло с угрожающей скоростью. Каждый день говорить коллегам "Вы снова сделали ошибку" - не самое приятное занятие. Поэтому мы организовали семинары для разработчиков. Семинары Производительности Oracle посвящено немало книг. Во многих из них даются "однобокие" рекомендации, которые хороши для конкретных, достаточно редких случаев, но в нашем проекте неприменимы. Екклесиаст написал: "Составлять много книг - конца не будет, и много читать - утомительно для тела". Поэтому мы не стали ставить в обязанность всем разработчикам прочтение всех существующих книг по оптимизации, а решили структурировать и преподать в виде семинаров 10% знаний о производительности Oracle, которые позволяют эффективно решать 99% задач в нашем проекте. Тестовые серверы Существует широко распространенное мнение, что тестовый сервер должен быть полной копией продуктивного. Практика на это отвечает всегда одинаково:
Каков же выход? Технически проблема тестирования производительности без использования продуктивного сервера решается просто, что и происходит в нашем проекте. Время отработки задачи на любом сервере делится на две основные составляющие: время работы процессоров (CPU) и время различных ожиданий (время простоя). Среди известных ожиданий можно назвать дисковые чтения (db file sequential reads), latch free и др. Зная разницу в мощности процессоров, можно оценить, во сколько раз изменится составляющая CPU на продуктивном сервере. Как правило, каждое конкретное ожидание на продуктивном сервере либо сокращается (это норма для дисковых чтений), либо возрастает (как часто происходит с ожиданием latch free). Итак, определив, сколько времени было потрачено на каждое ожидание на тестовом сервере, можно достаточно точно спрогнозировать время выполнения данной задачи на продуктивном. Приведу пример оптимизации процессов расчета зарплаты. Однажды один из менеджеров обеспокоился длительным (около восьми часов по большой операционной единице) расчетом зарплаты. Мы оптимизировали эту задачу на самом слабом тестовом сервере и маленькой операционной единице. После окончания оптимизации время расчета на тестовом сервере увеличилось с 15 до 18 минут. Как вам результат? Вы готовы платить премии своим сотрудникам за такую работу? Нет? А напрасно. На продуктивном сервере расчет вместо восьми часов завершился за 1 час и 35 минут. Дело в том, что были сокращены ожидания latch free, но увеличены db file sequential reads. В тестовой среде медленные диски, а в продуктивной latch free всегда возрастают - вот и весь секрет. Что дальше Разработчики и специалисты по тюнингу должны уметь работать с функциональными специалистами в формате диалога, заранее ставить их в известность о возможных проблемах с производительностью и, естественно, предлагать альтернативные пути решения задачи. Например, запрещать изменения в предыдущих периодах во избежание необходимости пересчета входящих остатков на текущий период. Таким образом, оптимизацию производительности не следует ограничивать техническими средствами Oracle. Успешные проекты не завершаются с окончанием внедрения систем. За ним следует процесс сопровождения, и на этом этапе важно построить процесс оптимизации производительности системы. Надеюсь, автору удалось донести до читателя мысль о том, что оптимизация производительности в подобных проектах - это выстраивание комплексного процесса в проектной команде. Ссылки по теме
|
|