MySQL 包含内置的 SQL 函数,用于格式化或检索性能模式数据,并且可以用作对应的 sys
模式存储函数的等效项。这些内置函数可以在任何模式中调用,不需要限定符,而 sys
函数需要 sys.
模式限定符或将 sys
作为当前模式。
表 14.31 性能模式函数
Name | Description |
---|---|
FORMAT_BYTES() |
将字节计数转换为带单位的值 |
FORMAT_PICO_TIME() |
将皮秒时间转换为带单位的值 |
PS_CURRENT_THREAD_ID() |
当前线程的性能模式线程 ID |
PS_THREAD_ID() |
给定线程的性能模式线程 ID |
内置函数取代了对应的 sys
函数,这些函数将在未来版本的 MySQL 中删除。使用 sys
函数的应用程序应该调整为使用内置函数,而不是 sys
函数,考虑到内置函数和 sys
函数之间的一些小差异。
-
给定一个数字字节计数,将其转换为人类可读的格式,并返回一个字符串,包括一个值和一个单位指示符。字符串包含四舍五入到 2 位小数的字节数和至少 3 个有效数字。小于 1024 字节的数字将表示为整数,不进行四舍五入。如果
count
为NULL
,则返回NULL
。单位指示符取决于字节计数参数的大小,如下表所示。
Argument Value Result Units Result Units Indicator Up to 1023 字节 字节 Up to 10242 − 1 kibibytes KiB Up to 10243 − 1 mebibytes MiB Up to 10244 − 1 gibibytes GiB Up to 10245 − 1 tebibytes TiB Up to 10246 − 1 pebibytes PiB 10246 and up exbibytes 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()
不使用。
-
-
给定一个性能模式延迟或等待时间(以皮秒为单位),将其转换为人类可读的格式,并返回一个字符串,包括一个值和一个单位指示符。字符串包含四舍五入到 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 FORMAT_PICO_TIME()
可以代替sys
模式的format_time()
函数,考虑到以下差异: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()
may be used instead of thesys
schemaformat_time()
function, keeping in mind these differences:-
以分钟为单位,
sys.format_time()
使用m
单位指示符,而FORMAT_PICO_TIME()
使用min
。 -
sys.format_time()
使用w
(weeks) 单位指示符。FORMAT_PICO_TIME()
不使用。
-
-
返回一个
BIGINT UNSIGNED
值,表示当前连接的性能模式线程 ID。线程 ID 返回值是性能模式表中的
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
。后者可能发生在未instrumented 的线程中,或者如果connection_id
是NULL
。连接 ID 参数是性能模式
threads
表或SHOW PROCESSLIST
输出中的PROCESSLIST_ID
列或Id
列中的值类型。线程 ID 返回值是性能模式表中的
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()
代替。
-