mysql performance_schema如何从events_statements_current表中获取事件时间

时间:2014-09-01 13:47:13

标签: mysql sql

我为此搜索了很多,并且没有人看到有人在谈论它,所以它一定是一个简单的问题,但它仍然让我难过。
此performance_schema表 - http://dev.mysql.com/doc/refman/5.6/en/events-statements-current-table.htm包含timer_start和TIMER_END列。根据文件" TIMER_START和TIMER_END值指示事件定时何时开始和结束" 。
一个小问题。这是一个很重要而不是约会。如何将其转换为日期?

我看到一位博主建议它是自服务器启动以来的时间单位数。在我的情况下,语句应该被测量为纳秒(10 ^ 9)。因此,如果我的timer_start值为3723676792253626000,那将意味着3723676792 s,这是不可能的,因为服务器正常运行时间是3723716秒。对这两个数字中的位数进行简单比较会让我觉得时间单位实际上是皮秒(10 ^ 12)。
所以问题是:
1. timer_start真的是上次重启的单位数吗? 2.如果是这样,为什么setup_timers表示纳秒时它以皮秒为单位?

TIA

2 个答案:

答案 0 :(得分:1)

以下是MySQL 5.7的更正版本:

SELECT
    DATE_SUB(NOW(), INTERVAL (SELECT VARIABLE_VALUE FROM performance_schema.global_status WHERE VARIABLE_NAME='UPTIME') - TIMER_START*10e-13 second) AS `start_time`,
    ROUND(timer_wait*10E-10, 3) AS `wait in (ms)`,
    sql_text,
    current_schema
FROM performance_schema.events_statements_history_long;

修正案是:

  • global_status获取performance_schema(在MySQL 5.7中引入)
  • 修复wait in (ms)(10E-8与10E-10)+格式化;示例测试是以下SQL查询:SELECT SLEEP(0.5)
  • 返回的列
  • 使用" long"历史表(events_statements_history_long

答案 1 :(得分:0)

好吧,我能够部分解决这个问题。对第一个问题的回答是肯定的。这是一个将timer_start值转换为人类可以识别的时间戳的查询:

select  
date_sub(now(),INTERVAL (select VARIABLE_VALUE from information_schema.global_status where variable_name='UPTIME')-TIMER_START*10e-13 second) `start_time`  
,timer_wait/10E-8 `wait in (ms)`  
,timer_wait  
,sql_text  
,digest_text   
from performance_schema.events_statements_history