看完SQL Server 2014 Q/A答疑集锦:想不升级都难!

时间:2021-12-02 15:35:03

看完SQL Server 2014 Q/A答疑集锦:想不升级都难!

转载自:http://mp.weixin.qq.com/s/5rZCgnMKmJqeC7hbe4CZ_g

本期嘉宾为微软技术中心技术架构师韩凯(社区ID:Chris_Han0015),主要负责大数据和云计算领域。在美国取得系统工程硕士学位后,服务于华尔街主要银行与金融机构。从事流程再造与创新与商务智能方案设计实施。

  IT名人堂栏目对微软技术中心技术架构师韩凯进行了独家访谈,揭秘了SQL Server 2014不可不知的那些事儿。访谈期间,网友们针对自己的困扰积极提问,专家坐镇解答,给予了精辟实用的指导,没准您也遇到过这些困惑哦!

  Q1:现在还有用2008,没有用过2012和2014,相对于2008来说,2014的优势是什么,仅仅是增加了内在数据库支持吗?能直接兼容NoSQL吗?
  A:从SQL 2008到SQL 2014,中间还跨越了SQL Server 2008 R2,SQL Server 2012两个版本,这中间的改变自然远不止内存数据库这一项功能,其实还有很多,比如说从大的方面,包括支持快速查询和高压缩比的列存储索引技术,支持高可用性并实现读写分离的AlwaysOn技术,提供数据清理功能的数据质量服务,提供企业信息管理功能的主数据管理服务。最大的变化还包括SQL Server 2014极大的增强了对云的支持,帮助用户轻松实现混合云方式的数据备份、灾难恢复以及应用扩展。此外,SQL 2014相比于SQL 2008,在安全性、管理性、T-SQL增强、SSIS集成服务,SSAS分析服务以及SSRS报表服务方面均有很大的增强。你可以通过下载SQL 2014的评估版本(具备完整的SQL 2014功能)进行180天的免费试用,亲自去感受SQL 2014的新功能吧!SQL 2014评估版本下载地址:http://www.microsoft.com/en-us/evalcenter/evaluate-sql-server-2014 。

  NoSQL的概念主要是根据CAP定理定义的。从这一角度看,我个人认为SQL Server 2014作为定位于“关键任务”场景的数据平台,是不会以牺牲全时一致性来提供互联网应用级的可用性的。对于适合NoSQL的“有损服务”应用场景,微软有如下PaaS服务可供选择:
  

  DocumentDB在国内尚未落地,现在可以通过IaaS级的服务使用MongoDB。另外对于Key-Value缓存微软也开始在国外的Azure提供Redis服务。但那里的数据只在内存中,不具有持久性。我就不将它归于“数据库”范畴了。

  Q2:印象中SQL Server一般是中小企业的数据库,SQL Server 2014是否支持百TB、PB的OLAP数据库?
  A:SQL Server 2014 数据库目前对OLAP的数据库支持到TB级别,对于PB级别的需求,可采用微软基于SQL Server的软硬件一体机产品APS,可横向扩展到6PB。SQL Server 经过15年的发展,到今天的SQL Server 2014版本,在性能、安全性、高可用性,可扩展性等多个方面的表现,还是已经完全能够支撑大型企业的关键业务应用。

  Q3:大数据的来临,SQL SERVER 2014对于非结构化的数据类型,有没有做哪些方面的查询优化?
  A:SQL Server 2014产品本身只提供对结构化数据的存储,分析和处理。对于非结构化数据而言,微软提供一个叫HDInsight的产品--微软与Hortonworks合作的Hadoop。可以部署在一体机APS中或者使用在Azure公有云上提供的PaaS层服务。两者都提供Hadoop中的建库与查询工具例如HBase和Hvie。对于熟悉SQL的开发者,APS中提供一项特别的技术叫做“Polybase”,它能够实现通过统一的SQL语言实现对结构化数据和非结构化数据的联合查询。

  Q4:SQL Server 2014支持的操作系统有哪些?是否只是基于microsoft实施?
  A:目前只支持Windows的操作系统,安装SQL Server 2014支持的软硬件配置及版本可参考:
  https://msdn.microsoft.com/zh-cn/library/ms143506.aspx

  Q5:SQL Server老版本升级到新版本2014上,要注意哪些地方,升级后,与其他系统集成的外围系统数据交互和接口的程序修改量大吗?
  A: 升级自然不是安装一套SQL 2014版本的数据库就算完事儿,成功的数据库升级不仅要有技术层面的考虑,还要有方法论层面的考虑,所谓方法论,就是除了技术本身之外需要考虑的因素,包括升级的范围设定,对业务影响的评估,升级前的评估和必要测试,升级时可能发生的宕机时间, 升级的方式是采用在新的软硬件环境下构建一套新的系统,然后迁移数据库(推荐方式),还是在原有版本上做版本升级,不移动数据库。从技术层面,SQL Server 2014内置的升级向导以及一系列免费的系统评测工具帮助用户完成升级。具体可参考:https://msdn.microsoft.com/zh-cn/library/dn236457.aspx ;
  关于程序的修改量问题,取决于程序设计时与数据库的耦合程度,需要具体问题具体分析。

  Q6:在SQL SERVER 2014中,对性能优化方面有哪些新的功能?比如新增了哪些语法特性?
  A:SQL Server 2014对性能优化最重要的新功能就是In-memory OLTP, 或者内存数据库。SQL Server 2014的内存数据库可以在表级操作。也就说说你可以在建/改表的时候,指定那些比较“热”的表建在内存了,而将偶尔访问的表留在存储上以节约驻留内存。反映在DDL语法上,最主要的就是在CREATE TABLE语句中增加的两个可选变量:
  [MEMORY_OPTIMIZED = {ON | OFF}]
  [DURABILITY = {SCHEMA_ONLY | SCHEMA_AND_DATA}]
  前者指定这张新建表的数据是否在内存中操作;后者则指定如果该表为内存表,那其中的数据是否最终要固化到存储中。有些场景,比如计算中间结果,只需要保留表结构以便重用即可,其中的数据每次计算完成就没有保留价值了。
  对于性能促进的另一重要特性是所谓原生编译的存储过程(Natively Compiled Stored Procedure)。与传统的存储过程相比,原生编译的存储过程在建立时就编译成机器代码了,而不是在第一次运行时。语法上和之前版本的CREATE PROC语句的主要区别就是增加一个WITH NATIVE_COMPILATION选项以及DELAYED_DURABILITY = { OFF | ON }选项。前者不言自明,后者由你决定是否以可能的数据丢失换取更快的写操作速度。基本原理是后台进程缓存transaction log,每集齐60KB才写入存储。SQL Server 2014 在性能提升方面还有许多重新设计的系统级功能。比如Clustered Columnstore Indexes、Lock Priorities、Buffer Pool Extensions、Resource Governor等。有兴趣的读者可以关注MSDN的相关文章。

  Q7:SQL Server 2014的云端备份,想法很好,但是实际备份的时候,是否得考虑带宽?内外网环境? 备份时是否影响生产? 增量备份还是全量备份?
  如果是全量备份,是否需要停掉业务进行备份? 我考虑的比较现实,还请见谅。
  A:我们谈“数据库备份”这个概念,通常讲的是对于已经写到数据库不再发生变化的数据库进行复制,相比于另外一个概念“数据库同步”对带宽和实时性没有那么高的要求,对生产系统也不会产生任何影响。如果是采用“数据库同步”的方式将本地数据库复制副本到云端,则需要对带宽、内外网环境进行详细的评估,并且数据库同步对生产系统的性能会有影响。
  云端备份可执行全量或增量备份。SQL 2014全量和增量备份都支持。全量备份时,被备份的数据库是要暂停服务的,所以最佳实践是建立AlwaysOn同步,从复制节点上做备份。

  Q8:关于异地云备份,微软是如何保证数据的安全性,如何让企业用户放心的把数据交个云端,数据加密的方式是用户可选,可控吗?
  A:你所说的数据安全看来主要是指防止意外访问。微软对数据安全的考量,还包括避免意外丢失。后者是通过冗余存储实现的。具体说,是为客户在数据在每个数据中心本地存三份。选择异地灾备服务的客户可以再存三份,达到一共6份冗余。而前者,防止意外访问,是需要一整套管理流程配合技术实现的。从管理策略上说,首要规则就是建立防御纵深、并且实施职能分离。SQL Server自2008就可以通过透明数据加密 (TDE)加密整个数据库包括日志。但这种全面加密方式会相应增加CPU负担,并且影响备份文件的压缩率。SQL 2014增加了专用的备份加密功能。加密都是需要密钥的。为了配合实现管理策略,微软将实例级的服务主钥(SMK)与库级的数据库主钥 (DMK) 分开生成、并建议客户授予不同级别的管理员。这些主钥是通过AES 256 算法产生的。然后数据库管理员可以用DMK和私钥生成证书文件。有了这个证书,备份管理员就可以选择以下任意一种加密算法生成加密的备份文件了:AES 128, AES 192, AES 256 或 Triple DES.

  Q9:内存数据库在企业中的适用场景?一般处理哪些业务比较合适?对此比较感兴趣,能否举例说明?
  A:基本上高吞吐率的OLTP的场景都是合适的。在线数字化娱乐公司 bwin.party 提供的在线游戏与其他服务用户数超过两百万。原本的游戏系统每秒只能处理大约 15,000 个请求,使用SQL 2014后每秒可以处理250,000 个请求,在硬件成本方面节约十万美元,并实现了增收。详情请参见Case Study: http://download.microsoft.com/download/A/B/8/AB8266E6-ABA9-461D-B29B-5079B066E6B8/SQL%20Server%202014%20Case%20Study-BWIN.pdf

  Q10:对于新版本中的内存数据库改善部分,能不能详细介绍一下。
  A:SQL Server 2014最大的一个功能上的飞跃就是内存数据库,通俗的说就是把数据库放在内存中而非磁盘里。传统基于磁盘的表通常会遇到内存页面置换、死锁、造成了吞吐量有限、事务延迟较长等问题,内存数据库的内存优化表由于常驻内存,适用于低延迟、高并发、快速数据传输和加载等场景,其带来的性能提升也是可想而知的。
  接下来我从操作的层面详细介绍一下SQL Server 2014内存数据库的特点,

