久久99久久人婷婷精品综合_超碰aⅴ人人做人人爽欧美_亚洲电影第三页_日韩欧美一中文字暮专区_波多野结衣的一区二区三区_婷婷在线播放_人人视频精品_国产精品日韩精品欧美精品_亚洲免费黄色_欧美性猛交xxxxxxxx

如何理解在MTS中Worker線程看到Time為負數-創新互聯

如何理解在MTS中Worker線程看到Time為負數,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

10年積累的成都網站設計、成都網站制作、外貿網站建設經驗,可以快速應對客戶對網站的新想法和需求。提供各種問題對應的解決方案。讓選擇我們的客戶得到更好、更有力的網絡服務。我雖然不認識你,你也不認識我。但先網站設計后付款的網站建設流程,更有溫泉免費網站建設讓你可以放心的選擇與我們合作。

一、問題來源

這是一個朋友問我的一個問題,問題如下,在MTS中Worker線程看到Time為負數是怎么回事,如下:

如何理解在MTS中Worker線程看到Time為負數

二、關于show processlist中的Time

實際上show processlist中的信息基本都來自函數 mysqld_list_processes,也就是說每次執行show processlist 都需要執行這個函數來進行填充。對于Time值來講它來自如下信息:

Percona :
time_t now= my_time(0);
 protocol->store_long ((thd_info->start_time > now) ? 0
        : (longlong) (now - thd_info->start_time));
官方版:
time_t now= my_time(0);
protocol->store_long ((longlong) (now - thd_info->start_time));

我們可以注意到在Percona的版本中對這個輸出值做了優化,也就是如果出現負數的時候直接顯示為0,但是官方版中沒有這樣做,可能出現負數。

三、計算方式解讀和測試

現在我們來看看這個簡單的計算公式,實際上now很好理解就是服務器的當前時間,重點就在于thd_info->start_time的取值來自何處。
實際這個時間來自于函數THD::set_time,但是需要注意的是這個函數會進行重載,有下面三種方式:

重載1

inline void set_time()
  {
    start_utime= utime_after_lock= my_micro_time();
    if (user_time.tv_sec || user_time.tv_usec)
    {
      start_time= user_time;
    }
    else
      my_micro_time_to_timeval(start_utime, &start_time);
...
  }

重載2

  inline void set_time(const struct timeval *t)
  {
    start_time= user_time= *t;
    start_utime= utime_after_lock= my_micro_time();
...
  }

重載3

  void set_time(QUERY_START_TIME_INFO *time_info)
  {
    start_time= time_info->start_time;
    start_utime= time_info->start_utime;
  }

其實簡單的說就是其中有一個start_utime,如果設置了start_utime那么start_time將會指定為start_utime,并且在重載1中將會不會修改start_time,這一點比較重要。

好了說了3種方式,我們來看看Time的計算有如下可能。

1、執行命令

如果主庫執行常見的命令都會在命令發起的時候調用重載1,設置start_time為命令開始執行的時間如下:

堆棧:
#0  THD::set_time (this=0x7ffe7c000c90) at /mysqldata/percona-server-locks-detail-5.7.22/sql/sql_class.h:3505
#1  0x00000000015c5fe8 in dispatch_command (thd=0x7ffe7c000c90, com_data=0x7fffec03fd70, command=COM_QUERY)
    at /mysqldata/percona-server-locks-detail-5.7.22/sql/sql_parse.cc:1247

可以看到這個函數沒有實參,因此start_time會設置為當前時間,那Time的計算公式 now - thd_info->start_time就等于 (服務器當前時間 - 命令開始執行的時間)。

2、從庫 單Sql線程 和 Worker線程

其實不管單Sql線程還是Worker線程都是執行Event的,這里的start_time將會被設置為Event header中timestamp的時間(query event/dml event),這個時間實際就是主庫命令發起的時間。如下:

堆棧:
query event:
#0  THD::set_time (this=0x7ffe78000950, t=0x7ffe701ec430) at /root/mysqlall/percona-server-locks-detail-5.7.22/sql/sql_class.h:3526
#1  0x00000000018459ab in Query_log_event::do_apply_event (this=0x7ffe701ec310, rli=0x7ffe7003c050, query_arg=0x7ffe701d88a9 "BEGIN", q_len_arg=5)
    at /root/mysqlall/percona-server-locks-detail-5.7.22/sql/log_event.cc:4714
