【IT168 DTCC 2015现场报道】作为国内数据库与大数据领域最大规模的技术盛宴,2015第六届中国数据库技术大会(DTCC)于2015年4月16日-18日在北京新云南皇冠假日酒店震撼登场。大会以“大数据技术探索和价值发现”为主题,云集了国内外顶尖专家,共同探讨MySQL、NoSQL、Oracle、缓存技术、闪存技术、国产数据库、Hadoop、数据挖掘、推荐系统、机器学习等领域的前瞻性热点技术。大会吸引了3000多名IT人士参会,举办120多场精彩演讲,致力于为数据库人群、大数据从业人员、广大互联网人士提供最具价值的交流平台。
自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技术实战-在堆栈中寻找异常宕库原因》的主题分享,演讲内容主要包括:一、程序的计算机级表示:所有的程序,都是内存中的指令流。二、断点:“时间,停止”,让Oracle的指令流停在我们想让它停的地方。三、发现断点:指令流中的每一条指令处,都可以设置断点。逆向工程后,Oracle的汇编指令那么多,我到底该将何处设为断点?四、函数与参数值:如何抓出运行时函数的参数值?五、不可忽视的内存流动:观察内存的流动,看看Oracle将什么数据,从内存中的何处、拷贝到何处。六、神奇的等待事件:Oracle等待事件机制的原理分析。七、从call stack中挖出宕库原因。八、等待事件的进一步探讨:理解等待事件的真正意义。
什么是调试Oracle技术
调试Oracle就是对Oracle进行逆向工程,再通俗点说,就是反汇编Oracle。相信听到这个结果的朋友,一定会认为:疯狂。但其实不是这样的, Oracle的逆向工程没有你想像中的哪么难。它是真正的纸老虎。
吕老师表示:“我们的目的,并不是要读懂Oracle每一条反汇编代码,我相信这不可能,代码量太大了。我们只需要从反编代码找出我们感兴趣的片断即可。这样一来,难度就大大下降,再借助现在优秀的调试工具,gdb/mdb和DTrace,对于有开发功底的DBA来说,可以说易如反掌。”
程序的机器级表示
阅读反汇编代码,难吗?只是传说中很难。所以说,一切帝国主义,都是:纸老虎。
更多信息,请参考《深入理解计算机系统》第三章,此章的名字就是“程序的机器级表示”。在此章中,有详细的C语言的条件、分支和各种循环和汇编的对应关系。读完这章,你会发现,阅读Oracle反汇编的片段,是很简单的事。有人经常和我聊:“你花了这么多时间去研究这个,值得吗”。先不说值不值的问题,其实,这么简单的东西,真的花不了太多时间。
有了基本的汇编基础,哪么,理解后面的问题也就简单了。下面我们讨论下一个问题:断点。
断点,是程序调试的重要工具。断点就是让程序在某个地方停下来,然后我们可以慢慢观察程序的状态。
设置断点,需要使用调试工具:gdb/mdb.断点命令是:mdb: 函数名:b;gdb : b 函数名。
对调试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内核技术揭密》中,有一段脚本,可以修改进程的超时时间。
MySQL源码改造之并行复制改进
接下来为大家介绍下今天下午第二位做主题演讲的嘉宾,携程MySQL数据库团队高级经理任赟婷,2007年毕业于上海交通大学信息安全学院后加入携程数据库团队。建立MySQL数据库团队,现在带领团队负责携程的MySQL和Mongo数据库的管理,包括MySQL的架构审核、SQL审核、自动化运维工具的开发维护等工作。
今天带来了《MySQL源码改造之并行复制改进》的主题分享,演讲内容主要包括:
一、实现方式:对MySQL的复制SQL进程进行调整,改造Log_event类中的get_slave_worker事件处理线程的获取方式。针对指定表的insert/delete/update事件,从事件组(以事务开始事件和事务提交事件为头尾的一组事件)中独立出来。在多个slave工作线程中,进行轮流选择,进行指定表事件的执行。
二、功能及特点:1、基于MySQL5.6的DB级并行复制实现,无需在主从架构中引入其他组件;2、可配置的应用范围,对指定表进行并行同步;3、动态开关,可随时打开或关闭表级别并行复制;4、高写入负载zabbix后台mysql,复制性能提升50%.
背景:MySQL主从复制的单线程工作机制,常常是制约复制性能的最大瓶颈。MySQL 5.6开始支持Per-DB的多线程并行复制,但在单库复制压力场景下仍然无能为力。

