数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

高性能MySQL:捕获诊断数据(3)


发布日期:2019年10月27日
 
高性能MySQL:捕获诊断数据(3)

捕获诊断数据(

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

上一篇:高性能MySQL:捕获诊断数据(2)

下一篇:mysql性能的检查和调优方法[3]