本人新書《SQL Server 2008資料庫技術內幕》前言--已出版

lawzjf發表於2011-12-20

在使用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,特此致謝。

本書的寫作用了整一年的時間,相對本書的內容來說,還是很倉促的,有些內容還有待深入,有些實驗及結論可能考慮得不夠完整,甚至存在錯誤,歡迎讀者給予指正。

作者電子郵件:

,,

[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/37724/viewspace-1056907/,如需轉載,請註明出處,否則將追究法律責任。

相關文章