为此我在谷歌上搜索了很多,但没有看到任何人谈论它,所以这一定是一个简单的问题,但它仍然让我感到难过。
此 performance_schema 表 - http://dev.mysql.com/doc/refman/5.6/en/events-statements-current-table.htm有 timer_start 和 TIMER_END 列。根据文档“TIMER_START 和 TIMER_END 值表示事件计时开始和结束的时间”。
一个小问题。这是一个 bigint 而不是日期。如何将其转换为日期?
我看到一位博主建议它是自服务器启动以来的时间单位数。在我的例子中,陈述应该被测量到纳秒 (10^9)。因此,如果我的 timer_start 值为 3723676792253626000,则意味着 3723676792 秒,这不太可能,因为服务器正常运行时间为 3723716 秒。简单比较这两个数字的位数会让我认为时间单位真的是皮秒 (10^12)。
所以问题是:
1. timer_start真的是从上次重启算起的单元数吗?
2. 如果是这样,为什么setup_timers 表示纳秒时它的单位是皮秒?
TIA
最佳答案
这是 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;
修复是:
- 从
performance_schema
获取global_status
(MySQL 5.7引入) - 修复
wait in (ms)
(10E-8 与 10E-10)+ 格式;示例测试是以下 SQL 查询:SELECT SLEEP(0.5)
- 返回的列
- 使用“长”历史表(
events_statements_history_long
)
关于mysql performance_schema 如何从 events_statements_current 表中获取事件时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25607249/