性能模式功能(sys)
从MySQL 8.0.16开始,MySQL包含格式化或检索“性能模式”数据的内置SQL函数,它们可用作等效的sys
模式存储功能的等效项。内置函数可以在任何模式中调用,并且不需要限定符,这与sys
需要sys.
模式限定符或sys
当前模式的函数不同。
表性能架构功能
名称 | 描述 |
---|---|
FORMAT_BYTES() (引入8.0.16) | 将字节数转换为单位的值 |
FORMAT_PICO_TIME() (引入8.0.16) | 将以皮秒为单位的时间转换为单位的值 |
PS_CURRENT_THREAD_ID() (引入8.0.16) | 当前线程的性能架构线程ID |
PS_THREAD_ID() (引入8.0.16) | 给定线程的性能架构线程ID |
内置函数将取代相应的sys
函数,不推荐使用的函数将在以后的MySQL版本中删除。使用sys
功能的应用程序应调整为使用内置功能,但要记住sys
功能和内置功能之间的一些细微差异。有关这些差异的详细信息,请参阅本节中的功能描述。
FORMAT_BYTES(count)
给定一个数字字节计数,将其转换为人类可读的格式,并返回一个由值和单位指示符组成的字符串。该字符串包含四舍五入到小数点后两位的字节数,至少3个有效数字。小于1024字节的数字表示为整数,不进行四舍五入。
单位指示符取决于字节计数参数的大小,如下表所示。
参数值 结果单位 结果单位指标 高达1023 个字节 个字节 最高1024 2 − 1 千字节 KiB 高达1024 3 − 1 兆字节 MiB 高达1024 4 − 1 吉字节 吉卜 高达1024 5 − 1 兆字节 钛 高达1024 6 − 1 PB PiB 1024 6以上 十亿字节 银行 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中添加。记住以下区别,可以用它代替sys
模式format_bytes()
函数:FORMAT_BYTES()
使用EiB
单位指示器。sys.format_bytes()
才不是。
FORMAT_PICO_TIME(time_val)
给定数字性能模式延迟或等待时间(以皮秒为单位),将其转换为人类可读的格式,并返回由值和单位指示符组成的字符串。该字符串包含十进制时间,四舍五入到小数点后两位,并且最少3个有效数字。1纳秒以下的时间以整数表示,不进行四舍五入。
单位指示符取决于时间值参数的大小,如下表所示。
参数值 结果单位 结果单位指标 最高10 3 − 1 皮秒 ps 高达10 6 − 1 纳秒 ns 高达10 9 − 1 微秒 我们 最高10 12 − 1 毫秒 女士 高达60×10 12 − 1 秒 s 高达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中添加。记住这些差异,可以用它代替sys
模式format_time()
功能:- 要表示分钟,请
sys.format_time()
使用m
单位指示器,而FORMAT_PICO_TIME()
使用min
。 sys.format_time()
使用w
(星期)单位指示器。FORMAT_PICO_TIME()
才不是。
- 要表示分钟,请
PS_CURRENT_THREAD_ID()
返回一个
BIGINT UNSIGNED
值,该值表示分配给当前连接的性能架构线程ID。线程ID返回值是
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 | +------------------------------- +PS_CURRENT_THREAD_ID()
已在MySQL 8.0.16中添加。它可以用作使用参数或调用sys
架构ps_thread_id()
函数的快捷方式。NULL
CONNECTION_ID()
PS_THREAD_ID(connection_id)
给定一个连接ID,则返回一个
BIGINT UNSIGNED
值,该值表示分配给该连接ID的性能架构线程ID,或者NULL
如果该连接ID 不存在线程ID,则返回一个值。后者可能发生在未检测的线程上。连接ID参数是在
PROCESSLIST_ID
“性能模式”threads
表的Id
列或SHOW PROCESSLIST
输出的列中给定的类型的值。线程ID返回值是
THREAD_ID
Performance Schema表的列中给定类型的值。性能架构配置会影响
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()
已在MySQL 8.0.16中添加。记住以下区别,可以用它代替sys
模式ps_thread_id()
函数:- 参数为时
NULL
,sys.ps_thread_id()
返回当前连接的线程ID,而PS_THREAD_ID()
返回NULL
。要获取当前的连接线程ID,请PS_CURRENT_THREAD_ID()
改用。
- 禁用