熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> MySQL >> 正文

高性能MySQL:捕獲診斷數據(3)

2013-11-23 21:09:59  來源: MySQL 

   捕獲診斷數據(

  堆棧需要自下而上來看也就是說線程當前正在執行的是pthread_cond_wait 函數這是由os_event_wait_low 調用的繼續往下看起來是線程試圖進入到InnoDB 內核(srv_conc_enter_innodb)但被放入了一個內部隊列中(os_event_wait_low)原因應該是內核中的線程數已經超過innodb_thread_concurrency 的限制當然要真正地發揮堆棧跟蹤的價值需要將很多的信息聚合在一起來看這種技術是由Domas Mituzas推廣的 他以前是MySQL 的支持工程師 開發了著名的窮人剖析器poor mansprofiler他目前在Facebook 工作和其他人一起開發了更多的收集和分析堆棧跟蹤的工具可以從他的這個網站發現更多的信息http://wwwpoormansprofilerorg

  在Percona Toolkit 中我們也開發了一個類似的窮人剖析器叫做ptpmp這是一個用shell 和awk 腳本編寫的工具可以將類似的堆棧跟蹤輸出合並到一起然後通過sort|uniq|sort 將最常見的條目在最前面輸出下面是一個堆棧跟蹤的完整例子通過此工具將重要的信息展示了出來使用了l 選項指定了堆棧跟蹤不超過以免因太多前面部分相同而後面部分不同的跟蹤信息而導致無法聚合到一起的情況這樣才能更好地顯示到底在哪裡產生了等待

  $ ptpmp l stacktracestxt

   pthread_cond_waitone_thread_per_connection_endhandle_one_connection

  start_threadclone

   pthread_cond_waitos_event_wait_lowsrv_conc_enter_innodb

  innodb_srv_conc_enter_innodbha_innodb::index_read

   pthread_cond_waitos_event_wait_lowsync_array_wait_eventmutex_spin_wait

  mutex_enter_func

   pthread_cond_waitos_event_wait_lowos_aio_simulated_handlefil_aio_wait

  io_handler_thread

   pthread_cond_waitos_event_wait_lowsrv_conc_enter_innodb

  innodb_srv_conc_enter_innodbha_innodb::general_fetch

   pthread_cond_waitos_event_wait_lowsync_array_wait_eventrw_lock_s_lock_spin

  rw_lock_s_lock_func

   sigwaitsignal_handstart_threadclone??

   selectos_thread_sleepsrv_lock_timeout_and_monitor_threadstart_threadclone

   selectos_thread_sleepsrv_error_monitor_threadstart_threadclone

   selecthandle_connections_socketsmain

   readvio_read_buff::??my_net_readcli_safe_read

   pthread_cond_waitos_event_wait_lowsync_array_wait_eventrw_lock_x_lock_low

  rw_lock_x_lock_func

   pthread_cond_waitMYSQL_BIN_LOG::wait_for_updatemysql_binlog_send

  dispatch_commanddo_command

   fsyncos_file_fsyncos_file_flushfil_flushlog_write_up_to

  第一行是MySQL 中非常典型的空閒線程的一種特征所以可以忽略第二行才是最有意思的地方看起來大量的線程正在准備進入到InnoDB 內核中但都被阻塞了從第三行則可以看到許多線程都在等待某些互斥鎖但具體的是什麼鎖不清楚因為堆棧跟蹤更深的層次被截斷了如果需要確切地知道是什麼互斥鎖則需要使用更大的l 選項重跑一次一般來說這個堆棧跟蹤顯示很多線程都在等待進入到InnoDB這是為什麼呢?這個工具並不清楚需要從其他的地方來入手

  從前面的堆棧跟蹤和oprofile 報表來看如果不是MySQL 和InnoDB 源碼方面的專家這種類型的分析很難進行如果用戶在進行此類分析時碰到問題通常需要求助於這樣的專家才行

  在下面的例子中通過剖析和等待分析都無法發現服務器的問題需要使用另外一種不同的診斷技術

       返回目錄高性能MySQL

       編輯推薦

       ASP NET開發培訓視頻教程

  數據倉庫與數據挖掘培訓視頻教程

       Oracle索引技術


From:http://tw.wingwit.com/Article/program/MySQL/201311/29698.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.