前言
Microsoft SQL Server作为一款通用的关系型数据库管理系统,在业界已经有20年的历史。由于其上手容易、管理方便、功能丰富、系统稳定,受到了广大用户的青睐。随着PC服务器能力的提高和它自身的不断改进,它的使用广度和深度正在不断扩大。近年来它的使用主要有以下几种特征。
1.能够支持更多的并发用户与更大的数据库
最近几年,PC服务器完成了从32位到64位的转化,支持的内存数量有了数量级的增加。对于SQL Server这样一个需要缓存大量数据的Windows应用,这无疑帮助巨大。而现在的服务器动辄有十几个、几十个、甚至三位数个数的CPU,也提供了从前想象不到的计算能力,这使得SQL Server能够有更多的系统资源来响应客户端的请求。
而在SQL Server内部,微软的产品组也在不断地优化其内部设计,对资源调度、数据存储、语句执行及内部监控机制都做了重大调整,使得SQL Server能够更有效地利用系统资源,高效稳定地运行。
这两方面相结合,其效果是SQL Server在不断地挑战自身极限,能够支持更多的并发用户数与更大的数据库。我们衡量一台SQL Server能力的强弱经常会看一个性能监视器指标Batch Requests/sec,也就是SQL Server每秒能做完的批处理数目。近年来在国内客户那里,这个指标超过1000的服务器是越来越普遍了。而在一些国外的客户那里,我们能看到负荷超过10000、甚至能完成接近20000个批处理/秒的真实生产系统。
2.成为一个通用数据平台,被更多的应用服务所使用
由于SQL Server出色的表现,它被越来越多的应用服务选作了背后的数据平台。现在很多流行的微软服务器端产品,例如Microsoft SharePoint Service、Microsoft Lync Server、Microsoft Dynamics CRM、Microsoft System Center Configuration Manager,其背后都有SQL Server为它们存储和处理数据。
在这种背景下,SQL Server 2012于2012年上半年发布了。作为全新的企业级信息平台,SQL Server 2012不仅提供了更高级别的企业级稳定性,更灵活深入的商业智能,同时提供多种功能满足公有云及私有云环境下应用的实现与运行,并且可以帮助企业无缝透明地从现有的传统应用迁移到私有云及公有云之上。
SQL Server像微软的其他很多产品一样,上手很容易,装上就能用,入门的门槛不高。国内很多介绍SQL Server的书籍都集中在功能介绍和编程开发上。很多用户觉得SQL Server就像一台傻瓜照相机,在大部分时候都能拍出不错的照片,可是如果工作不正常或者达不到要求,就不知道应该怎么调整了。其实SQL Server可以当傻瓜机用,但也具有复杂的“手动功能”。对于数据库的常见问题,其实都有一些套路来定位。对于性能优化问题,SQL Server也有很多地方可以调整。一台运行着关键业务的高负荷的SQL Server是需要开发者和使用者的细心管理与精心调优的。
在2009年的时候,作者出版了《Microsoft SQL Server企业级平台管理实践》这本书。作者把自己掌握的有关关系型数据库引擎的知识做了一些梳理,总结出在SQL Server设计和管理过程中最常遇到的问题,进行了比较完整的阐述。此书问世后,得到了读者的好评。
但是当初写那本书的时候,SQL 2005和SQL 2008刚刚在市场上广泛使用,所以很多经验还没有得到完全更新,一些问题诊断方法还在使用着SQL 2000时的老办法。而且因为作者的专业知识还不够全面,像安装、连接组件、群集、数据库镜像、复制、Log Shipping等这些很重要的问题没有被谈及,有些章节写得还不够深入和准确。随着很多新功能的引入,很多原有的做法也有所改变。
这次,我有幸请到了俞榕刚、王佳毅、朱桦三位同事来补充原来缺失的部分,重写相关的章节,并深入讨论SQL Server 2012所带来的改变和新功能。由于他们的强力加入,本书的内容变得更加丰富和全面了。
本书面向的读者
本书不是一本功能介绍的入门书籍,也不像Inside Microsoft SQL Server系列一样偏重理论。本书的最大特点是面向实战。它主要面向SQL Server各个版本的有一定基础的数据库系统管理和开发人员,针对的是他们在日常工作中可能遇到的种种困扰。讨论的主题都是在企业开发数据库应用和使用SQL Server过程中常见的经典问题。在每个章节里,都会从在这个主题上经常会遇到的问题入手,描述其表现形式,介绍其背后的运行机理与基本理论知识,介绍搜集和分析问题日志的方法,以及解决实际问题的可选手段。本书包含的案例分析都来源于真实案例。读者既可以把这本书当作一部进阶学习的参考书籍,更深入地理解SQL Server的原理和运行规律,以提高自身解决问题的能力;也可以把这本书当作一本工具书,遇到问题时查阅解决办法。
本书的结构
本书主要分为4大部分。
第1部分包括第1章~第4章,主要是谈SQL Server系统的选型和部署,包括SQL的安装和升级(第1章)、高可用及灾难恢复方案的选择(第2章和第3章),以及在编写数据库应用时应该怎样选择和使用各种连接组件(第4章)。
第2部分包括第5章~第10章,主要是谈SQL Server日常使用与管理中比较容易遇到的问题,包括SQL Server服务无法启动、数据库不可访问(第5章)、连接问题(第6章)、身份认证与连接加密(第7章)、空间管理(第8章)、数据库备份和恢复手段(第9章)、数据库损坏修复与预防等问题(第10章)。对于数据库管理员,这部分内容可能比较有帮助。
第3部分包括第11章~第18章,主要是谈论SQL Server在运行过程中对各种资源的使用,以及由此可能会遇到的服务器不稳定或者性能问题。其中包括SQL Server内存分配理念和常见内存问题(第11章)、SQL Server常见的I/O问题(第12章)、任务调度与CPU问题(第13章)、阻塞与死锁(第14章和第15章)、从等待状态判断系统资源瓶颈(第16章),以及如何分析有性能问题的语句和怎样去优化它们(第17章和第18章)。如果要做SQL Server的性能调优,或者想了解怎么才能设计出高性能的数据库应用,这部分的讨论对你一定会非常有帮助。
第4部分是第19章,它是个工具性章节,总结了处理SQL Server问题时可能需要检查的日志种类,以及搜集它们的推荐方法。在读者阅读前面各章的时候,这些内容可以作为参考。
本书基于的版本
SQL Server的基础框架结构从2005版以后并没有被推倒重来过,所以本书讨论的问题基本对SQL 2005以后的各个版本都适用,只是有些细节可能会有所不同。对于SQL 2012所引入的新功能或者重大的变化书中特别做出了说明。
本书不包含的内容
本书主要关注于关系型数据库引擎的管理和使用。对于SQL Server的商业智能组件部分,例如SQL Server Analysis Service、SQL Server Reporting Service、SQL Server Integration Service等没有涉及。