对话易车网DBA:为何对SQL Server 内存数据库情有独钟?

2021-10-29 00:00:00 语句 数据库 优化 内存 皮皮

很早以前,有一个古老的预言,认为全球大概只需要五台计算机就够了,640KB的内存应该对任何人都够用了。时至今日,这种预言在云计算时代慢慢变成了现实。Garnter公司的研究表明,80%的业务流程依赖于IT,而IT系统的根基又是数据库系统,关系数性数据库已经平定天下,真正的战场角逐转向了分布式与内存数据库。传统的数据库大佬开始发力内存数据库,Oracle推出了Times Ten,SAP 有HANA,微软在SQL Server2014中也内置了内存技术,三驾马车齐驱并进,易车网为何对SQL Server情有独钟?本期IT名人堂我与易车集团DBA高继伟(社区ID:Shanks_gao)对话,畅谈SQL Server内存数据库的佳实践。



皮皮(Q1):高总,您好!很荣幸有机会采访到您,能否想给我们介绍下自己?

高继伟(A1):大家好,很高兴接受皮皮的采访,我是来自易车集团的DBA高继伟,目前主要负责易车集团数据平台架构设计、优化、运维方面的工作.

自从大学毕业以来,我一直是一名ITer,不过从新手变成了老手,但不忘初衷,坚持学习来提高自我。除传统的关系型数据库,外,我自己也对分布式技术、内存数据库技术拥有浓厚的兴趣,期待和大家一起学习进步.当然对于自己熟悉的领域,尤其是SQL Server,我也乐于和大家一起探讨.



皮皮(Q2):无论是PC端还是移动端,易车为用户提供了多维度的车型查询,车型报价实时查询等功能,这得益于易车网强大的车型数据库,那么支撑易车集团背后的数据库到底是什么?它有哪些亮点?

高继伟(A2):这可是一个不小的话题啊!首先,易车做为国内领先的汽车资讯服务平台,其健壮高效的数据库设计必须满足广大用户个性的数据需求.在数据库设计阶段我们会仔细研讨将来可能面临的情况,如数据量、功能扩展等.在满足业务需求的同时力求灵活高效。其次,我很想说,这里说的数据库并不完全指底层的数据存储.正如皮皮所问,易车为用户提供了多维度的车型,报价查询,这里我们会根据查询的特性,在前端应用不同的数据检索方式,如ElasticSearch.此外在数据库上层我们还有缓存层以减少数据库的硬访问.我想这些可以共同称之为"数据库服务".后我们的数据库日常运行过程中时刻进行着优化工作,依据我们完善的性能报表系统,在任何实例、库、对象及相关的SQL语句出现异常的情形下DBA就会介入分析,并优化.当然这其中的部分工作已经由我们智能分析系统完成了。



皮皮(Q3):对很多企业来讲,可能会面临着一些突发情况,比如业务进行时忽然停下了,服务器宕机了数据也找不到,IT们不排查故障一点喘气的时间也没了,您是否也会遇到类似的囧境?那么有什么方法才能保持系统的持续不间断工作,保证数据不丢失呢?

高继伟(A3):在我眼里,数据库HA是DBA的一个永恒话题,在清楚业务需求的RPO、RTO后需要DBA按照需求设计相应架构,并尽量降低成本.这里我简单的说下SQL Server,根据需求不同我们可以选择SQL Server故障转移群集,AlwaysON,Mirror,Logshipping,Replication, service broker等等,并加以合理的备份策略.


另外关于数据库的SLA这里应该基于业务访问涉及数据库的各个粒度及方面.皮皮这里问道到囧境,曾经我就遇到过。还记得当时由于一些不合理的批量DML,导致整个表被锁,虽然及时发现了问题,取消了查询,但已经波及到了业务,事务回滚过程未能幸免。


为了保持数据库持续的高可用性,除了在架构设计上下足功夫外,合理友好的监控也是必不可少的,我们既提供CPU、内存、磁盘监控,也有针对个别语句和用户访问的异常访问报警等.这样一来,一旦出现异常问题,我们的DBA可以迅速介入并及时解决,把影响降到低.这样一来,DBA的经验就显得十分可贵.



皮皮(Q4):有人认为云计算的核心就是在一大堆烂机器上提供高性能可靠服务,80%的数据、计算、应用将被云化,能否和我们分享下易车集团是如何实现数据平台的私有云应用?

