Spec-Zone .ru
спецификации, руководства, описания, API
|
События собираются посредством инструментария, добавленного к исходному коду сервера. Инструментальные события времени, который является, как Схема Производительности обеспечивает идею того, сколько времени события берут. Также возможно сконфигурировать инструменты, чтобы не собрать информацию синхронизации. Этот раздел обсуждает доступные таймеры и их характеристики, и как значения синхронизации представляются в событиях.
Две таблицы предоставляют информацию о таймере:
performance_timers
перечисляет доступные таймеры и их характеристики.
setup_timers
указывает, какие таймеры используются для который
инструменты.
Каждая строка таймера в setup_timers
должен обратиться к одному из таймеров, перечисленных в performance_timers
.
Таймеры изменяются по точности и количеству издержек, которые они включают. Чтобы видеть, какие таймеры доступны
и их характеристики, проверьте performance_timers
таблица:
mysql> SELECT * FROM
performance_timers;
+-------------+-----------------+------------------+----------------+| TIMER_NAME | TIMER_FREQUENCY | TIMER_RESOLUTION | TIMER_OVERHEAD |+-------------+-----------------+------------------+----------------+| CYCLE | 2389029850 | 1 | 72 || NANOSECOND | NULL | NULL | NULL || MICROSECOND | 1000000 | 1 | 585 || MILLISECOND | 1035 | 1 | 738 || TICK | 101 | 1 | 630 |+-------------+-----------------+------------------+----------------+
TIMER_NAME
столбец показывает имена доступных таймеров. CYCLE
обращается к таймеру, который основан на ЦП (процессор) счетчик циклов. Если
значения, связанные с данным именем таймера, NULL
, тот таймер не поддерживается на
Вашей платформе. Строки, которые не имеют NULL
укажите, в каких таймерах можно
использовать setup_timers
.
TIMER_FREQUENCY
указывает на число модулей таймера в секунду. Для счетчика циклов
частота обычно связывается со скоростью ЦП. Показанное значение было получено на системе с 2.4GHz процессор.
Другие таймеры основаны на фиксированных частях секунд. Для TICK
, частота может
измениться платформой (например, некоторое использование 100 галочек / второй, другие 1000 галочек / второй).
TIMER_RESOLUTION
указывает на число модулей таймера, которыми таймер оценивает
увеличение за один раз. Если у таймера есть разрешение 10, его увеличения значения к 10 каждым разам.
TIMER_OVERHEAD
минимальное число циклов издержек, чтобы получить одну синхронизацию
с данным таймером. Издержки на событие являются дважды значением, выведенным на экран, потому что таймер
вызывается вначале и конец события.
Чтобы видеть, который таймер в действительности или изменить таймер, получите доступ setup_timers
таблица:
mysql>SELECT * FROM setup_timers;
+-----------+-------------+| NAME | TIMER_NAME |+-----------+-------------+| idle | MICROSECOND || wait | NANOSECOND || stage | NANOSECOND || statement | NANOSECOND |+-----------+-------------+mysql>UPDATE setup_timers SET TIMER_NAME = 'MICROSECOND'
->WHERE NAME = 'wait';
mysql>SELECT * FROM setup_timers;
+-----------+-------------+| NAME | TIMER_NAME |+-----------+-------------+| idle | MICROSECOND || wait | MICROSECOND || stage | NANOSECOND || statement | NANOSECOND |+-----------+-------------+
По умолчанию Схема Производительности использует лучший таймер, доступный для каждого инструментального типа, но можно выбрать различный.
Ко времени ожидает, самый важный критерий должен уменьшить издержки, за возможный счет точности таймера, таким
образом используя CYCLE
таймер является лучшим.
Время, которое оператор (или этап) занимает, чтобы выполниться, находится в общих порядках величины, больше чем
время, которое требуется, чтобы выполниться, сингл ожидают. К операторам времени у самого важного критерия
должна быть точная мера, на которую не влияют изменения в частоте процессора, таким образом используя таймер,
который не основан на циклах, является лучшим. Таймер значения по умолчанию для операторов NANOSECOND
. Дополнительные "издержки"
по сравнению со счетчиком циклов не являются существенными, потому что издержки, вызванные, вызывая таймер
дважды (однажды, когда оператор запускается, однажды, когда это заканчивается), являются порядками величины
меньше по сравнению с процессорным временем, используемым, чтобы выполнить оператор непосредственно. Используя
CYCLE
таймер не обладает никаким преимуществом здесь, только недостатки.
Точность, предлагаемая счетчиком циклов, зависит от скорости процессора. Если процессор достигает 1 ГГц (один
миллиард циклов / второй) или выше, счетчик циклов поставляет точность поднаносекунды. Используя счетчик циклов
намного более дешево чем получение фактического времени суток. Например, стандарт gettimeofday()
функция может взять сотни циклов, который является недопустимыми издержками для сбора данных, который может
произойти тысячи или миллионы времен в секунду.
У счетчиков циклов также есть недостатки:
Конечные пользователи ожидают видеть синхронизации в тактовых стеной модулях, таких как части секунды. Преобразование от циклов до частей секунд может быть дорогим. Поэтому преобразование является быстрой и довольно грубой работой умножения.
Уровень цикла процессора мог бы измениться, такой как тогда, когда ноутбук входит в сохраняющий питание режим или когда ЦП замедляется, чтобы уменьшить генерацию тепла. Если уровень цикла процессора колеблется, преобразование от циклов до модулей в реальном времени подвергается ошибке.
Счетчики циклов могли бы быть ненадежными или недоступными в зависимости от
процессора или операционной системы. Например, на Pentiums, инструкция RDTSC
(ассемблер, а не инструкция C), и для операционной системы
теоретически возможно препятствовать тому, чтобы программы непривилегированного режима использовали это.
Некоторые детали процессора, связанные с выполнением с изменением последовательности или многопроцессорной синхронизацией, могли бы вызвать в противоречии с, кажутся быстрыми или медленными до 1000 циклов.
В настоящий момент MySQL работает со счетчиками циклов над x386 (Windows, Mac OS X, Linux, Солярис, и другие разновидности Unix), PowerPC, и IA-64.
setup_instruments
таблица имеет
ENABLED
столбец, чтобы указать на инструменты, для которых можно собрать события. У
таблицы также есть a TIMED
столбец, чтобы указать, какие инструменты
синхронизированы. Если инструмент не включается, он не производит событий. Если включенный инструмент не
синхронизирован, события, произведенные инструментом, имеют NULL
для TIMER_START
, TIMER_END
, и TIMER_WAIT
значения таймера. Это поочередно заставляет те значения быть проигнорированными, вычисляя сумму, минимум,
максимум, и средние временные стоимости в сводных таблицах.
В пределах событий времена сохранены в пикосекундах (trillionths секунды), чтобы нормализовать их к стандартному модулю, независимо от которого выбирается таймер. Таймер, используемый для события, является тем в действительности, когда синхронизация события начинается. Этот таймер используется, чтобы преобразовать, запускают и заканчивают значения к пикосекундам для хранения в конечном счете.
Модификации к setup_timers
таблица
сразу влияет на контроль. События уже в продвижении используют исходный таймер в течение начать времени и новый
таймер в течение времени окончания, которое приводит к непредсказуемым результатам. Если Вы производите
изменения таймера, можно хотеть использовать TRUNCATE
TABLE
сбрасывать статистику Схемы Производительности.
Базовая линия таймера ("нуль времени")
происходит в инициализации Схемы Производительности во время запуска сервера. TIMER_START
и TIMER_END
значения в событиях
представляют пикосекунды начиная с базовой линии. TIMER_WAIT
значения являются
продолжительностями в пикосекундах.
Значения пикосекунды в событиях приблизительны. Их точность подвергается обычным формам ошибки, связанной с
преобразованием от одного модуля до другого. Если CYCLE
таймер используется, и
уровень процессора изменяется, мог бы быть дрейф. По этим причинам не разумно смотреть на TIMER_START
значение для события как точная мера времени, законченного начиная с запуска сервера. С другой стороны разумно
использовать TIMER_START
или TIMER_WAIT
значения в
ORDER BY
пункты, чтобы упорядочить события ко времени запуска или
продолжительности.
У выбора пикосекунд в событиях, а не значении, таких как микросекунды есть основание производительности. Одна
цель реализации состояла в том, чтобы показать результаты в универсальной единице измерения времени, независимо
от таймера. В идеальном мире эта единица измерения времени была бы похожа на тактовый стеной модуль и была бы
разумно точна; другими словами, микросекунды. Но преобразовать циклы или наносекунды к микросекундам, было бы
необходимо выполнить подразделение для каждого инструментария. Подразделение дорого на многих платформах.
Умножение не дорого, так, чтобы был тем, что используется. Поэтому, единица измерения времени является
целочисленным кратным числом максимально возможного TIMER_FREQUENCY
значение,
используя множитель, достаточно большой, чтобы гарантировать, что нет никакой крупной потери точности. Результат
состоит в том, что единица измерения времени является "пикосекундами".
Эта точность является побочной, но решение позволяет издержкам быть минимизированными.