(1)提供简单的向导帮助用户选择最频繁被访问的数据库表迁移到内存;

(2)用户可以灵活的选择同一个数据库中的哪些表放在内存,哪些表放在硬盘。

(3)用户还可以通过T-SQL语句轻松创建内存编译存储过程,从而进一步提高访问数据的速度和执行查询的效率。

  Q11:Hekaton什么时候能支持中文的排序规则呢?
  A:我估计您指的是CTP1时的In-Memory表不支持Code page – 936的问题?这个在CTP2时就已经解决了。正式产品放心用。具体使用排序规则请参见关于COLLATE的文档,中文排序规则支持拼音和笔画两种:https://msdn.microsoft.com/zh-cn/library/ms184391.aspx

  Q12:可否提供一个日期类型格式化的函数,就像c#中的DateTime.Now.ToString("yyyy-MM-dd") 现在只能通用CLR处理,若数据库能处理就好了。
  A:SQL转换函数可以的:
  SELECT CONVERT(VARCHAR(10), GETDATE(), 20) AS '[YYYY-MM-DD]'
  更多细节请参阅MSDN:https://msdn.microsoft.com/zh-cn/sqlserver/ms187928

  Q13:基于元数据这块,对于数据各个层之间关联,您那怎么处理的?
  A:SQL Server 从2008 R2版提供开箱即用的主数据管理服务(MDS)。SQL Server MDS 既支持根据数据关系属性自动生成层级关系(derived hierarchy)也支持手动创建参差型层级(Ragged Hierarchy)。 在有些场景,你甚至可以混合这两种方式(“derived hierarchy with an explicit cap”),在最高层采用参差型层级,之下使用自动生成层级。深度知识建议阅读这些资料:
  Master Data Services 功能和任务
  https://technet.microsoft.com/zh-cn/library/hh231022.aspx
  Master Data Services Training Guide: Managing Hierarchies
  http://download.microsoft.com/download/5/9/F/59F1639E-EF57-4915-8848-EF1DC2157EBB/04%20Managing%20Hierarchies.pdf
  Tutorial: Enterprise Information Management using SSIS, MDS, and DQS Together
  http://www.microsoft.com/en-us/download/details.aspx?id=35462

  Q14:在下一代数据库版本中可否将权限更加细化,现行很多服务器的很多功能如函数kill spid,sp_spaceused tablename等服务器调优方面函数及其他功能,再如job作业创建等权限只有管理员才有,能否将这些功能的粒度再细化,可由管理员进行分配。
  A:微软对安全管理的层级是非常清晰、直观和灵活的。清晰、直观主要通过服务器级别角色(Server Role)和数据库级别角色(Database Role)来管理权限。灵活体现在不直接授权到具体用户而是到角色。因为用户(人)可以变动,但授权相对固定。人离职了可以统一在AD中去掉这个用户账号,而不必改动SQL Server角色授权这就是微软在安全策略上平台化设计的优势。环环相扣、分工协作。这样非常契合企业实际管理的组织架构、最大程度分权治理、同时减少管理功能重复与多余的工作量。当然数据库管理员的尽职验证流程也要有。这个暂不展开。SQL Server 有一长串内置角色,对于更细化的管理,SQL系统管理员可以通过CREATE SERVER ROLE 和CREATE ROLE建立新的服务器级别和数据库级别的定制角色。然后通过GRANT/ DENY权限的方式控制这个角色的权限,从而达到细度控制。
  具体请参阅MSDN文章:
  https://msdn.microsoft.com/zh-cn/library/ee677610.aspx
  https://msdn.microsoft.com/zh-cn/library/ms186717.aspx
  https://msdn.microsoft.com/zh-cn/library/ms182763.aspx
  负载均衡的支持,之前的版本中虽然号称对负载均衡有支持,但是效果都不是很理想,不知道在这个版本中有没有改进。
  “负载均衡的支持”存在于多个领域。我不知道您具体对那一部分的效果不满意。Azure的更新确实是非常快的。例如对于网络负载均衡,Azure上现在既有同一数据中心内的负载均衡服务,也有跨地理分布/数据中心的Traffic Manager服务保证您的客户就近接入。例如对于数据库负载均衡,过去确实存在限制比如SQL Server AlwaysOn 的入口必须是公网 IP。而现在也支持通过虚拟内网IP了的内部均衡了。这样对混合云部署的LOB应用来说,网络架构也更简约、安全、高效了。架构拓扑见下图。

  

