Вы познакомились с формулами теории массового обслуживания. Теперь надо понять, как связаны с ними рабочие характеристики Oracle, а именно, как информация, полученная от так называемого «интерфейса ожидания», согласуется с теорией массового обслуживания? К сожалению, сама корпорация Oracle пришла к неверным выводам на эту тему. Статья 223117.1 Oracle MetaLink является тому примером:
Настройка производительности основывается на следующем фундаментальном отношении:
Время отклика = Время обслуживания + Время ожидания
Для базы данных Oracle «время обслуживания» измеряется при помощи статистики «время процессора, использованное данным сеансом», а «время ожидания» - при помощи событий ожидания (курсив автора).
Выделенная курсивом часть предложения ложна. На самом деле так называемое событие ожидания Oracle - это не то, о чем говорится в данном предложении.
Путаница начинается уже с названия «событие ожидания». Термин выбран неудачно, т. к. заставляет пользователей думать, что продолжительность события ядра Oracle равна задержке в очереди. Но это не соответствует действительности. Из главы 7 вы уже знаете, что продолжительность события ожидания на самом деле включает в себя ряд разнообразных составляющих. Компоненты времени отклика для отдельного вызова чтения операционной системы представлены на рис. 9.9.
Время ожидания Oracle, измеренное при выполнении системного вызова, - это общее фактическое время, прошедшее с момента последней инструкции, предшествующей выполнению вызова ОС и до первой инструкции, следующей за возвратом вызова ОС. Все, что происходит в интервале между моментами времени t0 и t1, - это время ожидания Oracle. На рис. 9.9 одно-единственное время ожидания Oracle включает в себя все перечисленные ниже составляющие:
SCPU
Время работы процессора, потраченное на подготовку системного вызова. Для вызова дискового чтения основная часть этого времени проходит в привилегированном режиме. Однако некоторые системные вызовы могут расходовать процессорное время и в пользовательском режиме.
"'disk
Задержка в очереди к дисковому устройству, которая на рисунке включает в себя задержку при передаче запроса от процессора к дисковому устройству.
sdisk
Время работы дискового устройства, включая задержку поиска, задержку вращения и задержку передачи данных обратно с устройства ввода/вывода в память, к которой обращается процессор.
Задержка в очереди к процессору, процесс находится в состоянии готовности к исполнению.
sCPU
Еще один период работы процессора, необходимый для завершения системного вызова. Кроме того, для одних вызовов процессорное время может расходоваться в привилегированном, а для других -в пользовательском режиме.
Надеюсь, теперь вы отчетливо понимаете, что время ожидания Oracle для вызова чтения ОС не совпадает с величиной u?disk. Для остальных системных вызовов ситуация будет аналогичной.
Прочитав несколько книг по теории массового обслуживания, можно еще сильнее запутаться в том, как же на самом деле измеряется время ожидания Oracle. Во всех источниках обычно употребляются одни и те же греческие буквы, под которыми подразумевается одно и то же, а вот формулы теории массового обслуживания авторы часто записывают по-разному (см. табл. 9.2).
Таблица 9.2. Пример представления формул теории массового обслуживания
Я перегруппировал члены в правой части каждого из равенств так, чтобы все они представляли одну и ту же сущность. Другими словами, W (Гюнтер и я) - это в точности то же самое, что Tq и Wq (Гросс и Хар-рис), а также wn (Клейнрок). Особенно сбивает с толку использование в разных книгах одних и тех же слов для обозначения абсолютно разных вещей, например:
Предполагаемое время ожидания устойчивой системы W равно времени обслуживания плюс задержка в очереди Wq [Gross and Harris (1998) 64].
Время отклика R равно сумме времени обслуживания S и времени, потраченного на ожидание в очереди W [Gunther (1998) 52].
Гросс и Харрис обозначают при помощи термина «время ожидания» то, что Гюнтер называет «временем отклика». Более того, разные авторы под термином «ожидание» подразумевают две абсолютно разные вещи. Если обратится к формуле R = S + W, то мы увидим, что Гросс и Харрис называют R ожиданием, а для Гюнтера ожидание - это W. По своей сути время ожидания Oracle ближе к определению Гросса и Харриса.
Итак, кто же прав? Выбор слов не имеет значения, важно лишь не смешивать подразумеваемые под ними понятия. Я выбрал обозначения, подобные используемым Джейном и Гюнтером, в основном потому, что именно с этих двух книг началось мое знакомство с теорией массового обслуживания. R, S и W можно называть любыми именами. Что неправильно, так это воспринимать время ожидания Oracle как одно из слагаемых правой части выражения R = S + W. На самом деле время ожидания Oracle - это время отклика для вызова операционной системы с точки зрения ядра Oracle. Ядро Oracle публикует значения времени ожидания во многих местах, в том числе в статистике ela встроках WAIT расширенной трассировки и в следующих фиксированных представлениях:
V$SESSION_WAIT.WAIT_TIME V$SESSION_EVENT.TIMEWAITED V$SESSION_EVENT.AVERAGE_WAIT V$SESSION_EVENT.MAX_WAIT V$SESSION_EVENT.TIME_WAITED_MICRO V$SYSTEM_EVENT.TIME_WAITED V$SYSTEM_EVENT.AVERAGE_WAIT V$SYSTEM_EVENT.TIME_WAITED_MICRO
Каждая из этих статистик ссылается на некий промежуток времени, включающий задержку в очереди для запрашиваемого устройства, но кроме этого время ожидания Oracle включает в себя и множество других составляющих времени отклика. Точнее говоря, время ожидания Oracle - это не W из отношения R = S + W теории массового обслуживания.
< Предыдущая | Следующая > |
---|