14.21 性能模式函数
MySQL 包含了内置的 SQL 函数,这些函数用于格式化或检索性能模式数据,并且可以用作与对应 sys
架构存储函数相同的等效函数。这些内置函数可以在任何架构中调用,不需要前缀,和 sys
函数不同,它们需要使用 sys.
架构前缀或将 sys
设为当前架构。
表14.31 性能模式函数
Name | Description |
---|---|
FORMAT_字节() |
将字节数量转换为带单位的值 |
FORMAT_皮克秒时间() |
将以皮秒为单位的时间转换为带单位的值 |
PS_当前线程ID() |
性能模式中当前线程的ID |
PS_线程ID() |
给定线程的性能模式中的线程ID |
内置函数取代了对应 sys
函数,这些函数已被弃用;预计它们将在未来版本的 MySQL 中移除。使用 sys
函数的应用程序应该调整为使用内置函数,而考虑到与 sys
函数之间的一些微小差异。有关这些差异的详细信息,请参阅本节中的函数描述。
-
给定一个数字的字节数量,将其转换为人类可读的格式并返回一个字符串,该字符串包含一个值和单位指示器。字符串包含以 2 位小数表示的字节数量,并且至少有 3 个有效数字。数量少于 1024 字节将以整数形式表示,不进行四舍五入。如果
count
为NULL
,则该函数返回NULL
。单位指示器取决于字节数量参数的大小,如下表所示。
Argument Value Result Units Result Units Indicator Up to 1023 字节 字节 Up to 10242 − 1 千字节 KiB Up to 10243 − 1 兆字节 MiB Up to 10244 − 1 吉字节 GiB Up to 10245 − 1 太字节 TiB Up to 10246 − 1 皮字节 PiB 10246 and up 艾字节 EiB mysql> SELECT FORMAT_BYTES(512), FORMAT_BYTES(18446644073709551615); +-------------------+------------------------------------+ | FORMAT_BYTES(512) | FORMAT_BYTES(18446644073709551615) | +-------------------+------------------------------------+ | 512 bytes | 16.00 EiB | +-------------------+------------------------------------+
FORMAT_字节()
可以用来替代sys
架构中的format_bytes()
函数,考虑到以下差异:-
FORMAT_字节()
使用EiB
单位指示器。sys.format_bytes()
不使用。
-
-
给定一个以皮秒为单位的性能模式延迟或等待时间,将其转换为人类可读的格式并返回一个字符串,该字符串包含一个值和单位指示器。字符串包含以 2 位小数表示的时间,并且至少有 3 个有效数字。时间少于 1 纳秒将以整数形式表示,不进行四舍五入。
如果
time_val
为NULL
,则该函数返回NULL
。单位指示器取决于时间值参数的大小,如下表所示。
Argument Value Result Units Result Units Indicator Up to 103 − 1 皮秒 ps Up to 106 − 1 纳秒 ns Up to 109 − 1 微秒 us Up to 1012 − 1 毫秒 ms Up to 60×1012 − 1 秒 s Up to 3.6×1015 − 1 分钟 min Up to 8.64×1016 − 1 小时 h 8.64×1016 and up 天 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_皮秒时间()
可以用来替代sys
架构中的format_time()
函数,考虑到以下差异:-
为了表示分钟数,
sys.format_time()
使用m
单位指示符,而FORMAT_PICO_TIME()
使用min
。 -
sys.format_time()
使用w
(周)单位指示符。FORMAT_PICO_TIME()
不使用。
-
-
返回一个
BIGINT UNSIGNED
值,表示分配给当前连接的性能模式线程 ID。返回的线程 ID 值是 Performance Schema 表中
THREAD_ID
列所指定的类型。性能模式配置对
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()
的快捷方式。 -
给定一个连接 ID,返回一个
BIGINT UNSIGNED
值,表示分配给该连接 ID 的性能模式线程 ID,或者如果没有为该连接 ID 分配线程 ID,则返回NULL
。后者可能发生在未被监视的线程上,或当connection_id
为NULL
时。连接 ID 参数是 Performance Schema
threads
表中PROCESSLIST_ ID
列或SHOW PROCESSLIST
输出中的Id
列的类型。返回的线程 ID 值是 Performance Schema 表中
THREAD_ID
列所指定的类型。性能模式配置对
PS_THREAD_ID()
的影响如下。(这些注释也适用于PS_CURRENT_THREAD_ID()
。)-
禁用
thread_instrumentation
消费者会阻止在线程级别收集和聚合统计信息,但对PS_THREAD_ID()
没有影响。 -
如果
performance_schema_max_thread_instances
不为 0,性能模式分配线程统计信息并将每个线程分配一个内部 ID,以便于有实例内存可用的线程。如果有没有实例内存的线程,则PS_THREAD_ID()
返回NULL
;在这种情况下,Performance_schema_thread_instances_lost
为非零。 -
如果
performance_schema_max_thread_instances
为 0,性能模式不分配线程内存,因此PS_THREAD_ID()
返回NULL
。 -
如果性能模式本身被禁用,则
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()
返回当前连接的线程 ID,而PS_THREAD_ID()
返回NULL
。要获取当前连接的线程 ID,请使用PS_CURRENT_THREAD_ID()
代替。
-