从 MySQL 8.0.16 开始,MySQL 包含了内置 SQL 函数用于格式化或检索 Performance Schema 数据,这些函数可以作为对应的 sys 模式存储函数的对等函数使用。内置函数可以在任何模式中调用,不需要任何限定符,不像 sys 函数,它只需要 sys. 模式限定符或 sys 为当前模式。 | | |
| | |
| | |
| 当前线程的 Performance Schema 线程ID | |
| 给定线程的 Performance Schema 线程 ID | |
内置函数取代了相应的 sys 函数,后者已弃用,预计在未来的 MySQL 版本中删除它们。使用 sys 函数的应用程序应该调整为使用内置函数,要注意 sys 函数和内置函数之间的一些细微差别。给定一个数字字节计数,将其转换为人类可读的格式,并返回一个由值和单位指示符组成的字符串。字符串包含四舍五入到 2 位小数点和至少 3 位有效数字的字节数。小于 1024 字节的数字用全部整数表示,不舍入。mysql> SELECT FORMAT_BYTES(512), FORMAT_BYTES(18446644073709551615);
+-------------------+------------------------------------+
| FORMAT_BYTES(512) | FORMAT_BYTES(18446644073709551615) |
+-------------------+------------------------------------+
| 512 bytes | 16.00 EiB |
+-------------------+------------------------------------+
在 MySQL 8.0.16 中添加了 FORMAT_BYTES()。它可以用来代替 sys 模式的 format_bytes() 函数,记住这个区别:■ FORMAT_BYTES() 使用 EiB 单位标识符。sys.format_bytes() 没有。● FORMAT_PICO_TIME(time_val)给定以皮秒为单位的数字时间值,将其转换为人类可读的格式,并返回一个由值和单位标识符组成的字符串。字符串包含四舍五入到2位小数点和至少3位有效数字的十进制时间。1 纳秒以下的时间用全部数字表示,而不进行四舍五入。mysql> SELECT FORMAT_PICO_TIME(3501), FORMAT_PICO_TIME(188732396662000);
+------------------------+-----------------------------------+
| FORMAT_PICO_TIME(3501) | FORMAT_PICO_TIME(188732396662000) |
+------------------------+-----------------------------------+
| 3.50 ns | 3.15 min |
+------------------------+-----------------------------------+
在 MySQL 8.0.16 中添加了 FORMAT_PICO_TIME()。它可以用来代替 sys 模式中的 format_time() 函数,记住这些区别:■ 为了表示分钟,sys.format_time() 使用 m 单位标识符,而 FORMAT_PICO_TIME() 使用 min。■ sys.format_time() 使用 w(周)单位标识符。FORMAT_PICO_TIME() 没有。返回一个 BIGINT UNSIGNED 值,表示分配给当前连接的 Performance Schema 线程 ID。线程 ID 返回值是 Performance Schema 表的 THREAD_ID 列中给定的类型。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 |
+-------------------------------+
在 MySQL 8.0.16 中添加了 PS_CURRENT_THREAD_ID()。它可以作为调用 sys 模式 ps_thread_id() 函数的快捷方式,参数为 NULL 或 CONNECTION_ID()。● PS_THREAD_ID(connection_id)给定一个连接 ID,返回一个 BIGINT UNSIGNED 值,表示分配给连接 ID 的 Performance Schema 线程 ID,如果连接 ID 不存在线程 ID,则返回 NULL。连接 ID 参数是 Performance Schema threads 表的 PROCESSLIST_ID 列或 SHOW PROCESSLIST 输出的 ID 列中给出的类型的值。Performance Schema 配置对 PS_THREAD_ID() 操作的影响如下。(这些注释也适用于 PS_CURRENT_THREAD_ID())■ 禁用 thread_instrumentation 消费者将禁止在线程级别收集和聚合统计信息,但对 PS_THREAD_ID() 没有影响。■ 如果 performance_schema_max_thread_instances 不为 0,则 Performance Schema 为线程统计分配内存,并为每个有实例内存可用的线程分配一个内部 ID。如果线程的实例内存不可用,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 |
+-----------------+
在 MySQL 8.0.16 中增加了 PS_THREAD_ID()。它可以用来代替 sys 模式的 ps_thread_id() 函数,记住这个区别:■ 如果参数为 NULL, sys.ps_thread_id() 将返回当前连接的线程 ID,而 PS_THREAD_ID() 将返回 NULL。要获取当前连接线程 ID,请使用 PS_CURRENT_THREAD_ID()。https://dev.mysql.com/doc/refman/8.0/en/performance-schema-functions.html