Documentation Home
MySQL 8.0 参考手册  / 第 12 章函数和运算符  /  12.22性能模式函数

12.22性能模式函数

从 MySQL 8.0.16 开始,MySQL 包含格式化或检索性能模式数据的内置 SQL 函数,并且可以用作相应sys模式存储函数的等效项。内置函数可以在任何模式中调用并且不需要限定符,这与需要模式限定符或当前模式 的sys 函数不同。sys.sys

表 12.27 性能模式函数

姓名 描述 介绍
FORMAT_BYTES() 将字节数转换为带单位的值 8.0.16
FORMAT_PICO_TIME() 将以皮秒为单位的时间转换为带单位的值 8.0.16
PS_CURRENT_THREAD_ID() 当前线程的 Performance Schema 线程 ID 8.0.16
PS_THREAD_ID() 给定线程的性能架构线程 ID 8.0.16

内置函数取代了相应的 sys函数,后者已被弃用;希望它们在未来版本的 MySQL 中被删除。使用函数的应用程序sys应该调整为使用内置函数,记住sys函数和内置函数之间的一些细微差别。有关这些差异的详细信息,请参阅本节中的功能说明。

  • FORMAT_BYTES(count)

    给定一个数字字节数,将其转换为人类可读的格式并返回一个由值和单位指示符组成的字符串。该字符串包含四舍五入到小数点后 2 位的字节数和至少 3 位有效数字。小于 1024 字节的数字表示为整数且不四舍五入。返回NULL如果 countNULL

    单位指示符取决于字节计数参数的大小,如下表所示。

    参数值 结果单位 结果单位指标
    高达 1023 字节 字节
    高达 1024 2 - 1 千比字节 KiB
    高达 1024 3 - 1 兆字节 军训局
    高达 1024 4 - 1 千兆字节 GiB
    高达 1024 5 - 1 太字节 钛硼
    高达 1024 6 - 1 pebibytes PIB
    1024 6及以上 十字节 EiB
    mysql> SELECT FORMAT_BYTES(512), FORMAT_BYTES(18446644073709551615);
    +-------------------+------------------------------------+
    | FORMAT_BYTES(512) | FORMAT_BYTES(18446644073709551615) |
    +-------------------+------------------------------------+
    |  512 bytes        | 16.00 EiB                          |
    +-------------------+------------------------------------+

    FORMAT_BYTES()在 MySQL 8.0.16 中添加。它可以用来代替 sysschema format_bytes()函数,记住这个区别:

  • FORMAT_PICO_TIME(time_val)

    给定一个数字性能模式延迟或等待时间(以皮秒为单位),将其转换为人类可读的格式并返回一个由值和单位指示符组成的字符串。该字符串包含四舍五入到小数点后 2 位的小数时间和至少 3 位有效数字。小于 1 纳秒的时间表示为整数且不四舍五入。

    如果time_valNULL,则此函数返回 NULL

    单位指示符取决于时间值参数的大小,如下表所示。

    参数值 结果单位 结果单位指标
    高达 10 3 − 1 皮秒 附言
    高达 10 6 − 1 纳秒 ns
    高达 10 9 − 1 微秒 我们
    高达 10 12 − 1 毫秒 小姐
    高达 60×10 12 − 1
    高达 3.6×10 15 − 1 分钟 分钟
    高达 8.64×10 16 − 1 小时 H
    8.64×10 16及以上 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()在 MySQL 8.0.16 中添加。它可以代替 sysschema format_time()函数使用,请记住以下差异:

  • PS_CURRENT_THREAD_ID()

    返回一个BIGINT UNSIGNED值,表示分配给当前连接的性能模式线程 ID。

    线程 ID 返回值是 THREAD_IDPerformance 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()在 MySQL 8.0.16 中添加。它可以用作调用参数为或 的sys模式 ps_thread_id()函数的快捷方式。 NULLCONNECTION_ID()

  • PS_THREAD_ID(connection_id)

    给定一个连接 ID,返回一个BIGINT UNSIGNED值,表示分配给连接 ID 的性能模式线程 ID,或者 NULL如果连接 ID 不存在线程 ID。后者可能发生在未检测的线程上,或者如果connection_idNULL

    连接 ID 参数是 PROCESSLIST_IDPerformance Schemathreads表的 Id列或SHOW PROCESSLIST输出列中给出的类型的值。

    线程 ID 返回值是 THREAD_IDPerformance Schema 表列中给出的类型的值。

    性能模式配置影响 PS_THREAD_ID()操作如下。(这些评论也适用于 PS_CURRENT_THREAD_ID()。)

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

    PS_THREAD_ID()在 MySQL 8.0.16 中添加。它可以用来代替 sysschema ps_thread_id()函数,记住这个区别: