捕获诊断数据()
堆栈需要自下而上来看也就是说线程当前正在执行的是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索引技术