Kundb语句事件表 TIMER_START/TIMER_END转换成标准时间

  其他常见问题
内容纲要

概要描述


本文主要介绍,如何将 前语句事件表events_statements_current历史语句事件表events_statements_history中的 TIMER_STARTTIMER_END转换成标准时间格式。

详细说明


TIMER_START 和 TIMER_END 字段表示的是事件开始和结束的时间戳,但这些时间戳并不是以常见的日期时间格式存储的。相反,它们是以某个固定时间点(通常是服务器启动时间)为基准的相对时间戳。因此,需要进行一些转换才能将这些时间戳转换为标准的时间格式。

以下是将 TIMER_START 转换为标准时间的步骤:

1.获取服务器的启动时间:你需要知道 MySQL 服务器的启动时间,因为 TIMER_START 和 TIMER_END 是相对于这个时间的。你可以通过查询 performance_schema.global_variables 表中的 uptime 变量来获取服务器已经运行的时间(以秒为单位),然后再结合当前系统时间来推算启动时间。
2.计算绝对时间:将 TIMER_START 或 TIMER_END 转换为相对于 Unix epoch(1970-01-01 00:00:00 UTC)的绝对时间戳。
3.格式化为标准时间:使用 MySQL 的日期时间函数将绝对时间戳转换为可读的时间格式。

下面是一个示例 SQL 查询,提供了两种函数逻辑

select   
DATE_SUB(now(),INTERVAL(SELECT variable_value FROM performance_schema.global_status WHERE variable_name='UPTIME')-a.TIMER_START*10e-13 second) start_time1,
FROM_UNIXTIME(UNIX_TIMESTAMP(NOW())-(SELECT variable_value FROM performance_schema.global_status WHERE variable_name='UPTIME') + (TIMER_START / 1000000000000)) AS start_time2,
DATE_SUB(now(),INTERVAL(SELECT variable_value FROM performance_schema.global_status WHERE variable_name='UPTIME')-a.TIMER_END*10e-13 second) end_time1,
FROM_UNIXTIME(UNIX_TIMESTAMP(NOW())-(SELECT variable_value FROM performance_schema.global_status WHERE variable_name='UPTIME') + (TIMER_END / 1000000000000)) AS end_time2
FROM performance_schema.events_statements_history a ;

或者可以写个function

create function lkw.f_convert_timer_to_utc(pi_timer bigint) returns timestamp(6) 
DETERMINISTIC 
begin    
    declare value_utc_time timestamp(6);    
    select FROM_UNIXTIME( (unix_timestamp(sysdate()) - variable_value) + pi_timer/1000000000000 )  from performance_schema.global_status where variable_name = 'Uptime' into value_utc_time;    
    return value_utc_time; 
end;

使用的时候直接调用即可:

select 
 lkw.f_convert_timer_to_utc(TIMER_START) run_start_time,
 lkw.f_convert_timer_to_utc(TIMER_END) run_end_time
from performance_schema.events_statements_history;

这篇文章对您有帮助吗?

平均评分 0 / 5. 次数: 0

尚无评价,您可以第一个评哦!

非常抱歉,这篇文章对您没有帮助.

烦请您告诉我们您的建议与意见,以便我们改进,谢谢您。