Spec-Zone.ru › MySQL 8.4

14.21 Функции Performance Schema

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

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

Таблица 14.31 Функции 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 пикосекунды пс
    До 106 − 1 наносекунды нс
    До 109 − 1 микросекунды мкс
    До 1012 − 1 миллисекунды мс
    До 60×1012 − 1 секунды с
    До 3,6×1015 − 1 минуты мин
    До 8,64×1016 − 1 часы ч
    8,64×1016 и выше дни д
    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-8.4-en/performance-schema-functions.html

Spec-Zone.ru

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