堆棧:
dml event:
#0  THD::set_time (this=0x7ffe78000950, t=0x7ffe701ed5b8) at /root/mysqlall/percona-server-locks-detail-5.7.22/sql/sql_class.h:3526
#1  0x000000000185aa6e in Rows_log_event::do_apply_event (this=0x7ffe701ed330, rli=0x7ffe7003c050)
    at /root/mysqlall/percona-server-locks-detail-5.7.22/sql/log_event.cc:11417

我們看到這里有一個實參的傳入我們看一下代碼如下:

thd->set_time(&(common_header->when))

實際上就是這一行,這是我們前面說的重載3,這樣設置后start_utime和start_time都將會設置,即便調用重載1也不會更改, 那Time的計算方式 now - thd_info->start_time就等于 (從庫服務器當前時間 - Event header中的時間),但是要知道 Event header中的時間實際也是來自于主庫命令發起的時間。 既然如此如果從庫服務器的時間小于主庫服務器的時間,那么Time的結果可能是負數是可能出現的,當然Percona版本做了優化負數將會顯示為0,如果從庫服務器的時間大于主庫的時間那么可能看到Time比較大。

因為我的測試環境都是Percona,為了效果明顯,我們來測試一下Worker線程Time很大的情況,如下設置:

主庫:
[root@mysqltest2 test]# date
Fri Nov  1 01:40:54 CST 2019
從庫:
[root@gp1 log]# date 
Tue Nov 19 15:58:37 CST 2019

主庫隨便做一個命令,然后觀察如下:

如何理解在MTS中Worker線程看到Time為負數

3、設置timestamp

如果手動指定timestamp也會影響到Time的計算結果,因為start_utime和start_time都將會設置,如下:

mysql> set timestamp=1572540000
堆棧:
#0  THD::set_time (this=0x7ffe7c000c90, t=0x7fffec03db30) at /mysqldata/percona-server-locks-detail-5.7.22/sql/sql_class.h:3526
#1  0x000000000169e509 in update_timestamp (thd=0x7ffe7c000c90, var=0x7ffe7c006860) at /mysqldata/percona-server-locks-detail-5.7.22/sql/sys_vars.cc:4966
#2  0x00000000016b9a3d in Sys_var_session_special_double::session_update (this=0x2e68e20, thd=0x7ffe7c000c90, var=0x7ffe7c006860)
    at /mysqldata/percona-server-locks-detail-5.7.22/sql/sys_vars.h:1889

我們看到帶入了實參,我們看看代碼這一行如下:

 thd->set_time(&tmp);

這就是重載2了,這樣設置后start_utime和start_time都將會設置,即便調用重載1也不會更改,言外之意就是設置了timestamp后即便執行了其他的命令Time也不會更新。Time的計算方式 now - thd_info->start_time就等于 (服務器當前時間 - 設置的timestamp時間),這樣的話就可能出現Time出現異常,比如很大或者為負數(Percona為0)如下:

如何理解在MTS中Worker線程看到Time為負數

4、空閑情況下

如果我們的會話空閑狀態下那么now - thd_info->start_time 公式中,now會不斷變大,但是thd_info->start_time卻不會改變,因此Time 會不斷增大,等待到下一次命令到來后才會更改。

四、延伸

這里我想在說明一下如果從庫開啟了log_slave_updates 的情況下,從庫記錄會記錄來自主庫的Event,但是這些Event的timestamp和Query Event的exetime如何取值呢?

Event的timestamp的取值

其實上面我已經說了,因為 start_time將會被設置為Event header中timestamp的時間(query event/dml event),當記錄Evnet的時候這個時間和主庫基本一致,如下:

如何理解在MTS中Worker線程看到Time為負數

很明顯我們會發現這些Event的timestamp不是本地的時間,而是主庫的時間。

Query Event的exetime

我們先來看看這個時間的計算方式:

  ulonglong micro_end_time= my_micro_time();//這里獲取時間 query event
  my_micro_time_to_timeval(micro_end_time, &end_time);
  exec_time= end_time.tv_sec - thd_arg->start_time.tv_sec;//這里計算時間

