SQLServer培训笔记(一)
好久没有参加技术方面的 培训 了,今天参加了SQLServer的 培训 ,记点 笔记 吧。 SQLServer的历史 微软最开始是没有自己的数据库服务器的,而是和Sybase合作,微软出钱和人力和Sybase一起开发,实际上是为了从Sybase那里学东西。后来微软觉得学得差不多了,
好久没有参加技术方面的培训了,今天参加了SQLServer的培训,记点笔记吧。
SQLServer的历史
微软最开始是没有自己的数据库服务器的,而是和Sybase合作,微软出钱和人力和Sybase一起开发,实际上是为了从Sybase那里学东西。后来微软觉得学得差不多了,就把人马拉回来自己做,Sybase里面也有些开发人员跳槽到了微软。因此,SQLServer6.5以前的版本中很多内容是和Sybase数据库类似的,连关键字都一样的。Sybase的数据库进程名字叫sqlserver,而微软的SQLServer的进程名字是sqlservr(少了个e)。这令Sybase很受伤。这就是微软的第一代SQLSever。
第二代SQLServer是SQLServer7.0和SQLSever2000,在SQLSer7.0和2000版本中,微软的主要工作是去Sybase化,不过在编辑器里面,Sybase数据库的某些关键字还是被高亮显示,但是已经不再是关键字了。这两个版本是用C++来实现的,增强了可靠性和安全性,集成了BI的功能。
第三代SQLServer是2005和2008和2008/R2,微软花了5年的时间,把代码用.Net来重新实现了(一些底层的库还是用C++实现的,主要是SQLOS里面的部分。感谢网友@揭巴 指正),2005实际发布时间是2006年,可见时间很赶。里面加入了Automatic Tuning的和降低了TCO (Total cost of ownership)。其中Automatic Tuning是个很好的功能,客户自己就能发现数据库系统中的问题,所以,系统的serviceability很重要。
SQLServer的发行版本(Edition),按照功能来分
- 企业版 - 功能最强的版本,得花不少银子,有财力的大企业采用。
- 标准版 - 功能稍微少些,给财力一般的中小企业采用。
- 开发者版本 - 功能和企业版一样,不过只能开发人员在开发阶段使用。如果非要放到生产环境里面用也行,不过被微软逮住就被罚钱。
- Express Edition - 免费的,功能受限制,主要用于低端的客户,比如开发个三国杀的游戏,在里面带个小数据库。
SQLSever的Build版本,补丁管理和支持策略
Build号很好理解,搞软件的都知道,通常每天都会出一个build,每次build的build号都不一样,所以通过build号是能准确区分SQLServer的信息的。在做任何调优工作之前,首先要搞清楚SQLServer的版本和build号,因为有些功能在低版本里面本来就不支持或者有已知问题的。
SQLServer的补丁有这样几类:
- Hotfix - 通常在RTM后,发现了问题就发个hotfix来修复,hotfix不是一个完整的SQLServer安装程序,必须是已经安装了特定版本的SQLServer后才能安装。注意,装了hotfix后,SQLServer的build号会更新。
- Cumulative Updates - hotfix发多了,把他们打个包来发布。
- ServicePack (SP),把多个CU打包在一起。
通常的建议是没有问题的话,hotfix和CU就不要升级了,因为升级一次的代价蛮大的,需要做兼容性测试,但是SP是建议装上的。微软的支持策略是,上一个SP的支持将在新的SP发布后12个月结束,所以通常客户需要在12个月内升级新的SP。比如,如果SP2已经出了12个月,而你还在用SP1,微软是不提供服务的,除非你先升级到SP2,这样来降低他们的服务成本。
OLAP Vs OLTP
OLTP = Online Transaction Processing,在线的交易系统,比如淘宝,亚马逊,这样对数据的要求就数据库的插入,删除,更新的要求比较高,通常四种数据库操作各占25%,这种数据库系统的建模一般是ER模型,要满足3大范式。
OLAP = Online Analyze Processing,这种类型的系统主要是以查询操作居多,占到了95%以上,数据库采用Dimensional Modeling来建模,也就是BI系统,它是定期从交易的数据库中拉数据出了做分析,帮助领导们做决策。
在SQLServer的几大组件里面,Relationship Database Engine就是支持OLTP的。SSAS, SSIS和SSRS就是支持OLAP的。
- SSAS - Analysis Service 做数据分析的组件
- SSIS - Integration Service 把关系型数据库中的数据导入到SSAS里面,并做数据的清洗和重整。
- SSRS - Reporting Service 提供前端报表的展现
虽然SSAS,SSIS,SSRS,和关系型数据库引擎都包含在SQLServer里面,但是它们实际上是独立的,如果分开的话就是两个产品。
SQLServer的架构
SQLServer的架构可以分成三个部分,
- Query Compilation and Execution Engine - 主要是负责把SQL转成Execution Plan
- Storage Engine - 执行Execution Plan?
- SQLOS - 在OS的库上面做了一层抽象,提供给Storeage Engine使用,这样就能很方便地把数据库内部的状态给抓出来。
这里Execution Plan 很重要,它是SQL的一个中间结果,数据库引擎就是按照Execution Plan来执行SQL语句的,调优都是针对Execution Plan来调的。
SQLServer的数据文件和Log文件
在SQLServer里面,当开始一个事务的时候,它是异步地写数据文件,而同步地写transaction log,只有当log写完以后,才把一个transaction提交,这样来保证数据能回滚。所以,log文件可能是系统的一个瓶颈,应当放在速度比较快的磁盘上面。
今天还讲了,
- 数据库的调优,大致方向是利用SQLServer的自带的report功能,server side profiler, perfmon找到内存,CPU,IO消耗比较大的SQL语句,再看它的execution plan,然后再找对应的方法去解决。比如加index等,可以开启set statistics time/profile/io on来比较前后的效果。说来简单,做起来难。
- Cluster,这是一种HA的解决方案,可以有AP(一个坏了,另外一个顶上),AA和N+1的架构
- Replication: Publisher, Distributor and Subscriber的结构(支持1对多的复制,Distributor去拉数据,然后分发到subscriber那里去),P2P的结构(几个SQLServer内部全连接,只有一个写的入口)。
- Snapshot,和存储的snapshot很类似,采用copy on first write 的模式。
- 2008里面新的管理工具的一些特性。
总体感觉还不错,讲师长得像我一个同学。