高继伟(A4):这里我谈谈自己对云计算的一点理解,云计算的本质之一就是虚拟化,目的很明确,充分利用计算资源并灵活可控.至于有多大的比例将被云化,我就不做揣测了,希望二八定律依旧灵验.可以说云是趋势,就个人而言,越来越多的应用资源都在云端,我们无需为自己的PC存储资源不足而感到烦恼了.而针对企业就如我之前所说云可以使得企业可以显著降低TCO,无论是自建私有云还是购买大厂商的云服务.


我们自己的数据私有云平台主要应用开源的解决方案,如存储层我们主要应用GLusterFS,在计算层主要应用KVM搭载.同时会根据应用特性涉及到微软的相关虚拟化解决方案.



皮皮(Q5):据说,新浪、腾讯、网易、开心网都使用到了易车的购车数据库,那么易车的SQL Server 数据库又是如何实现数据库负载均衡的?

高继伟(A5):易车除了提供的汽车资讯服务外,同时也是一个汽车数据平台.这里我们采用的是可扩展的读写分离方案,正如皮皮提到的那些网站,客户可以将数据置于我们的数据平台中并提供访问接口.在SQL Server的同步方式上,我们对其中采用的技术如replication, service broker进行了部分改造优化,使之更适合我们的需求.



皮皮(Q6):在2015中国数据库技术大会上,我了解到您的演讲主题是《SQL Server内存数据库揭秘》,而谈到内存数据库,Oracle推出了Times Ten,SAP 有HANA,微软在SQL Server 2014中内置了内存技术,它们究竟有什么不同?各自适应什么样的业务场景?那么易车网为什么对SQL Server 情有独钟呢?

高继伟(A6):这个问题很开放,我只谈下自己的理解.说到不同点,与SAP HANA有所不同,SQL Server的In-memory OLTP(hekaton)和Oracle的Times ten完全是针对高负载的OLTP业务设计的引擎,而SAP HAHA不是OLTP引擎,主要是内存中基于列存储用于高效的检索应用,并兼容OLTP系统.和Times ten有所不同的是,SQL Server Hekaton完全取消了latch,更激进.同时Hekaton中采用了乐观的并发控制,用时间戳+版本行保证事务.事务过程中无需锁,并且优化器采用特定的CBO,并可以实现本地编译,为机器代码完成执行,极大提高了性能。举个例子来讲,如知名的Bwin,Hekaton使得它的每秒批处理请求由15000提升到250000,提升了17倍.在微软自己的官方解决方案中也不乏提升100倍的案例.可以说在高并发的OLTP系统中,Hekaton是个利器.


如果大家对Hekaton感兴趣,DTCC 2015,我将为大家重点分享上述关键技术实现的相关内容。


关于数据库选型,易车并非只用SQL Server,我们也有不少业务运行在MySQL和NOSQL(如cassandra)中.借用火影中宇智波.鼬的一句话:"任何术都是有缺陷的",同样没有哪项技术是完美无缺的.特定的场景选择特定的技术是我们的出发点.尽管MySQL很,但对于易车而言其中一部分应用逻辑比较复杂,如为汽车经销商提供的车易通服务,由于Mysql的优化器自身不够完善,使得其处理复杂SQL语句上显得力不从心,SQL Server作为传统的关系型数据库,其优化器十分强大,能够满足我们的绝大多部分的需求,并且在扩展性、易用性等方面都做得十分出色,故易车内部的应用中SQL Server比较流行.



皮皮(Q7):能否结合易车网的业务场景,和我们分享SQL Server 性能调优的一些秘诀?

高继伟(A7)说到性能调优我想说这是传统的DBA有价值的工作之一了,它涉及的面很广,需要了解的知识点也非常多,比如数据的存储结构、数据库的引擎工作方式,优化器的工作原理及方式等等.单就SQL Server优化器的基本工作流程来讲,如果加以实例简单说明我想就至少需要半天时间.如果说秘诀的话,我想抛出四个字:勤学苦练.如果各位DBA在工作中遇到了性能问题,不放沉下心来,好好琢磨,假以时日,能够水落石出.如SQL Server中常见的键查找,覆盖索引的作用是什么,数据行是如何组织的,对DML的操作影响,随机IO的缺陷如何,预读会有何种影响,nested loop中的预读又如何等等..


为了让大家领悟得更透彻,在本期IT名人堂里我想分享一个今年易车双11活动中我遇到的案例及解决过程.


背景:双11活动中,公司网站访问量明显增加,发现某台数据库实例资源消耗上升明显.通过DMV捕获其中消耗资源的语句发现资源大多被个别高并发的语句消耗.

语句执行计划截图图1-1

                              

相关文章