DeepEdit!

Программирование баз данных на Oracle, техническая документация, литература, статьи и публикации

  • Увеличить размер шрифта
  • Размер шрифта по умолчанию
  • Уменьшить размер шрифта

Ошибка квантования

шибка квантования


Несколько лет назад один приятель убеждал меня в том, что расши­ренная трассировка SQL в Oracle бесперспективна для диагностики производительности. Он аргументировал это тем, что в эпоху гигагер­цевых процессоров разрешающая способность в одну сантисекунду то­гдашнего ядра Oracle8практически бесполезна. Однако во многих сотнях проектов в этой области расширенная трассировка SQL работа­ла практически безупречно (даже эта идея с сантисекундами из Oracle8себя оправдывала). Достоверность расширенной трассировки SQL трудно оценить, не понимая, что такое разрешающая способность измерений и ошибка квантования.
Разрешающая способность измерительной системы
Во времена моего детства одним из преимуществ жизни в эпоху про­гресса было изобретение электронного будильника. Цифровые часы чрезвычайно просты для восприятия, даже для маленького мальчика, который еще не умеет определять время по стрелочным часам. Тяжело ошибиться, когда видишь перед собой большие красные цифры «7:29». Имея дело с аналоговыми часами, ребенок может перепутать пять и семь часов, но отличие цифры 5 от 7 очевидно.
Но и у электронных часов есть свои проблемы. Как, посмотрев на элек­тронные часы, показывающие «7:29», определить, сколько осталось до 7:30? Проблема именно в том, что никак. Глядя на электронные ча­сы, нельзя сказать, сколько сейчас времени: 7:29:00, 7:29:59 или где-то посередине. Что касается стрелочных часов, то даже если на них нет секундной стрелки, всегда можно определить доли минуты по тому, насколько минутная стрелка близка к следующему делению на цифер­блате.
Все значения времени, измеряемые цифровыми компьютерами, полу­чены от интервальных таймеров, которые ведут себя как старые элек­тронные часы у нашего изголовья. Интервальный таймер - это устрой­ство, которое тикает через определенные интервалы времени. Значе­ния времени, полученные от интервального таймера, могут обладать интересными особенностями. Для того чтобы осознанно принимать ре­шения на основе данных, полученных от интервальных таймеров Ora­cle, необходимо осознавать ограниченность их возможностей.
Разрешающая способность интервального таймера - это период вре­мени между двумя последовательными тиками. Разрешающая способ­ность таймера - это величина, обратная частоте таймера. То есть таймер, тикающий с частотой 1 ГГц (приблизительно 109 тиков в секун­ду), имеет разрешающую способность приблизительно 1/109 секунд, или около 1 наносекунды. Чем больше значение разрешающей способ­ности таймера, тем менее точную информацию о продолжительности измеряемого события он может сообщить. Но для некоторых таймеров (в особенности реализованных программно) значительное уменьшение разрешающей способности может настолько увеличить накладные расходы системы, что это повлияет на характеристики производитель­ности измеряемого события.

Принцип неопределенности Гейзенберга и анализ компьютерной производительности
Проблема измерения продолжительности компьютерных событий по­средством дискретных часов аналогична знаменитому принципу неопре­деленности квантовой физики. Сформулированный Вернером Гейзен-бергом в 1926 году принцип неопределенности утверждает, что произве­дение неопределенности местоположения частицы на неопределенность скорости ее движения и на массу частицы не может быть меньше опре­деленной величины, называемой постоянной Планка [Hawking (1988) 55]. Следовательно, для очень маленьких частиц невозможно одновре­менно точно знать и где находится частица, и с какой скоростью она пе­ремещается.
Аналогично, некоторые вещи в вычислительной системе тяжело изме­рить очень точно, особенно при помощи программных часов. Уменьше­ние разрешающей способности приводит к более точным измерениям, но применение такого разрешения для программных часов может вы­звать значительное ухудшение производительности исследуемого при­ложения. Далее в главе будет рассмотрен такой пример (при обсужде­нии разрешающей способности системной функции getrusage).
В дополнение к тому влиянию, которое разрешающая способность ока­зывает на результат измерения временных характеристик приложения, на время исполнения пользовательской программы также воздействует и эффект влияния измерителя. Совокупное влияние такого незаплани­рованного поведения измерительных средств на производительность приложения создает то, что аналитики по производительности Oracle могут назвать аналогом эффекта Гейзенберга.

По мере передачи временной статистики от оборудования через раз­личные уровни прикладного программного обеспечения каждый из та­ких уровней может как оставить ее точность неизменной, так и ухуд­шить ее. Например:
• Разрешение результата системного вызова gettimeofday по стандарту POSIX равно одной микросекунде. Однако многие процессоры Intel Pentium содержат аппаратный счетчик временных меток, который обеспечивает разрешение в одну наносекунду. Например, в Linux вызов gettimeofday преобразует значение из наносекунд (10-9 секун­ды) в микросекунды (10-6 секунды), выполняя целочисленное деле­ние значения в наносекундах на 1000, что означает потерю трех последних разрядов.
• Статистика e в Oracle8i обладает разрешающей способностью в одну сантисекунду. Однако большинство современных операционных систем предоставляют информацию gettimeofday с точностью до мик­росекунды. Ядро Oracle8i преобразует значение из микросекунд (10-6 секунды) в сантисекунды (10-2 секунды), выполняя целочис­ленное деление значения в микросекундах на 10 000, что означает потерю четырех последних разрядов значения [Wood (2003)].
То есть фактически каждая величина e и ela, выведенная ядром Orac-le8i, представляет собой системную характеристику, значение кото­рой точно определить невозможно, известно лишь, что оно находится в определенном диапазоне. Такой диапазон значений представлен в табл. 7.1. Например, про величину e=2 в Oracle8i можно сказать, что на самом деле она может представлять любую длительность ea в сле­дующем диапазоне:
2,0000 сантисекунд < ea < 2,9999 сантисекунд
Таблица 7.1. Одно значение статистики e или ela в Oracle8i соответствует диапазону фактических значений времени

Статистика e, ela (сантисекунд)
Минимально возможное значение gettimeofday (сантисекунд)
Максимально возможное значение gettimeofday (сантисекунд)
0
1
2
3
0,000 000 1,000 000 2,000 000
3,000 000
0,999 999 1,999 999 2,999 999 3,999 999


 









jAntivirus