相信對于  thd_arg->start_time而言已經不再陌生,它就是主庫命令發起的時間。我在我的《深入理解主從原理》系列中說過了,對于Query Event的exetime在 row格式binlog下,DML語句將會是第一行語句修改時間的時間,那么我們做如下定義(row格式 DML語句):

  • 主:主庫第一行數據修改完成的服務器時間 - 主庫本命令發起的時間

  • 從:從庫第一行數據修改完成的服務器時間 - 主庫本命令發起的時間

他們的差值就是:
(從庫第一行數據修改完成的服務器時間 - 主庫第一行數據修改完成的服務器時間 )

同樣如果我們從庫的時間遠遠大于主庫的時間,那么exetime也會出現異常如下:

如何理解在MTS中Worker線程看到Time為負數

Time是我們平時關注的一個指標,我們經常用它來表示我的語句執行了多久,但是如果出現異常的情況我們也應該能夠明白為什么,這里我將它的計算方式做了一個不完全的解釋。

關于如何理解在MTS中Worker線程看到Time為負數問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注創新互聯-成都網站建設公司行業資訊頻道了解更多相關知識。

文章題目:如何理解在MTS中Worker線程看到Time為負數-創新互聯
鏈接地址:http://www.js-pz168.com/article24/dgojje.html

成都網站建設公司_創新互聯,為您提供App設計做網站虛擬主機網站營銷電子商務網站排名

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

