Spec-Zone.ru › MySQL 9.2

14.22 Функции Performance Schema

MySQL включает встроенные SQL-функции, которые форматируют или извлекают данные Performance Schema и могут быть использованы в качестве эквивалентов соответствующим sys схемам хранимых функций. Встроенные функции могут вызываться в любой схеме и не требуют квалификатора, в отличие от sys функций, которые требуют либо квалификатора схемы sys., либо чтобы sys была текущей схемой.

Таблица 14.32 Функции Performance Schema

Таблица 14.32 Функции Performance Schema
Имя Описание
FORMAT_BYTES() Преобразовать количество байтов в значение с единицами измерения
FORMAT_PICO_TIME() Преобразовать время в пикосекундах в значение с единицами измерения
PS_CURRENT_THREAD_ID() Идентификатор потока Performance Schema для текущего потока
PS_THREAD_ID() Идентификатор потока Performance Schema для заданного потока

Встроенные функции заменяют соответствующие устаревшие sys функции; ожидается их удаление в будущей версии MySQL. Приложения, использующие sys функции, должны быть адаптированы к использованию встроенных функций, учитывая некоторые незначительные различия между sys функциями и встроенными функциями. Подробную информацию об этих различиях см. в описаниях функций в этом разделе.

  • FORMAT_BYTES(count)

    Принимая числовое значение количества байтов, преобразует его в удобочитаемый формат и возвращает строку, содержащую значение и индикатор единиц измерения. Строка содержит число байтов, округлённое до 2 десятичных знаков и с минимально 3 значащими цифрами. Числа, меньшие 1024 байт, представляются целыми числами и не округляются. Возвращает NULL, если count равно NULL.

    Индикатор единиц измерения зависит от размера аргумента количества байтов, как показано в следующей таблице.

    Значение аргумента Результат Единицы Индикатор Результата Единиц
    До 1023 байты байты
    До 10242 − 1 кибибайты KiB
    До 10243 − 1 мебибайты MiB
    До 10244 − 1 гибибайты GiB
    До 10245 − 1 тебибайты TiB
    До 10246 − 1 пебибайты PiB
    10246 и выше эксабайты EiB
    mysql> SELECT FORMAT_BYTES(512), FORMAT_BYTES(18446644073709551615);
    +-------------------+------------------------------------+
    | FORMAT_BYTES(512) | FORMAT_BYTES(18446644073709551615) |
    +-------------------+------------------------------------+
    |  512 bytes        | 16.00 EiB                          |
    +-------------------+------------------------------------+
    

    FORMAT_BYTES() может быть использован вместо функции sys схемы format_bytes(), учитывая это различие:

    • FORMAT_BYTES() использует индикатор единиц измерения EiB. sys.format_bytes() — нет.

  • FORMAT_PICO_TIME(time_val)

    Принимая числовое значение задержки или времени ожидания Performance Schema в пикосекундах, преобразует его в удобочитаемый формат и возвращает строку, содержащую значение и индикатор единиц измерения. Строка содержит десятичное время, округлённое до 2 десятичных знаков и с минимально 3 значащими цифрами. Времена менее 1 наносекунды отображаются как целые числа и не округляются.

    Если time_val равно NULL, эта функция возвращает NULL.

    Индикатор единиц измерения зависит от размера аргумента времени, как показано в следующей таблице.

    Значение аргумента Результат Единицы Индикатор Результата Единиц
    До 103 − 1 пикосекунды ps
    До 106 − 1 наносекунды ns
    До 109 − 1 микросекунды us
    До 1012 − 1 миллисекунды ms
    До 60×1012 − 1 секунды s
    До 3.6×1015 − 1 минуты min
    До 8.64×1016 − 1 часы h
    8.64×1016 и выше дни d
    mysql> SELECT FORMAT_PICO_TIME(3501), FORMAT_PICO_TIME(188732396662000);
    +------------------------+-----------------------------------+
    | FORMAT_PICO_TIME(3501) | FORMAT_PICO_TIME(188732396662000) |
    +------------------------+-----------------------------------+
    | 3.50 ns                | 3.15 min                          |
    +------------------------+-----------------------------------+
    

    FORMAT_PICO_TIME() может использоваться вместо функции sys схемы format_time(), имея в виду эти различия:

    • Для обозначения минут, sys.format_time() использует индикатор единиц измерения m, в то время как FORMAT_PICO_TIME() использует min.

    • sys.format_time() использует индикатор единиц измерения w (недели). FORMAT_PICO_TIME() — нет.

  • PS_CURRENT_THREAD_ID()

    Возвращает значение BIGINT UNSIGNED, представляющее идентификатор потока Performance Schema, назначенный текущему соединению.

    Значение возвращаемого идентификатора потока является значением типа, указанного в столбце THREAD_ID таблиц Performance Schema.

    Конфигурация Performance Schema влияет на PS_CURRENT_THREAD_ID() так же, как и на PS_THREAD_ID(). Подробности см. в описании этой функции.

    mysql> SELECT PS_CURRENT_THREAD_ID();
    +------------------------+
    | PS_CURRENT_THREAD_ID() |
    +------------------------+
    |                     52 |
    +------------------------+
    mysql> SELECT PS_THREAD_ID(CONNECTION_ID());
    +-------------------------------+
    | PS_THREAD_ID(CONNECTION_ID()) |
    +-------------------------------+
    |                            52 |
    +-------------------------------+
    

    PS_CURRENT_THREAD_ID() может быть использован как сокращение для вызова функции sys схемы ps_thread_id() с аргументом NULL или CONNECTION_ID().

  • PS_THREAD_ID(connection_id)

    Принимая идентификатор соединения, возвращает значение BIGINT UNSIGNED, представляющее идентификатор потока Performance Schema, назначенный идентификатору соединения, или NULL, если для идентификатора соединения нет идентификатора потока. Последнее может произойти для потоков, которые не отслеживаются, или если connection_id равно NULL.

    Аргумент идентификатора соединения является значением типа, указанным в столбце PROCESSLIST_ID таблицы Performance Schema threads или столбце Id вывода SHOW PROCESSLIST.

    Возвращаемое значение идентификатора потока — это значение типа, указанного в столбце THREAD_ID таблиц Performance Schema.

    Конфигурация Performance Schema влияет на работу PS_THREAD_ID() следующим образом. (Эти замечания также относятся к PS_CURRENT_THREAD_ID().)

    • Отключение потребителя thread_instrumentation отключает сбор и агрегацию статистических данных на уровне потоков, но не влияет на PS_THREAD_ID().

    • Если performance_schema_max_thread_instances не равно 0, Performance Schema выделяет память для статистики потоков и присваивает внутренний идентификатор каждому потоку, для которого доступна память экземпляра. Если есть потоки, для которых память экземпляра недоступна, PS_THREAD_ID() возвращает NULL; в этом случае Performance_schema_thread_instances_lost отлично от нуля.

    • Если performance_schema_max_thread_instances равно 0, Performance Schema не выделяет память для потоков и PS_THREAD_ID() возвращает NULL.

    • Если сам Performance Schema отключен, PS_THREAD_ID() генерирует ошибку.

    mysql> SELECT PS_THREAD_ID(6);
    +-----------------+
    | PS_THREAD_ID(6) |
    +-----------------+
    |              45 |
    +-----------------+
    

    PS_THREAD_ID() может использоваться вместо функции sys схемы ps_thread_id(), имея в виду это различие:

    • С аргументом NULL, sys.ps_thread_id() возвращает идентификатор потока для текущего соединения, в то время как PS_THREAD_ID() возвращает NULL. Чтобы получить идентификатор потока текущего соединения, используйте PS_CURRENT_THREAD_ID() вместо этого.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-9.2-en/performance-schema-functions.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API