捕獲診斷數據()
堆棧需要自下而上來看也就是說線程當前正在執行的是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