Q15:备份到Azure,我知道存储收费,但备份网络流量收费不?
  A:关于价格,我和您一样会查看Azure运营商——世纪互联的官网:http://www.windowsazure.cn/pricing/details/backup/。如您所愿,流量是不另收费的:“我们将基于在备份服务中存储的数据量对备份收费。将不会对带宽、存储、存储事务、计算或与提供备份服务相关联的其他资源额外向您计费。”

  Q16:公司的SQL SERVER2005若要升级到sql server 2008 R2 或者 sql server 2012.费用如何计算的,是只付升级费用,还是重新买SQL SERVER 2008 R2 或SQL SEVER2012?
  A:升级费用的计算取决于你在购买SQL Server2005时是否购买了微软的SA(软件保障)以及SA是否在生效期内,如果是,则可以免费升级至微软最新版本。如果不是,则需要重新购买。另外,SQL Server的最新版本是SQL Server 2014, 建议你直接升级数据库到最新的版本,使用更多最新功能。具体SQL Server 2014的介绍可参见:http://www.microsoft.com/zh-cn/server-cloud/products/sql-server/default.aspx 。当然,如果你不想采用SQL Server 2014,也可以购买安装低版本的SQL Server。

  Q17:您好,我有个问题想请教一下,数据治理,可以作为一个大数据方面的体系,它与数据质量监管,元数据之间存在哪些关系,能否结合您实际应用场景,介绍一下数据治理的典型应用,多谢!
  A:数据治理相对来说还是一个非常宽泛的概念,包括技术治理和人的治理两个范畴。我就从技术实现的角度,介绍SQL Server 2014内置的在数据治理方面的两个工具,一个叫做主数据服务(MDS),对数据建立和维护数据进行监管,从而确保分布在多个系统中的数据的完整性和一致性。另外一个叫SQL Server 数据质量服务(DQS),它针对清除和复制数据提供了一项基于知识的解决方案,以此来确保用户数据集成的准确性,从而检测并避免出现重复或不规范的数据。SQL Server 2014在提供的数据质量服务(DQS)和主数据服务(MDS)为企业端对端的数据治理提供了基础。帮助用户通过更先进的数据清洗算法确保数据的可靠、一致,提高数据质量,使后续的大数据分析的可信度得到增强。相关案例及应用场景可参考:http://www.microsoft.com/china/casestudies/details.aspx?CompanyProfileID=149 。

  Q18:问个职业生涯的问题,你以前做过前端、后端、项目管理、数据库,很全才,但想做到每个点都精通,很难,那么如何选择做哪个作为自己的奋斗目标?是按兴趣走,还是跟着公司的发展需求走?你是如何转到微软做数据架构师的?
  A:我会跟着兴趣走。但兴趣点在不同职业阶段和环境是会变的。我个人的干货体验是,兴趣变化基本规律和马斯洛的需要层次理论吻合的。没本事的时候公司的兴趣就是你的兴趣。有本事的时候你的兴趣会影响公司的方向。架构设计就是一个取舍的过程,这一法则同样适用职业生涯。如果我还没到能影响公司方向的时候,那么上策是找一个公司,需求和我兴趣一致;中策是自己培养和公司一致目标的兴趣;下策是自然是格格不入,那就要考虑换岗了。流程图自己脑补吧。不过多跟朋友、长辈沟通,开阔眼界是避免太过自己的前提。公司、乃至行业的发展趋势是什么,很大程度决定你的方向。俗套说法叫找风口。但没有一定的积累,飞起来的姿势也会很难看的。所以职业生涯没有捷径,尤其是做技术的。我在加入微软之前就很认同微软的工程师文化。前端、后端开发也有大量时间用的微软技术平台。我后来慢慢专注于后台、尤其是数据架构是因为我工作的关系。在华尔街上,”知识就是金钱“ 这句话你基本可以照字面意思理解。而知识来自于数据。不同于国内,微软数据平台在”花街“各大银行中的应用是非常流行的。因为银行对资产利用率和投资回报率都是非常看重的,技术决策更多的是市场化的。我个人的体验是,微软在工程实践方面的积累是非常深厚的。前期平台架构设计很谨慎、周期很长。但平台的优势就是你一旦完成,后面的应用就可以非常快速推进。必要的非功能性需求比如安全就可以在应用层很少考虑了。从系统工程专业学者的角度,我对微软文化心有戚戚焉。我加入黑石,是因为彼时对以技术战胜对手获得金钱回报有很大兴趣;我加入微软,是因为我看到微软正重拾创客精神,而且云平台的布局也以处于领先地位。领导下一次技术革命,无论是风口还是姿势,都是我的兴趣所在。