商城網站建設
久久99久久人婷婷精品综合_超碰aⅴ人人做人人爽欧美_亚洲电影第三页_日韩欧美一中文字暮专区_波多野结衣的一区二区三区_婷婷在线播放_人人视频精品_国产精品日韩精品欧美精品_亚洲免费黄色_欧美性猛交xxxxxxxx
中文久久乱码一区二区| 国产在线精品一区在线观看麻豆| 国产真实乱对白精彩久久| 91久久精品www人人做人人爽| 欧美视频观看一区| 666欧美在线视频| ●精品国产综合乱码久久久久 | 成人免费看片网站| 亚洲精品一卡二卡三卡四卡| 91精品国产综合久久香蕉麻豆| 国产精品激情偷乱一区二区∴| 日本中文字幕一区二区视频 | 久久色在线观看| 亚洲一二三四在线观看| 国产成人8x视频一区二区| 精品国产乱码久久久久久郑州公司| 日本丰满少妇一区二区三区| 国产欧美一区二区三区在线老狼| 日韩av一二三| 福利视频一区二区三区| 欧美在线|欧美| 国产精品二三区| 国产风韵犹存在线视精品| 欧美日韩精品综合| 精品日韩欧美在线| 五月婷婷另类国产| 成人av电影免费| 欧美麻豆精品久久久久久| 有坂深雪av一区二区精品| 成人一区二区三区视频在线观看| 日韩国产美国| 国产日韩欧美电影| 精品亚洲免费视频| 欧美视频小说| 久久久久久久久久久久久女国产乱| 日韩av一级电影| 精品国产一区二区三区麻豆免费观看完整版 | 中文字幕日韩一区| 国产mv日韩mv欧美| 亚洲午夜精品久久| 国产精品三级视频| 国产成人免费视频精品含羞草妖精| 日韩欧美视频一区二区三区四区| 久久婷婷色综合| 久久99精品久久久久久国产越南 | 免费一级片91| 久久久久资源| 26uuu另类欧美亚洲曰本| 美国十次了思思久久精品导航| 久久影视中文粉嫩av| 精品国产三级电影在线观看| 蜜臀av一区二区| 日韩成人av电影在线| 国产女人18水真多18精品一级做| 国产高清在线精品| 色综合久久88色综合天天6 | 欧美电视剧免费全集观看| 日本午夜一区二区| 欧美一区二区三区四区夜夜大片 | 久久精品国产免费| 日韩免费中文专区| 国产精品久久久久久久久动漫| 国产成人欧美日韩在线电影| 日本精品一级二级| 一区二区三区四区高清精品免费观看| 91免费在线视频观看| 制服丝袜一区二区三区| 青娱乐精品视频在线| 五月天色一区| 一区二区在线观看不卡| 国产精品18毛片一区二区| 2021中文字幕一区亚洲| 国产精品 日产精品 欧美精品| 日本乱码高清不卡字幕| 亚洲国产日日夜夜| 免费精品视频一区| 国产精品不卡一区| 粉嫩高清一区二区三区精品视频| 精品国产a毛片| 成人看片黄a免费看在线| 欧美卡1卡2卡| 国产在线一区二区| 欧美曰成人黄网| 蜜桃精品在线观看| 日本韩国一区二区| 日本亚洲视频在线| 色综合咪咪久久| 丝袜美腿成人在线| 正在播放久久| 日韩国产欧美在线播放| 亚洲一区二区三区色| 亚洲成人激情自拍| 亚洲国产日韩美| 亚洲国产美女搞黄色| 先锋在线资源一区二区三区| 亚洲自拍欧美精品| 亚洲国产综合自拍| 午夜精品成人在线视频| 尤物一区二区三区| 日本不卡一区二区| 91福利精品视频| 麻豆精品国产传媒mv男同| 在线一区二区观看| 久久丁香综合五月国产三级网站| 色屁屁一区二区| 美女网站在线免费欧美精品| 欧美影片第一页| 黄网站免费久久| 欧美一区中文字幕| 成人丝袜18视频在线观看| 精品少妇一区二区三区 | 精品日本一线二线三线不卡| 成人免费看的视频| 久久综合色婷婷| 99高清视频有精品视频| 国产精品美女一区二区| 精品视频在线观看| 一二三区精品视频| 一区二区av| 久久精工是国产品牌吗| 在线不卡免费欧美| caoporm超碰国产精品| 国产三级一区二区| 国产午夜精品在线| 樱花草国产18久久久久| 亚洲精品美女久久7777777| 日本午夜精品一区二区三区电影| 欧美色倩网站大全免费| 国产馆精品极品| 国产亚洲欧洲一区高清在线观看| 国产精品视频500部| 亚洲中国最大av网站| 一本大道综合伊人精品热热| 国内精品视频666| 精品久久国产字幕高潮| 国产精品久久久久久久天堂第1集 国产精品久久久久久久免费大片 国产精品久久久久久久久婷婷 | av电影在线观看完整版一区二区| 国产欧美综合在线| 欧美日韩精品免费观看视一区二区| 亚洲成av人片一区二区| 欧美日韩一级视频| 成人高清伦理免费影院在线观看| 中文字幕精品三区| 日本视频一区在线观看| 美国一区二区三区在线播放| 日韩欧美在线不卡| 国产视频不卡| 婷婷久久综合九色综合伊人色| 欧美日韩免费在线视频| 99精品视频免费在线观看| 亚洲色图色小说| 在线一区二区视频| www.激情成人| 亚洲激情欧美激情| 欧美性受xxxx| 91麻豆视频网站| 一区二区欧美视频| 欧美日韩高清一区二区不卡 | 精品影院一区二区久久久| 精品处破学生在线二十三| 免费成人av网站| 久久91精品久久久久久秒播| 久久免费视频色| 午夜老司机精品| 懂色av一区二区夜夜嗨| 亚洲欧美综合色| 欧美影院一区二区| 99国产在线视频| 日韩和欧美一区二区| 欧美精品一区二区三区视频| 日韩欧美亚洲日产国产| 国产精品一区二区黑丝| 最新热久久免费视频| 欧美自拍丝袜亚洲| 国产激情一区二区三区在线观看 | 不卡一区二区中文字幕| 一区二区三区成人| 欧美一区二区三区播放老司机| 国产一区国产精品| 另类小说视频一区二区| 日本一区二区电影| 欧美亚洲综合久久| 国产精品免费一区二区三区| 奇米一区二区三区| 国产欧美一区二区精品仙草咪| 一本一本大道香蕉久在线精品| 99久久国产综合精品麻豆| 图片区小说区区亚洲影院| 久久综合九色欧美综合狠狠| 天堂av一区二区| 91玉足脚交白嫩脚丫在线播放| 五月天精品一区二区三区| 久久久欧美精品sm网站| 色88888久久久久久影院野外| 成人av免费看| 国产综合久久久久久鬼色| 亚洲色图另类专区| 日韩免费电影网站| 中文字幕99| 国产日韩精品推荐|