Агнер Эрланг заметил, что интенсивность поступления вызовов в телефонную систему подчиняется распределению Пуассона. Я уже отмечал, что многие процессы поступления запросов в компьютерных системах, в том числе и в Oracle-системах, также подчиняются распределению Пуассона. Почему же тогда я решил предложить вашему вниманию M/M/m-модель массового обслуживания, которая работает лишь тогда, когда время между поступлениями запросов и время обслуживания характеризуются экспоненциальным распределением? Почему я не выбрал модель, в которой процессы поступления и обслуживания запросов подчиняются распределению Пуассона?
Дело в том, что на самом деле я выбрал модель, в которой процессы поступления и обслуживания запросов подчиняются распределению Пуассона. Экспоненциальное и пуассоновское распределения связаны обратной зависимостью [Gross and Harris (1998) 16-22]:
Для того чтобы система удовлетворяла условию первого «M» из «M/M/m», время между поступлениями запросов должно иметь экспоненциальное распределение. Если вы помните, среднее время между поступлениями запросов т - это величина, обратная средней частоте поступления (т = 1/X). Частота поступления имеет распределение Пуассона с параметром X в том и только в том случае, если соответствующее время между поступлениями подчиняется экспоненциальному распределению с параметром 9= т = 1/X.
Для того чтобы система удовлетворяла условию второго «M» из «M/M/m», ее время обслуживания должно быть распределено экспоненциально. Естественно, среднее время обслуживания S обратно пропорционально средней скорости обслуживания (S =1///). Скорость обслуживания имеет распределение Пуассона с параметром / в том и только в том случае, если соответствующее время обслуживания подчиняется экспоненциальному распределению с параметром 9 = S = 1//.
Поэтому некоторые авторы говорят о модели M/M/m как о модели, в которой интенсивность поступления и время обслуживания распределены по закону Пуассона.
Две буквы «M» в обозначении модели массового обслуживания M/M/m означают, что мы можем использовать модель лишь в том случае, если время между поступлениями запросов и время их обслуживания имеют экспоненциальное распределение. То есть мы можем применять M/M/m для моделирования производительности системы, только если гистограммы времени между поступлениями запросов в систему и скорости обслуживания имеют такой же вид, как и кривая функции плотности вероятности при экспоненциальном распределении, приведенная на рис. 9.11.
Вопрос в том, как определить, достаточно ли «похожи» множество промежутков времени между поступлениями или интенсивность обслуживания на то, что изображено на рис. 9.10? Для определения степени соответствия набора значений некоторому распределению статистики применяют критерий согласия хи-квадрат (chi-square goodness-of-fit test). Программа на Perl в примере 9.4 проверяет степень соответствия набора чисел, хранящегося в файле, экспоненциальному распределению. Она выносит вердикт: «Accept» (соответствует), «Almost suspect» (почти сомнительна), «Suspect» (вызывает сомнения) или «Re-ject» (не соответствует), основываясь на процедуре, рекомендованнойв [Knuth (1981) 43-44]. Если данных слишком мало для выполнения теста «хи-квадрат», программа выдаст соответствующее сообщение. Если же по отношению к измеренным значениям времени между поступлениями запросов и времени обслуживания будет вынесен вердикт «Accept» или «Almost suspect», то можно не без оснований считать, что модель M/M/m даст достоверные результаты.
Модель M/M/m сформирует достоверные прогнозы лишь в том случае, если и время между поступлениями запросов, и время обслуживания являются экспоненциально распределенными случайными величинами. Другие модели массового обслуживания могут предложить точные прогнозы для систем, в которых эти характеристики не подчиняются экспоненциальному распределению. Я сосредоточился на модели M/M/m потому, что она во многих случаях очень удачно подходит для анализа производительности Oracle. При работе над проектами повышения производительности Oracle обычно удается выделить подмножества рабочей нагрузки, удовлетворяющие условиям M/M, например:
• Легко проверить экспоненциальность распределения времени между поступлениями запросов и времени обслуживания при выполнении пакетных заданий. Хороший диспетчер очереди пакетных заданий записывает время постановки задания в очередь, время начала и завершения выполнения заданий для последующего анализа. Время между поступлениями заданий - это просто разность времен постановки в очередь для данного и предыдущего по отношению к нему задания. Время обслуживания задания - это разность времени завершения и времени начала выполнения задания. Получив 50 или более значений времени между поступлениями заданий и 50 или более значений времени обслуживания, можно определить, подчиняется ли данное подмножество пакетных заданий M/M-ус-ловиям модели M/M/m.
Важно применять модель M/M/m только для подмножества пакетных данных, демонстрирующего соответствующее поведение. Например, если рассматривать время между поступлениями пакетных заданий на протяжении 24-часового периода, то они вероятнее всего не будут распределены экспоненциально - ночной интервал наверняка будет значительно больше дневного. Аналогично, время обслуживания всех пакетных заданий также вряд ли будет распределено экспоненциально. А вот время обслуживания всех заданий, выполненных в течение менее одной минуты, скорее всего будет подчиняться экспоненциальному распределению.
• Логический ввод/вывод Oracle (LIO) удобно использовать в качестве единицы измерения запросов на обслуживание. В Oracle невозможно напрямую измерить интервалы между поступлениями или время обслуживания LIO, но интуиция и успешный опыт применения M/M/m для моделирования производительности LIO указывают на то, что в действительности время между поступлениями и время обслуживания LIO распределены экспоненциально. Исполнение любой бизнес-функции можно представить в терминах количества выполненных LIO, так что результат применения модели массового обслуживания можно выразить в терминах времени отклика и производительности бизнес-функции. Будет просто замечательно, если вы сможете думать о функциях приложения в терминах количества исполняемых LIO!
Все хорошие книги по теории массового обслуживания сообщают своим читателям, что прежде чем применять модель M/M/m, необходимо убедиться в экспоненциальном характере распределения времени между поступлениями запросов и времени обслуживания в моделируемой системе. Трудность в том, что большая часть этих хороших книг не дает никакого практического совета о том, как в этом бы убедиться. Такую задачу может выполнить программа на Perl, приведенная в примере 9.4. Ее идея подсказана мне работой [Allen (1994) 224-225]. В реализации я руководствовался в основном книгой [Knuth (1981) 38-45] с дополнительным привлечением средств пакета Mathematica, [Olkin et al. (1994)], [CRC (1991)] и ресурсов http://www.cpan.org.
Для того чтобы начать работу с программой, загрузите исходный текст в систему, где установлен Perl. В Unix (Linux, HP-UX, Solaris, AIX и т. д.), вы, вероятно, назовете этот файл mdist. В Windows он, вероятно, будет назван mdist.pl. Возможно, что в Unix-системе придется отредактировать первую строку кода, указав там точную ссылку на исполняемый файл Perl (может быть, например, исполняемый файл называется /usr/local/bin/perl). Затем наберите в командной строке perldoc mdist (или perldoc mdist. pl) для обращения к странице руководства для данной программы.
Прелесть M/M/m в том, что применение модели делает возможным проведение экспериментов с такими параметрами, манипулирование которыми в реальной жизни обошлось бы слишком дорого. В этом разделе мы поговорим об интересных особенностях поведения M/M/m. Эти особенности помогут понять, как избежать проблем с производительностью, которым подвержены реальные многоканальные системы массового обслуживания. В результате вы, вероятно, начнете гораздо глубже разбираться в системе Oracle.
< Предыдущая | Следующая > |
---|