| Предсказание производительности
Не всегда просто предвидеть, как будет выполняться конкретный запрос при различных уровнях загрузки. Было бы великолепно, если бы администраторы базы данных имели неограниченные ресурсы для испытаний, так чтобы они могли, например, загружать “впрок” таблицы с сотнями тысяч записей и наблюдать, как все это будет работать. К сожалению, так бывает далеко не всегда. Однако, Джозеф Холмс, работающий на правительство Канады, разработал метод использования некоторых основных алгебраических уравнений, которые любой может использовать для предсказания результатов обработки запроса и тонкой настройки запросов.
Метод подразумевает выделение и тестирование SQL-предложений в идеальных условиях, построение графика зависимости времени выполнения от числа обработанных строк, получение уравнения с использованием простых методов (без регрессии), предсказание производительности, а также интерпретацию и применение модели производительности непосредственно к настройке SQL- кода. Этот подход включает следующие шаги:
Выделение SQL-кода
Сначала выделите SQL-запрос, который Вы хотите оценить, определив его как автономный скрипт SQL*PLUS или PL/SQL.
Выполнение теста
В идеале вы должны выполнить этот скрипт на выделенной машине с определенной вычислительной мощностью. Следует выполнить испытание несколько раз с разными объемами данных. Соберите достаточно данных, чтобы можно было построить график результатов испытаний, оценить его форму и получить представление, линеен ли рост времени выполнения запроса при увеличении загрузки, или нет.
Наблюдение графика производительности
Используя полученные результаты испытаний, постройте для каждого SQL-предложения график зависимости времени выполнения (y) от числа обрабатываемых строк (x) как процесс в координатных осях x,y. При идеальных условиях оптимизатор построит четко определенную, предсказуемую линию тренда. Практически, линия может быть более случайна, но ее основная форма может предоставить ключи к пониманию основных причин возникновения проблем с производительностью.
Использование простых уравнений
По нанесенным на график точкам вы можете составить представление о форме кривой, которая и будет диктовать, использовать ли вам для предсказания производительности при намного более высоких загрузках, чем вы способны проверить, линейное или квадратное уравнение. Вам следует использовать простое линейное уравнение (уравнение прямой, проходящей через две заданные точки: y = a1x + a0), если линия прямая, и квадратное уравнение (y = a0 + a1x + a2x2) если она изогнута вверх, где a0, a1 и a2 – константы, значения которых вы можете вычислить. Вам стоит использовать линейное уравнение для предсказания производительности запроса, для которого получается график типа B, D или A на рисунке 1, а для графика типа C – квадратное уравнение. Вот пример того, как следует использовать линейное уравнение:
Сначала найдите наклон линии (a1), выбрав две точки — (x1, y1) и (x2, y2) — и используя уравнение a1 = (y2 - y1)/(x2 - x1)
Затем найдите точку (a0), в которой прямая пересекает ось y (то есть, значение y при x = 0): a0 = y1 - a1x1
Чтобы предсказывать время выполнения (y) для данной загрузки x, подставьте полученные значения a1 и a0 в уравнение y = a1x + a0
К примеру, если для обработки 1000 строк требуется 2 секунды, а обработка 2000 строк занимает 3 секунды, то, подставив эти значения в приведенное выше уравнение, вы увидите, что выполнение запроса для 100000 строк займет одну минуту 41 секунду.
http://www.interface.ru/fset.asp?Url=/oracle/0001.htm | |