本人新书《SQL Server 2008数据库技术内幕》前言--已出版

在使用SQL Server几年、熟悉各种操作之后,就会对原理性的知识或多或少出现一些疑问,比如:

SQL Server如何进行空间分配?

索引为什么能够提高查询速度?

一个SQL命令产生了了哪些重做数据?

重做日志的LSN有什么具体含义吗?

经过查找资料(如联机丛书),可能会找到有关问题的一些信息,如上述几个问题可能会有下面的答案:SQL Server使用GAMSGAM数据页中的位图数据管理空间分配;索引以B树结构存储索引数据,叶节点存储的是索引键值及所在记录的物理地址;SQL Server在重做日志中记录SQL命令修改的数据;LSN用于描述一个操作发生的先后顺序。

过一段时间,你会对这些答案不满意,因为这些说法只是原理性的解释,并未看到实际的位图数据、索引数据以及重做数据,而这里对LSN的解释,会让人以为LSN就是对应操作发生的时间。很多时候,SQL Server联机丛书及市面上的一些相关书籍就是采用这种方式解释各种原理性的知识,并未给出查看这些实际数据的方法。

所谓“眼见为实”,一个结论如果自己不能亲自动手用实验验证,很难说对其彻底理解,它的正确性总是让人不放心,当数据库出现问题时,可能会束手无策。以笔者的经验,一个原理如果自己亲自验证一下,有时确实会得到和流行说法,甚至和联机丛书不一样的结论。比如下面的结论:“若数据库设置为大容量日志恢复模式,则大容量操作会以最少方式记录重做数据”,这是很多人很熟悉的一个结论,其实这个结论是不完整的。“insert into select”命令是一个典型的大容量操作,如果考查这个命令产生的重做数据,你会发现SQL Server并未使用最少日志方式记录其重做数据,若使其真的以最少日志方式记录重做数据,背后其实还有很多条件限制。

解决这种SQL Server底层原理性问题,找到可以自己动手验证的方法,如果周围没有人可以请教,一般还有下面两个途径:参考Kalen Delaney的名著《SQL Server技术内幕》系列书籍或Ken Henderson的同类书籍,上网搜索或到相关论坛提问。

但很多问题用上面方法都找不到令人满意的答案,如重做记录LSN的含义以及上面提到的大容量操作问题。在这种情况下,只有自己慢慢摸索,构造合适的实验,才能得到满意的答案。本书是作者十几年来,在学习SQL Server过程中,解决所遇到的各种问题的一个整理,每个结论后面都有详细的实验过程来验证它的正确性,从而让读者可以“眼见为实”,在写作过程中,也纠正了自己的一些错误认识,本书非常适合那些和笔者一样,困扰于底层原理,迷恋于研究、验证底层原理的读者。

本书所使用的SQL Server版本为:

Microsoft SQL Server 2008 (SP1) - 10.0.2714.0 (Intel X86)

Enterprise Edition on Windows NT 5.1 (Build 2600: Service Pack 3, v.5973)

在写作本书过程中,曹业勋(网名shuiniu)审阅了部分书稿,并就有关内容进行了深入讨论,作者还就某些具体问题通过电子邮件请教了SQL Server开发团队的Sangeetha ShekarSunil Agarwal,以及SQL Server存储引擎开发团队前负责人Paul S. Randal,特此致谢。

本书的写作用了整一年的时间,相对本书的内容来说,还是很仓促的,有些内容还有待深入,有些实验及结论可能考虑得不够完整,甚至存在错误,欢迎读者给予指正。

作者电子邮件:[email protected]

亚马逊链接,京东链接,当当链接

[@more@]

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/37724/viewspace-1056907/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/37724/viewspace-1056907/

你可能感兴趣的:(本人新书《SQL Server 2008数据库技术内幕》前言--已出版)