• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 性能模式功能(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 − 1PBPiB
      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 − 1s
      高达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_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中添加。它可以用作使用参数或调用sys架构ps_thread_id()函数的快捷方式。NULLCONNECTION_ID()

    • PS_THREAD_ID(connection_id)

      给定一个连接ID,则返回一个BIGINT UNSIGNED值,该值表示分配给该连接ID的性能架构线程ID,或者NULL如果该连接ID 不存在线程ID,则返回一个值。后者可能发生在未检测的线程上。

      连接ID参数是在PROCESSLIST_ID“性能模式”threads表的Id列或SHOW PROCESSLIST输出的列中给定的类型的值。

      线程ID返回值是THREAD_IDPerformance 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()函数:

      • 参数为时NULLsys.ps_thread_id()返回当前连接的线程ID,而PS_THREAD_ID()返回NULL。要获取当前的连接线程ID,请PS_CURRENT_THREAD_ID()改用。