# 12.22 性能模式函数

从 MySQL 8.0.16 开始,MySQL 包含内置 SQL 函数,用于格式化或检索 Performance Schema 数据,并且可以用作相应的等价物系统模式存储函数。内置函数可以在任何模式中调用,不需要限定符,不像系统功能,这需要要么系统。架构限定符或那个系统成为当前架构。

表 12.27 性能模式函数

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

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

  • FORMAT_BYTES(*数数*)

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

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

    参数值 结果单位 结果单位指示符
    高达 1023 字节 字节
    高达 10242− 1 千字节 千字节
    高达 10243− 1 兆字节 小米B
    高达 10244− 1 千兆字节 千兆位
    高达 10245− 1 太字节 钛B
    高达 10246− 1 PB PiB
    10246及以上 亿字节 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 中添加。它可以用来代替系统图式格式字节()函数,记住这个区别:

  • FORMAT_PICO_TIME(*time_val*)

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

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

    参数值 结果单位 结果单位指示符
    高达103− 1 皮秒 ps
    高达106− 1 纳秒 ns
    高达109− 1 微秒 我们
    高达1012 − 1 毫秒 小姐
    高达 60×1012 − 1 s
    高达 3.6×1015 − 1 分钟 分钟
    高达 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()在 MySQL 8.0.16 中添加。它可以用来代替系统图式格式时间()功能,请记住以下差异:

  • PS_CURRENT_THREAD_ID()

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

    线程 ID 返回值是THREAD_IDPerformance 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 中添加。它可以用作调用系统图式ps_thread_id()带参数的函数空值要么CONNECTION_ID().

  • PS_THREAD_ID(*连接ID*)

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

    连接 ID 参数是在PROCESSLIST_ID性能模式的列线程表或Id显示进程列表输出。

    线程 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 中添加。它可以用来代替系统图式ps_thread_id()函数,记住这个区别: