服务器 频道

DTCC 2015:“数据库调优”专场分享

  【IT168 DTCC 2015现场报道】作为国内数据库与大数据领域最大规模的技术盛宴,2015第六届中国数据库技术大会(DTCC)于2015年4月16日-18日在北京新云南皇冠假日酒店震撼登场。大会以“大数据技术探索和价值发现”为主题,云集了国内外顶尖专家,共同探讨MySQL、NoSQL、Oracle、缓存技术、闪存技术、国产数据库、Hadoop、数据挖掘、推荐系统、机器学习等领域的前瞻性热点技术。大会吸引了3000多名IT人士参会,举办120多场精彩演讲,致力于为数据库人群、大数据从业人员、广大互联网人士提供最具价值的交流平台。

老的新技术:调试Oracle技术实战
▲第六届中国数据库技术大会(DTCC 2015)报道专题

  自2010年以来,国内领先的IT专业网站IT168联合旗下ITPUB、ChinaUnix两大技术社区,已经连续举办了五届中国数据库技术大会,每届大会与会规模超千人,大会云集了国内水平最高的数据架构师、数据库管理和运维工程师、数据库开发工程师、研发总监和IT经理等技术人群,是目前国内最受欢迎、人气最高的的数据库技术交流盛会。

  今年是中国数据库技术大会第六个年头,大会将继续秉承分享IT非常好的应用实践的宗旨,围绕传统数据库和大数据两条技术主线,在目前IT技术和管理快速的大背景下,更加深入地探讨数据库技术的现状和未来的发展方向,以及我们在这个转型过程中的实践经验和教训。

  在4月17日下午的《数据库调优》的专场中,安排了五场主题演讲分别是:ebay首要数据库工程师吕海波带来的“老的新技术:调试Oracle技术实战-在堆栈中寻找异常宕库原因”、携程旅行网MySQL数据库团队高级经理任赟婷带来的“MySQL复制性能优化:并行复制源码改造”、阿里集团资深数据库工程师江疑(章颖强)带来的“AliSQL 5.6及其应用”、Oracle ACE总监崔华带来的“Oracle 11gR2 RAC预防性优化措施”、福富软件在聘特级专家梁敬彬带来的“SQL优化的冰与火”的分享。

  老的新技术:调试Oracle技术实战-在堆栈中寻找异常宕库原因

  首先为大家介绍下今天下午第一位做主题演讲的嘉宾,ebay首要数据库工程师吕海波,论坛ID:VAGE,ITPUB管理版版主。曾任阿里巴巴高级数据库专家,现任ebay中国TOP DBA.曾做为2013年DTCC大会演讲嘉宾。出版图书《Oracle内核技术揭密》,被称为Oracle领域第一本国人着作的深入分析Oracle内部原理的书籍。

老的新技术:调试Oracle技术实战
▲ebay首要数据库工程师 吕海波

  今天带来了《老的新技术:调试Oracle技术实战-在堆栈中寻找异常宕库原因》的主题分享,演讲内容主要包括:一、程序的计算机级表示:所有的程序,都是内存中的指令流。二、断点:“时间,停止”,让Oracle的指令流停在我们想让它停的地方。三、发现断点:指令流中的每一条指令处,都可以设置断点。逆向工程后,Oracle的汇编指令那么多,我到底该将何处设为断点?四、函数与参数值:如何抓出运行时函数的参数值?五、不可忽视的内存流动:观察内存的流动,看看Oracle将什么数据,从内存中的何处、拷贝到何处。六、神奇的等待事件:Oracle等待事件机制的原理分析。七、从call stack中挖出宕库原因。八、等待事件的进一步探讨:理解等待事件的真正意义。

  什么是调试Oracle技术

  调试Oracle就是对Oracle进行逆向工程,再通俗点说,就是反汇编Oracle。相信听到这个结果的朋友,一定会认为:疯狂。但其实不是这样的, Oracle的逆向工程没有你想像中的哪么难。它是真正的纸老虎。

  吕老师表示:“我们的目的,并不是要读懂Oracle每一条反汇编代码,我相信这不可能,代码量太大了。我们只需要从反编代码找出我们感兴趣的片断即可。这样一来,难度就大大下降,再借助现在优秀的调试工具,gdb/mdb和DTrace,对于有开发功底的DBA来说,可以说易如反掌。”

  程序的机器级表示

老的新技术:调试Oracle技术实战

  阅读反汇编代码,难吗?只是传说中很难。所以说,一切帝国主义,都是:纸老虎。

  更多信息,请参考《深入理解计算机系统》第三章,此章的名字就是“程序的机器级表示”。在此章中,有详细的C语言的条件、分支和各种循环和汇编的对应关系。读完这章,你会发现,阅读Oracle反汇编的片段,是很简单的事。有人经常和我聊:“你花了这么多时间去研究这个,值得吗”。先不说值不值的问题,其实,这么简单的东西,真的花不了太多时间。

  有了基本的汇编基础,哪么,理解后面的问题也就简单了。下面我们讨论下一个问题:断点。

  断点,是程序调试的重要工具。断点就是让程序在某个地方停下来,然后我们可以慢慢观察程序的状态。

  设置断点,需要使用调试工具:gdb/mdb.断点命令是:mdb: 函数名:b;gdb : b 函数名。

老的新技术:调试Oracle技术实战

  对调试Oracle来说,断点作用巨大。我们自己写的程序,我可以知道程序中有个子函数:add,我们可以在add处设置断点。对于Oracle,它完全是一个黑盒子,我们又要在哪里设置断点呢?

  是DTrace登场的时候了。DTrace发源于Solaris系统,虽然现在也移植到Linux下,但Linux下的DTrace确少一个重要功能,目前我们还不能使用它来“发现断点”。

  注意:虽然DTrace只能在Solaris下,但Oracle在所有OS系统中的原理基本都是一致的,因此我们发现的Oracle规则、原理,可以用于所有Oracle系统。

  DTrace内置了很多探针,用DBA的语言来说,相当于Solaris系统中内置了很多触发器,这些触发器平常是Disable的,你可以使用DTrace enable指定的触发器。同时,你还可以为这个触发器定义动作,也就是当此触发器被触发时要作什么。通常“动作”就是使用printf函数显示一些参数或内存的值。

  当然,除了显示内存值,也可以修改。比如,想研究一下Oracle DBWR进程写脏块有没有什么调优空间,哪么第一步就是要先了解 DBWR进程的工作原理,DBWR有个3秒超时机制,但除DBWR外,Oracle很多进程都有3秒超时机制,哪么多进程大家混在一起超时,也不知道是谁的超时影响了系统,我在我的书《Oracle内核技术揭密》中,有一段脚本,可以修改进程的超时时间。

1
相关文章