捕获诊断数据()
前面我们演示了状态计数器和线程状态的例子在本章结束之前将再给出一些oprofile和gdb 的输出例子下面是一个问题服务器上的oprofile 输出你能找到问题吗?
samples % image name app name symbol name
/novmlinux /novmlinux (no symbols)
mysqld mysqld Query_cache::free_memory_block()
libc libc (no symbols)
mysqld mysqld my_hash_sort_bin
mysqld mysqld MYSQLparse()
libpthread libpthread pthread_mutex_trylock
mysqld mysqld read_view_open_now
mysqld mysqld Query_cache::invalidate_query_block_list()
mysqld mysqld Query_cache::write_result_data()
| Chapter :Profiling Server Performance
mysqld mysqld MYSQLlex()
libpthread libpthread __pthread_mutex_unlock_usercnt
mysqld mysqld __intel_new_memcpy
如果你的答案是查询缓存那么恭喜你答对了在这里查询缓存导致了大量的工作并拖慢了整个服务器这个问题是一夜之间突然发生的系统变慢了 倍但这期间系统没有做过任何其他变更关闭查询缓存后系统性能恢复了正常这个例子比较简单地解释了服务器内部行为对性能的影响
另外一个重要的关于等待分析的性能瓶颈分析工具是gdb 的堆栈跟蹤下面是对一个线程的堆栈跟蹤的输出结果为了便于印刷做了一些格式化
Thread (Thread xfee (LWP ))
# xbebf in pthread_cond_wait@@GLIBC_ () from /libpthreadso
# xfeef in os_event_wait_low () at os/ossyncc:
# xfee in srv_conc_enter_innodb () at srv/srvsrvc:
# xfeeca in innodb_srv_conc_enter_innodb () at handler/ha_innodbcc:
# ha_innodb::index_read () at handler/ha_innodbcc:
# xc in ?? ()
# x in sub_select() ()
# xe in ?? ()
# xc in JOIN::exec() ()
# xa in mysql_select() ()
# xea in handle_select() ()
# xffa in ?? ()
# xce in mysql_execute_command() ()
# xc in mysql_parse() ()
# xa in dispatch_command() ()
# xba in do_command(THD*) ()
# xfbdd in handle_one_connection ()
# xbea in start_thread () from /lib/libpthreadso
# xbeedebd in clone () from /lib/libcso
# x in ?? ()
返回目录高性能MySQL
编辑推荐
ASP NET开发培训视频教程
数据仓库与数据挖掘培训视频教程
Oracle索引技术