2014-09-01 504 views
1

我爲此搜索了很多內容,並沒有看到任何人在談論它,所以它肯定是一個簡單的問題,但它仍然讓我難倒了。
此performance_schema表 - http://dev.mysql.com/doc/refman/5.6/en/events-statements-current-table.htm具有timer_start和TIMER_END列。符合文檔「TIMER_START和TIMER_END值指示事件時序何時開始和結束」。
一個小問題。這是一個大事件,而不是約會。我如何將它轉換爲日期?mysql performance_schema如何從events_statements_current表中獲取事件時間

我看到一個博主建議它是服務器啓動以來的時間單位數。在我的情況下,陳述應該被測量到一個納秒(10^9)。因此,如果我的timer_start值爲3723676792253626000,這意味着3723676792秒,這是不可能的,因爲服務器正常運行時間爲3723716秒。對這兩個數字中的數字進行簡單比較會讓我認爲時間單位確實是皮秒(10^12)。
所以問題是:
1. is timer_start真的是從最後一次重啓的單位數?
2.如果是這樣,當setup_timers指示納秒時,爲什麼是皮秒?

TIA

回答

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 
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_statusperformance_schema(在MySQL 5.7引入)
  • 修復wait in (ms)(10E-8與10E-10)+對消光;例如測試的是下面的SQL查詢:SELECT SLEEP(0.5)
  • 返回列
  • 使用 「長」 歷史表(events_statements_history_long