困境:首先遭遇到复制瓶颈的是zabbix后台数据库;监控数据越来越多,slave早在master到达负载上限之前成为了性能瓶颈;复制频繁出现延迟问题,当slave有查询压力更加明显;新增slave节点的耗时也越来越长,整个部署周期超过5天。
需求:为了缓解复制压力,我们根据监控对象的不同拆分了多组zabbix系统。但是,复制的性能上限仍然严格限制了每组zabbix系统能承担的容量上限。能不能有一种拆分粒度更细化的并行复制,来提高slave上的写入速度?
探索:在寻求解决方案的道路上,首先考虑尽可能使用已有的成熟方案。于是在我们面前有两个选择:1,MySQL主从同步加速transfer (by taobao);2,MariaDB 10(引入了新的并行复制功能)。
关于Transfer:1,暂没有对应官方5.6.12版本的patch.2,最新的发布形式是可执行的mysqld文件。3,要求主库的binlog格式必须是row(我们的标准配置是mixed,row模式的replace语句可能出现自增长问题)。
关于MariaDB 10:1,从长远来说这是非常好的解决方案,通用且能保证从机事务一致性完全忠实于主机(by google)。2,问题在于,首个GA版刚发布不久,在正式引入线上环境之前,还有更多事情要做。
方向:既然没有马上能用的现成方案,何不尝试下自己造?于是,我们决定以并行复制的需求为契机,作为我们进行MySQL自定制改造的起点,逐步踏入MySQL源码研究和优化的领域。
起步:基于MySQL 5.6的多线程复制实现,依赖原生参数slave_parallel_workers设置复制的工作线程数。先进行最基本的尝试,调整MySQL的复制SQL进程,改造Log_event类get_slave_worker事件处理线程的获取方式。获取后将事件拆分,在多个slave工作线程中,轮流选择,执行事件。
问题一:必然问题:由于操作并行后顺序被打乱,引起数据一致性校验问题,例如外键约束等。解决思路:针对类似zabbix的应用,具有两个明显特点,大量写入集中在几个特定的表;这些表的写入对顺序并不敏感。
解决一:增加参数变量slave-parallel-simple-tables用来配置需要进行事件拆分的表名。同时增加了变量slave-parallel-simple用来动态开关自定义的表级别并行复制。进一步改造get_slave_worker事件处理线程,针对指定表的DML事件进行拆分,并在多个slave工作线程中,轮流选择执行。不符合拆分规则的,仍然保持串行处理。
结论:根据测试结果来看,在服务器性能负载较高的情况下(例如内存交换频繁、刷磁盘动作频繁),并行复制的提升更加明显,最高可达到80%的提升。在最接近现实情况的场景(增加了额外的数据查询压力),并行复制的性能提升可以达到75%.
不足:自增长表的支持问题:对SET INSERT_ID的事件没有特殊处理,当做普通事件进行了拆分,导致主从数据的自增长值不一致。配置只能指定表名,多库存在同名表时无法区分。复制是MySQL的核心功能,当进行版本升级时(即使是小版本),功能合并到新版本的成本很高。
收获:显式收获:已应用到各zabbix系统,提升了复制的容量上限。新增slave节点用于迁移或扩容时,大大缩短了部署时间。隐式收获:成功的第一步,获得了成长和经验,为后续的源码优化工作奠定了基础。例如,在这之后顺利而快速地完成了另一个源码改进版, slow log记录机制优化。增加了根据完整执行时间(包含锁等待)来进行慢查询判断的机制。并且已经成功在大范围生产业务环境稳定运行。
未来:短期计划:进一步进行功能性改进,解决现有问题。长期计划:复制功能改进插件化,便于不同版本或分支产品之间迁移。
AliSQL 5.6及其应用
接下来为大家介绍下今天下午第三位做主题演讲的嘉宾,阿里集团资深数据库工程师章颖强,花名江疑,本科、硕士毕业于浙江大学,开源数据库技术爱好者,先后就职于百度、阿里集团数据库团队。目前为阿里集团版本MySQL分支(AliSQL)主要维护者,致力于AliSQL的性能及功能优化。AliSQL在阿里集团内部广泛使用,支持了过去几年的双11大考,稳定性和性能都表现的极为出色。
今天带来了《AliSQL 5.6及其应用》的主题分享,阿里核心业务的数据库都已经升级到了AliSQL 5.6版本,AliSQL 5.6带来了哪些改进,性能层面又有了多大的提升?针对阿里业务高可用性,高可靠性,高性能的三高要求,跟官方的MySQL 5.6相比,AliSQL 5.6又拥有哪些特有的功能?为解决高并发下的稳定性,我们的线程池版本又是如何完美的支持了双十一?
AliSQL的历史
2011年AliSQL5.1发布→2012年AliSQL5.5发布、并行复制热点补丁→2014年AliSQL5.6发布、线程池SQL hint定向流控。
AliSQL5.6的性能和功能介绍
BugFix:累计修复17个BUG,大部分回馈给了社区;功能优化:添加了共计25个新功能;性能优化:针对业务做出了19处性能优化。
AliSQL5.6之线程池其中包括入口匝道控制系统
线程池遇到的问题及优化:
一,Binlog Dump thread等长耗时命令阻塞部分group;针对性优化:1,增加线程池内部信息输出;2,对Dump thread做特权处理。
二,数据库过载时的策略;针对性优化:以单独线程服务admin用户。
三,高优先级队列和显式锁的冲突;针对性优化:在高优先级队列判定中增加MDL显式锁的判定。
线程池的性能对比
AliSQL5.6之热点抢购
改造前:
改造后:
Oracle 11gR2 RAC预防性优化措施
首先为大家介绍下今天下午第四位做主题演讲的嘉宾,Oracle ACE总监崔华,网名dbsnake,Oracle ACE总监, ACOUG核心成员。他是资深Oracle数据库工程师,他拥有Oracle数据库技术各个领域的经验,尤其是在Oracle数据库性能优化与备份恢复方面经验丰富。他是畅销书《基于Oracle的SQL优化》的作者,他还与其他人合作编写了多本Oracle技术书籍,他经常在Oracle相关活动中发表演讲并在自己的博客上撰写了大量技术文章。近年来他专注于软件架构和数据库性能优化,涉猎领域不再局限于Oracle数据库。
今天带来了《Oracle 11gR2 RAC预防性优化措施》的主题分享,演讲内容主要包括:Oracle RAC由于其架构的复杂性,使得在Oracle RAC架构下的数据库优化与单实例相比既有很多相同点,又有很多不太一样的地方,本次演讲主题着眼点放在基于Oracle RAC架构的系统上线前的诸多预防性优化措施上面,目的是为了防患于未然,避免那些已知的弯路和陷阱,使得部署在Oracle RAC架构上的系统从一开始就获得稳定的性能,干货分享,无数血泪经验的累积。
打最新PSU和Oracle推荐的Patch
Quick Reference to Patch Numbers for Database PSU, SPU(CPU), Bundle Patches and Patchsets (Doc ID 1454618.1)
Oracle Recommended Patches -- Oracle Database (Doc ID 756671.1)
配置Hugepage
ALERT: Disable Transparent HugePages on SLES11, RHEL6, OL6 and UEK2 Kernels (Doc ID 1557478.1)
HugePages and Oracle Database 11g Automatic Memory Management (AMM) on Linux (Doc ID 749851.1)
Hugepages Not Used when ASM is used (Doc ID 1457842.1)
ASM & Shared Pool (ORA-4031) (Doc ID 437924.1)
Shell Script to Calculate Values Recommended Linux HugePages / HugeTLB Configuration (Doc ID 401749.1)
HugePages on Oracle Linux 64-bit (Doc ID 361468.1)
特别注意的是--如果要禁掉ASM实例的AMM,就一定不要同
时reset memory_target和memory_max_target,而是应该将
memory_target设为0并只reset memory_max_target.
在任意一个RAC节点执行如下操作:
alter system set sga_target=2048M scope=spfile sid='*';
alter system set pga_aggregate_target=1024M scope=spfile
sid='*';
alter system set memory_target=0 scope=spfile sid='*';
alter system set memory_max_target=0 scope=spfile sid='*';
alter system reset memory_max_target scope=spfile sid='*';
停掉NTP,配置CTSSD
1、在RAC各个节点先停掉NTPD
2、cluvfy comp clocksync
3、将RAC各个节点的NTP配置文件/etc/ntp.conf改名
4、重启GI
SQL优化的冰与火
首先为大家介绍下今天下午专场7的最后一位做主题演讲的嘉宾,福富软件在聘特级专家梁敬彬,福富技术研究院副理事长,福富在聘特级专家,福富四星级内训师,ITPUB版主及ITPUB社区专家,十余年数据库设计调优及培训相关经验,着有多本畅销数据库技术书籍,其代表作《收获,不止Oracle》上市不到2个月即完成第3次印刷。
今天带来了一个有趣的主题《SQL优化的冰与火》的分享,演讲内容主要包括:“当一条SQL丢到你的面前的时候,需要你优化的时候,你会想什么?” “还想什么,直接优化?” “那怎么直接优化呢?” “该怎么直接优化就怎么优化呗。” “强,点32个赞!” 这个霸道小对话折射出技术人员缺乏总结和不善于选择技术场景。现在,就带来梁敬彬的分享,这是冰与火之旅。
SQL优化的前提条件之前奏
SQL优化的前提条件之节奏(整体入手)
SQL优化的前提条件之节奏(局部入手)
SQL优化具体解决之响应时间分析(减少开销)